前言
公司使用的k8s集群是“多環境融合”模式,集群流量入口也拋棄了常見的traefik和ingress-nginx,直接在國內使用一種不常見的基于Envoy的API網關服務。當然,還有很多其他集群流量門戶組件可以選擇,這里就不討論了。
因為這個組件更新迭代也很快,而且正式文檔不會很快顯示出文檔的舊版本,那么隨著版本更新,API版本自然也就發生了變化,API的新版本也就沒有了參考意義,所以需要對組件版本進行升級。升級組件版本的前提條件是docker版本至少需要20.10.11,containerd版本至少需要1.4.11。因此,這里我們首先就地升級這兩個組件。
k8s的node節點維護
盡可能確保在維護節點之前有另一個冗余節點,它可以支持當前維護節點上的所有pod?;蛘叽_保在您維護該節點已經驅逐了所有pod之后,其他節點可以攜帶您的節點上的所有pod。也很可惜,我這里的節點內存達到了95%以上,領導晚上也不給我機器升級。目前,集群中有超過5000個pod。在這一點上,我不得不咬緊牙關。這個想法是升級一個正常的,然后繼續下一個。
升級步驟
1.檢查containerd和docker的原始版本。
$containerd-v
containerdcontainerd . io 1 . 2 . 137 ad 184331 fa 3 e 55 e 52 b 890 ea 95 e 65 ba 581 AE 3429
$docker-v
文檔版本19.03.12,build48a66213fe
2.驅逐吊艙
$ kubectldraink 8s-node 02 . ayunw . cn-ignore-daemonsets-delete-local-data-force
$kubectlgetnode
NAMESTATUS
k8s-master01.ayunw.cnReady
k8s-node01.ayunw.cnReady
k8s-node 02 . ayunw . cn未就緒,調度已禁用
.
3.在節點上停止docker和kubelet
systemctlstopkubelet
systemctlstopdocker
systemctlstopdocker.socket
systemctlstopcontainerd
4.卸載舊版本的docker,安裝新版本的docker和containerd。
yum-yremovedocker\
docker-客戶端\
docker-客戶端-最新\
docker-common\
docker-最新\
docker-latest-logrotate\
docker-logrotate\
碼頭引擎
dnf-yinstallyum-utils device-mapper-persistent-data LVM 2
yum-config-manager\
- add-repo\
https://download.docker.com/linux/centos/docker-ce.repo
yummakecache
dnf-yinstallcontainerd . io-1 . 4 . 12-3.1 . el8 . x86 _ 64 . rpm
dnf-yinstalldocker-ce-20 . 10 . 11 docker-ce-CLI-20 . 10 . 11
systemctldaemon-重新加載
systemctlstartdocker
systemctlenabledocker
systemctlstatusdocker
systemctlstatuscontainerd
systemctlenablecontainerd . service
5.檢查docker和containerd版本。
$containerd-vdocker-v
containerdcontainerd . io 1 . 4 . 127 b 11 cfaabd 73 bb 80907 DD 23182 b 9347 b 4245 eb5d
文檔版本20.10.11,builddea9396
6.啟動kubelet并恢復節點。
systemctlstartkubelet
systemctlstatuskubelet
kubectluncordonk8s-node02.ayunw.cn
kubectlgetnode-owide
最后可以看到版本升級了。
本文轉載自《運維發展故事》。原文為https://tinyurl.com/2p86nhya.版權歸原作者所有。