目前有幾個幾年前創建的騰訊云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)


