前言

最近把阿里云k8s组件Cloud Controller Manager从v2.1.0升级到v2.3.0,发现不是特别顺利,把解决过程记录下来,防止后面再出现一模一样的问题。

操作

点击升级,然后发现前置检查报错,如下所示:
image.png

然后,在事件中心中也打印:

DryRun: Error syncing load balancer [lb-bp1erkwv3fcdyobqd7x3k]: Message: loadbalancer lb-bp1erkwv3fcdyobqd7x3k listener 80 should be updated, VGroupId rsp-bp1up5x12mwt6 should be changed to rsp-bp1tsakxo59ww;

DryRun: Error syncing load balancer [lb-bp1erkwv3fcdyobqd7x3k]: Message: loadbalancer lb-bp1erkwv3fcdyobqd7x3k listener 443 should be updated, VGroupId rsp-bp1cuciusq2zf should be changed to rsp-bp11d0mmv0cma;

发现跟负载均衡有关系,然后查看SLB,只要把VGroupIdrsp-bp1up5x12mwt6 设置到 rsp-bp1tsakxo59ww;和把rsp-bp1cuciusq2z设置到rsp-bp11d0mmv0cma即可
如下所示:
image.png
image.png

按照事件中心的提示,我们只要把80和443对应的虚拟服务器组转移一下就好。

转移虚拟服务组

1、点击修改80或443监听配置
image.png

2、下一步

3、指定服务器组
image.png

4、连续点击下一步,即可完成

这样就完成了,你再点击升级Cloud Controller Manager就没问题了

image.png

总结

1、上面的4个虚拟服务器组都是系统生成的
2、升级完k8s之后又变回去了,又要再执行一次,感觉好麻烦,于是我把剩余的两个,就是上面图中的第1、2删除,后面再观察有没有问题。
image.png

2022-7-6更新: 网站一会可用一会不可用问题再现了

最近升级ACK组件后又出现了服务一会能用,一会不能用的问题,然后发起工单和阿里云工程师开启了两天的排错之旅,下面讲解一下排错过程,也是为了以后遇到相同问题时有个参考。

问题1:elasticsearch的pod一直删除不了
分析问题:
我在ACK上面安装了es,但是发现资源不够用,就想删除,但是发现有个pod一直删除不了

pod/test-elasticsearch-ingest-0   1/1     Terminating   1 (6h41m ago)   6h42m

解决问题:
通过阿里工程师的沟通,使用下面的强制删除命令就好了

kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period=0 

问题2:我的网站一会可用,一会不可用

image.png

分析问题:
1、查看节点(ECS)上面的kubelet是否正常,然后,登录查看都是正常的-未解决

systemctl status kubelet.service

2、升级虚拟服务器组,然后,查看网站还是一会可用,一会不可用-未解决

3、阿里工程师觉得是nginx-ingress-controller组件版本太低了,新版本已经到1.21了,我的版本还是0.44,于是手动升级-未解决

手动升级nginx-ingress-controller版本的方案

风险:会覆盖掉客户从组件管理配置页面之外的对nginx deployment的修改

操作注意事项:需要提前把webhook的job pod提前清理掉,在kube-system命名空间

升级接口:https://next.api.aliyun.com/api/CS/2015-12-15/UpgradeClusterAddons?lang=JAVA¶ms={%22body%22:[{%22component_name%22:%22nginx-ingress-controller%22,%22next_version%22:%22v1.2.0-aliyun.1%22}]}

期间删除了两个job

kubectl get job -n kube-system
NAME                                    COMPLETIONS   DURATION   AGE
ingress-nginx-admission-create          1/1           4s         456d
ingress-nginx-admission-patch           1/1           5s         456d

然后得到第二个工程师的反馈:

刚刚我跟咱们后端研发的同学沟通了下,目前ingress 0.44升级到1.X版本 控制台升级接口正在研发中,等成功发布后,可以直接在组件管理点升级,并且会详细显示deployment修改的内容
您这边如果不是必须要做ingress升级,建议您这边等下功能发布

image.png

4、接着发起新的工单(以为解决了!!!),阿里工程师让我重建一下nginx-ingress-controller的pod-未解决

image.png

于是我删除上面两个Pod,之后,发现负载均衡里面多出来两个新的虚拟服务组,然后我的网站就根本打不开了,之前还能50%的概率打开,这次彻底崩了。难过之余,想想有没有其它解决办法,于是接着问。

5、接着阿里工程师说:把这个nginx-ingress-lb的service重建一下,先把service改为clusterip的类型。再改回负载均衡类型-未解决

image.png

6、阿里工程师说这样子还不能成功说明跟ingress和slb都没关系,说明是你的服务有问题,然后让我反馈报错日志-已解决

gateway-server日志:

io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Host is unreachable: /172.20.0.235:8902

space-service日志

 removed ips(1) service: DEFAULT_GROUP@@space-service@@DEFAULT -> [{"instanceId":"172.20.0.247#8902#DEFAULT#DEFAULT_GROUP@@space-service","ip":"172.20.0.247","port":8902,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@space-service","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}]
2022-07-06 10:22:36.240  INFO 1 --- [.naming.updater] com.alibaba.nacos.client.naming          : current ips:(1) service: DEFAULT_GROUP@@space-service@@DEFAULT -> [{"instanceId":"172.20.0.235#8902#DEFAULT#DEFAULT_GROUP@@space-

image.png
然后发现跟Nacos有关,然后在nacos上面发现space-service服务的ip一直在变,于是想到把space-service对应的k8s里面的development删除重新建试试。

kubectl delete deploy testapi-seaurl-space-service -n seaurl

space-service的development重建之后发现Nacos正常了,我的网站也访问也正常了,终于解决了!


Awbeci
3.1k 声望212 粉丝

Awbeci