系统信息
## 操作系统
CentOS Linux release 7.9.2009 (Core)
## k8s 版本
v1.22.10
## zadig 版本
v1.15.0
故障背景
最近zadig发布时,时不时出现连接我们内网服务gitlab
和harbor
超时timeout问题,看了下 k8s etcd 的监控信息,确实延时挺高(200~500ms),正常延时应该在10ms左右。
机房服务器集群最近在进行资源更新和扩容,涉及到一些卷池扩容,数据同步等动作。所以,波及到集群中我的k8s集群,zadig发布服务正好部署在此集群之上。这样就导致两个问题:
(1)流水发布发布时间变长,如构建到发布平时只用3分钟,此时需要用6分钟。
(2)流水发布失败率变高,连接gitlab、harbor、nexus等timeout或retry。
为了缓解连接gitlab
等服务超时问题,我想到两种方式:
(1)更新流水发布时使用的基础镜像,添加我们内网DNS服务,但我觉得这种方式不可行,因为当流水发布拉起一个pod开始构建时会把自定义的DNS信息覆盖掉。(这个我没测试)
(2)zadig 组件服务相关pod中添加内网DNS服务。
使用第二种方式时,出现了问题,导致整个zadig发布失效。
故障现象
使用第二种方式,添加内网DNS服务(这里以zadig-zadig-dex
为例):
更新完后,发现无法正常发布流水,错误提示无法连接远端k8s集群。查看集群管理,发现状态异常:
将刚添加的DNS配置去掉,恢复原有配置,但发现集群管理中状态异常,发布无法进行。查看远端k8s中客户端插件服务log,报错如下:
ERROR tool/remotedialer/client.go:36 Remotedialer proxy error: websocket: bad handshake
ERROR tool/remotedialer/client.go:59 Failed to connect to proxy. Response status: 308 - 308 Permanent Redirect. Response body: <html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center>308 Permanent Redirect</center>
<hr><center>nginx</center>
</body>
</html>
故障修复
方法一
等待zadig的自动恢复,这里会有三种情况:
(1)可以正常发布流水,但是zadig的web界面集群管理那里还是异常状态,但不影响使用。
(2)之前创建的项目可以正常发布,但是无法新建项目在该集群(集群管理)上,即新建项目后在创建分支时,无法选择该集群。
(3)无法发布流水。
方法二
在集群管理中重新创建集群,这是比较稳妥的方法。不要直接去删除异常的集群(也直接删除不了)。
注意:
(1)“选择项目”时该集群之前所关联的项目。
(2)该集群中koderover-agent
命名空间下的deployment和statefulset资源手动删除,service无需删除。
(3)创建好集群点击“更新组件”(koderover-agent-node-agent、resource-server和dind),如果组件自动安装的不全,手动部署下。
参考文档
- zadig:一次更新DNS引发的惨案.md