前言
最近把阿里云k8s组件Cloud Controller Manager从v2.1.0升级到v2.3.0,发现不是特别顺利,把解决过程记录下来,防止后面再出现一模一样的问题。
操作
点击升级,然后发现前置检查报错,如下所示:
然后,在事件中心中也打印:
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
即可
如下所示:
按照事件中心的提示,我们只要把80和443对应的虚拟服务器组转移一下就好。
转移虚拟服务组
1、点击修改80或443监听配置
2、下一步
3、指定服务器组
4、连续点击下一步,即可完成
这样就完成了,你再点击升级Cloud Controller Manager就没问题了
总结
1、上面的4个虚拟服务器组都是系统生成的
2、升级完k8s之后又变回去了,又要再执行一次,感觉好麻烦,于是我把剩余的两个,就是上面图中的第1、2删除,后面再观察有没有问题。
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:我的网站一会可用,一会不可用
分析问题:
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升级,建议您这边等下功能发布
4、接着发起新的工单(以为解决了!!!),阿里工程师让我重建一下nginx-ingress-controller
的pod-未解决
于是我删除上面两个Pod,之后,发现负载均衡里面多出来两个新的虚拟服务组,然后我的网站就根本打不开了,之前还能50%的概率打开,这次彻底崩了。难过之余,想想有没有其它解决办法,于是接着问。
5、接着阿里工程师说:把这个nginx-ingress-lb的service重建一下,先把service改为clusterip的类型。再改回负载均衡类型-未解决
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-
然后发现跟Nacos有关,然后在nacos上面发现space-service
服务的ip一直在变,于是想到把space-service
对应的k8s里面的development删除重新建试试。
kubectl delete deploy testapi-seaurl-space-service -n seaurl
space-service的development重建之后发现Nacos正常了,我的网站也访问也正常了,终于解决了!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。