目前有几个几年前创建的腾讯云TKE集群,都是1.20.6的版本。
最近看到官方给的维护周期公告。马上到截止日期了,就着手准备升级到1.26。
刚接手不久的时候就打算升级到最新,但是发现集群里面的服务太混乱,不敢轻举妄动,前前后后经过快两年时间的优化,目前已经具备升级的条件了。
但是万万没想到腾讯云这个TKE升级并没有那么顺利。
从1.20升级到1.22就踩坑了,提示coredns版本太低。
手动去改了版本以后发现无法启动。
最后找到官方的文档(coredns升级到升级到1.8.4),才完成第一步coredns的版本升级。
确认coredns没问题以后,开始控制台操作升级,在前置检查的时候,又开始踩坑,又未通过。
主要问题是csi插件使用形式不对。
这个问题解决方案就是手动创建一个静态pvc,然后去替换csi插件deployments里面的volumes内容。
创建pv的时候需要去找到原来csi插件deployments配置里面的fsid和host。
kubectl describe pods -n kube-system com.tencent.cloud.csi.tcfs.xxx-xxx
然后找到Volumes下面的VolumeAttributes
然后创建pvc,替换fsid和host为上面获取到的值。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-tcfs-sharecfs-for-inline spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: com.tencent.cloud.csi.cfs volumeAttributes: fsid: 35xxxxx host: 172.16.xx.xx path: / volumeHandle: pv-tcfs-sharecfs-for-inline persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-tcfs-sharecfs-for-inline namespace: kube-system spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" volumeMode: Filesystem volumeName: pv-tcfs-sharecfs-for-inline
执行创建pvc
更改csi deployments里面的volumes:
可以看到pod已经销毁重新创建
本以为这样就结束了,可以正常升级到1.22了,但是执行前置检查的时候发现还未通过。
发现replicasets类型还没修改。
直接删除历史的就行。
开始从1.20.6升级到1.22。
升级中master节点,耐心等待就行了。
升级node节点。
全部已经升级完成,测试访问无异常以后,准备升级到1.24。
前置检查也正常通过,只有一些弃用的api提示,这个也需要注意一下,看下是否需要更新相关的配置。
master升级完以后,准备升级node节点,提示1.24已经不支持docker。
只能重装系统升级。
由于这个是开发环境,只有一个节点,没办法只有临时加一个节点进来,加入进来的节点默认就已经是1.24版本。
然后直接操作重装升级。
1.24升级到1.26版本的时候,又提示coredns版本太低。
只能再去手动升级。
coredns升级以后,控制台再操作升级master和node。
升级完成以后最后再去验证集群服务。
我的集群在1.20升级到1.26以后,出现了ingress相关路由失效,主要原因就是相关api已经弃用,更改为最新版本的就行。
主要的报错如下:
E1113 13:01:18.620834 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.3/tools/cache/reflector.go:105: Failed to list *v1beta1.Ingress: the server could not find the requested resource (get ingresses.extensions) E1113 13:01:19.622840 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.3/tools/cache/reflector.go:105: Failed to list *v1beta1.Ingress: the server could not find the requested resource (get ingresses.extensions)