騰訊云TKE kubernetes1.20升級1.26踩坑記

2024年11月13日23:25:24 發表評論 1,438 ℃

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