腾讯云TKE kubernetes1.20升级1.26踩坑记

2024年11月13日23:25:24 发表评论 138 ℃

目前有几个几年前创建的腾讯云TKE集群,都是1.20.6的版本。

最近看到官方给的维护周期公告。马上到截止日期了,就着手准备升级到1.26。

腾讯云TKE kubernetes1.20升级1.26踩坑记

刚接手不久的时候就打算升级到最新,但是发现集群里面的服务太混乱,不敢轻举妄动,前前后后经过快两年时间的优化,目前已经具备升级的条件了。

但是万万没想到腾讯云这个TKE升级并没有那么顺利。

从1.20升级到1.22就踩坑了,提示coredns版本太低。

腾讯云TKE kubernetes1.20升级1.26踩坑记

手动去改了版本以后发现无法启动。

最后找到官方的文档(coredns升级到升级到1.8.4),才完成第一步coredns的版本升级。

确认coredns没问题以后,开始控制台操作升级,在前置检查的时候,又开始踩坑,又未通过。

腾讯云TKE kubernetes1.20升级1.26踩坑记

主要问题是csi插件使用形式不对。

腾讯云TKE kubernetes1.20升级1.26踩坑记

这个问题解决方案就是手动创建一个静态pvc,然后去替换csi插件deployments里面的volumes内容。

创建pv的时候需要去找到原来csi插件deployments配置里面的fsid和host。

kubectl describe pods -n kube-system com.tencent.cloud.csi.tcfs.xxx-xxx

然后找到Volumes下面的VolumeAttributes

腾讯云TKE kubernetes1.20升级1.26踩坑记

然后创建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

腾讯云TKE kubernetes1.20升级1.26踩坑记

更改csi deployments里面的volumes:

腾讯云TKE kubernetes1.20升级1.26踩坑记

可以看到pod已经销毁重新创建

腾讯云TKE kubernetes1.20升级1.26踩坑记

本以为这样就结束了,可以正常升级到1.22了,但是执行前置检查的时候发现还未通过。

腾讯云TKE kubernetes1.20升级1.26踩坑记

发现replicasets类型还没修改。

腾讯云TKE kubernetes1.20升级1.26踩坑记

直接删除历史的就行。

腾讯云TKE kubernetes1.20升级1.26踩坑记

开始从1.20.6升级到1.22。

腾讯云TKE kubernetes1.20升级1.26踩坑记

升级中master节点,耐心等待就行了。

腾讯云TKE kubernetes1.20升级1.26踩坑记

升级node节点。

腾讯云TKE kubernetes1.20升级1.26踩坑记

全部已经升级完成,测试访问无异常以后,准备升级到1.24。

腾讯云TKE kubernetes1.20升级1.26踩坑记

前置检查也正常通过,只有一些弃用的api提示,这个也需要注意一下,看下是否需要更新相关的配置。

腾讯云TKE kubernetes1.20升级1.26踩坑记

master升级完以后,准备升级node节点,提示1.24已经不支持docker。

腾讯云TKE kubernetes1.20升级1.26踩坑记

只能重装系统升级。

腾讯云TKE kubernetes1.20升级1.26踩坑记

由于这个是开发环境,只有一个节点,没办法只有临时加一个节点进来,加入进来的节点默认就已经是1.24版本。

腾讯云TKE kubernetes1.20升级1.26踩坑记

然后直接操作重装升级。

1.24升级到1.26版本的时候,又提示coredns版本太低。

腾讯云TKE kubernetes1.20升级1.26踩坑记

只能再去手动升级。

腾讯云TKE kubernetes1.20升级1.26踩坑记

coredns升级以后,控制台再操作升级master和node。

升级完成以后最后再去验证集群服务。

腾讯云TKE kubernetes1.20升级1.26踩坑记

我的集群在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)

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: