[kubernetes]-kubeadm升級1.14.2到1.18.2
導語:測試環境版本比較低1.14.2 需要升級到1.18 記錄一下自己大致的升級過程。給自己做筆記,中間可能有漏步驟,下次升級再來補唄。
此次升級是kubeadm安裝的k8s
kubbernetes版本相容性
在升級之前你需要了解各版本間的關係:
- kubernetes版本命名方式表示為XYZ,其中X表示主要版本,Y表示次要版本,Z表示補丁版本。
比如 1.16.0 - K8s所有元件 kube-controller,kube-scheduler,kubelet的版本號不得高於kube-apiserver的版本號。
- 這些元件的版本號可低於kube-apiserver的1個次要版本,比如kube-apierver是1.16.0,其它元件的版本可以為1.16.x和1.15.x。
- 在一個HA叢集中,多個kube-apiserver間的版本號最多隻能相差一個次版本號,比如 1.16和1.15。
- 最好所有元件與kube-apiserver版本號完全一致。
- 因此升級Kubernetes叢集時,最先升級的核心元件就是kube-apiserver。
- 且只能向上升級為一個次要版本。
- kubectl版本最多隻能比kube-apiserver高或低一個次版本號。
巨集觀升級流程
- 升級主控制平面節點。
- 升級其他控制平面節點。
- 升級Node節點。
升級注意事項
- 確定升級前的的kubeadm叢集版本。
- kubeadm upgrade不會影響到工作負載,僅涉及k8s內部的元件,但是備份etcd資料庫是最佳實踐。
- 升級後,所有容器都會重啟動,因為容器的hash值已更改。
- 由於版本的相容性,只能從一個次要版本升級到另外一個次要版本,不能跳躍升級。
- 叢集控制平面應使用靜態Pod和etcd pod或外部etcd。
kubeadm upgrade 叢集升級命令詳解
通過查詢命令列幫助:
$ kubeadm upgrade -h
Upgrade your cluster smoothly to a newer version with this command.
Usage:
kubeadm upgrade [flags]
kubeadm upgrade [command]
`
Available Commands:
apply Upgrade your Kubernetes cluster to the specified version.
diff Show what differences would be applied to existing static pod manifests. See also: kubeadm upgrade apply --dry-run
node Upgrade commands for a node in the cluster. Currently only supports upgrading the configuration, not the kubelet itself.
plan Check which versions are available to upgrade to and validate whether your current cluster is upgradeable. To skip the internet check, pass in the optional [version] parameter.
命令解析:
- apply: 升級Kubernetes叢集到指定版本。
- diff: 即將執行的靜態Pod檔案清單與當前正執行的靜態Pod清單檔案的差異。
- node: 升級叢集中的node,當前(v1.16)僅支援升級kubelet的配置檔案(/var/lib/kubelet/config.yaml),而非kubelet本身。
- plan: 檢測當前叢集是否可升級,並支援升級到哪些版本。
其中node子命令又支援如下子命令和選項:
$ kubeadm upgrade node -h
Upgrade commands for a node in the cluster. Currently only supports upgrading the configuration, not the kubelet itself.
Usage:
kubeadm upgrade node [flags]
kubeadm upgrade node [command]
Available Commands:
config Downloads the kubelet configuration from the cluster ConfigMap kubelet-config-1.X, where X is the minor version of the kubelet.
experimental-control-plane Upgrades the control plane instance deployed on this node. IMPORTANT. This command should be executed after executing `kubeadm upgrade apply` on another control plane instance
Flags:
-h, --help help for node
Global Flags:
--log-file string If non-empty, use this log file
--rootfs string [EXPERIMENTAL] The path to the 'real' host root filesystem.
--skip-headers If true, avoid header prefixes in the log messages
-v, --v Level number for the log level verbosity
命令解析:
- config: 從叢集configmap中下載kubelet的配置檔案kubelet-config-1.x,其中x是kubelet的次要版本。
- experimental-control-plane: 升級部署在此節點的控制平面各元件, 通常在第一個控制平面例項上執行"kubeadm upgrade apply"後,應執行此命令。
開始升級
想直接升級到1.18 炸了
kubectl get nodes
kubectl version
升級CNI外掛。
這一步是可選的,查詢CNI外掛是否可以升級。
yum list --showduplicates kubeadm --disableexcludes=kubernetes
# 升級kubeadm版本
yum install kubeadm-1.18.13-0 kubelet-1.18.13-0 kubectl-1.18.13-0
# 安裝完成之後 確認一下各個元件的版本 確保是你想要的
kubelet --version
kubectl version
kubeadm version
# 升級檢查和方案
kubeadm upgrade plan
老老實實一個個版本升級
1.14.2 >1.15.2
1.15.2 > 1.16.2
1.16.2 > 1.17.2
1.17.2 > 1.18.2
# 刪除剛剛裝的1.18
yum remove -y kubectl-1.18.13
yum -y remove kubelet-1.18.13-0.x86_64
yum install kubeadm-1.15.2-0 kubelet-1.15.2-0 kubectl-1.15.2-0 -y
kubeadm upgrade plan
檢視 kubeadm 的配置
kubeadm config view > /tmp/kubeadm-config.yaml
升級1.15.2
kubeadm upgrade apply v1.15.2
這樣子升級好kubectl版本就一致了
繼續升級
報錯了 ERROR CoreDNSUnsupportedPlugins]: there are unsupported plugins in the CoreDNS Corefile
網上說是因為coredns裡的host模組的問題 需要註釋掉
# edit configmap 並註釋
kubectl edit cm coredns -n kube-system
繼續嘗試升級 依舊報錯
there are NotReady control-planes in the cluster: [op-k8s-m001]
此時檢視node狀態會發現master 是notready
檢視報錯
journalctl -u kubelet | tail -n 300
臨時解決的辦法是給 /etc/cni/net.d/10-flannel.conflist 新增cniVersion欄位
重啟Node後將需要重做,終極辦法是在Master上更新Flannel(新的版本帶有cniVersion欄位)或者修改Flannel的ConfigMap kubectl edit cm kube-flannel-cfg -n kube-system
,因為這個配置是Node加入時讀取的。
繼續升級
報錯There are kubelets in this cluster that are too old that have these versions [v1.14.2]
升級node的kubelet
yum install kubelet-1.15.2-0 -y
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
繼續升級
master成功升級到1.16.2
升級node到1.16.2
yum install kubelet-1.16.2-0 -y
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
升級master到1.17.2
yum install kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0 -y
kubeadm upgrade plan
kubeadm upgrade apply v1.17.2
升級node到1.17.2
yum install kubelet-1.17.2-0 -y
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
升級到1.18.2
master
yum install kubeadm-1.18.2-0 kubelet-1.18.2-0 kubectl-1.18.2-0 -y
kubeadm upgrade plan
kubeadm upgrade apply v1.18.2
升級node到1.18.2
yum install kubelet-1.18.2-0 -y
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
升級完成
相關文章
- 升級kubeadm 叢集(只有master單節點)AST
- Kubernetes 叢集升級指南:從理論到實踐
- 使用kubeadm安裝kubernetes
- 升級 kubeadm 部署的 k8s 叢集K8S
- Kubernetes:Pod 升級、回滾
- 使用 kubeadm 安裝 Kubernetes 1.16
- 附003.Kubeadm部署Kubernetes
- kubernetes 1.14 升級安裝指南
- kubeadm工具安裝kubernetes1.12.3
- 拆除kubeadm部署的Kubernetes 叢集
- oracle 10 rac 升級 10.2.0.1升級到10.2.0.5Oracle
- Kubernetes 實戰——升級應用(Deployment)
- ccproject升級到1135Project
- kubeadm + containerd 部署 k8s-v1.23.3(含證書升級)AIK8S
- mongodb單機從3.2升級到4.0.4升級MongoDB
- Ubuntu上kubeadm安裝Kubernetes叢集Ubuntu
- 使用kubeadm部署Kubernetes 1.26及其它版本
- kubeadm部署Kubernetes1.13.3高可用版本
- CentOS 7.6 使用kubeadm安裝Kubernetes 13CentOS
- 使用Kubeadm搭建高可用Kubernetes叢集
- 【Kubernetes學習筆記】-kubeadm 手動搭建kubernetes 叢集筆記
- 揭秘:如何為 Kubernetes 實現原地升級
- Kubernetes 叢集無損升級實踐
- 入門Kubernetes - 滾動升級/回滾
- Cocospod 升級到指定版本
- MySQL 5.7 升級到 8.0MySql
- 附025.kubeadm部署Kubernetes更新證書
- kubeadm部署高可用版Kubernetes1.21[更新]
- 使用 kubeadm 建立 kubernetes 叢集 v1.21
- ABP Framework 手動升級指南:從6.0.1升級到7.0.0Framework
- 淺入Kubernetes(12):Deployment 的升級、回滾
- PHP版本升級:從php7.1升級到php7.2PHP
- 靜默升級oracle 11g (從11.2.0.1升級到11.2.0.4)Oracle
- MongoDB升級--從3.4到3.6MongoDB
- 升級 ubuntu,從 18.04 到 22.04Ubuntu
- oracle rac 11.2.0.3 升級到11.2.0.4Oracle
- Mac 升級 PHP 到 7.4 版本MacPHP
- MySQL 5.6.47升級到5.7.20(一)MySql