目錄
一、理論
1.K8S集群升級
2.集群概況
3.升級集群
4.驗證集群
二、實驗
?1.升級集群
2.驗證集群
三、問題
1.給node1節(jié)點打污點報錯
一、理論
1.K8S集群升級
(1)概念
搭建K8S集群的方式有很多種,比如二進(jìn)制,kubeadm,RKE(Rancher)等,K8S集群升級方式也各有千秋,目前準(zhǔn)備使用kubeadm方式搭建的k8s集群升級方法。
需要注意的是,升級集群版本建議逐步升級,比如 v1.20.1–>v1.21.1–>v1.22.1–>v1.23.1–>v1.24.1,不能跨度過大,否則會報錯。
2.集群概況
表1 集群概況
節(jié)點名稱 | IP | 版本 | 目標(biāo)版本 |
---|---|---|---|
master1 | 192.168.204.180 | v1.20.6 | v1.20.15 |
master2 | 192.168.204.181 | v1.20.6 | v1.20.15 |
node1 | 192.168.204.182? | v1.20.6 | v1.20.15 |
3.升級集群
(1)確定升級版本
可以看到目前的版本是v1.20.6。
kubectl get nodes # 查看集群版本
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 94d v1.20.6
master2 Ready control-plane,master 94d v1.20.6
node1 Ready worker 94d v1.20.6
# 執(zhí)行如下命令確定升級版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
……
kubeadm.x86_64 1.20.6-0
kubeadm.x86_64 1.20.7-0
kubeadm.x86_64 1.20.8-0
kubeadm.x86_64 1.20.9-0
kubeadm.x86_64 1.20.10-0
kubeadm.x86_64 1.20.11-0
kubeadm.x86_64 1.20.12-0
kubeadm.x86_64 1.20.13-0
kubeadm.x86_64 1.20.14-0
kubeadm.x86_64 1.20.15-0
……
我的目標(biāo)版本是1.20.15-0。
(2)升級Master
①所有 master 節(jié)點操作
# 升級kubeadm
yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes # --disableexcludes=kubernetes:禁掉除了這個kubernetes之外的別的倉庫
# 升級完成后驗證版本
kubeadm version
②?升級 master1 節(jié)點
# 驗證升級計劃。檢查當(dāng)前集群是否可被升級
kubeadm upgrade plan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.20.6
[upgrade/versions] kubeadm version: v1.20.6
W1012 13:13:14.679497 7949 version.go:102] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable.txt": Get "https://cdn.dl.k8s.io/rele context deadline exceeded (Client.Timeout exceeded while awaiting headers)
W1012 13:13:14.679539 7949 version.go:103] falling back to the local client version: v1.20.6
[upgrade/versions] Latest stable version: v1.20.6
[upgrade/versions] Latest stable version: v1.20.6
[upgrade/versions] Latest version in the v1.20 series: v1.20.15
[upgrade/versions] Latest version in the v1.20 series: v1.20.15
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
kubelet 3 x v1.20.6 v1.20.15
Upgrade to the latest version in the v1.20 series:
COMPONENT CURRENT AVAILABLE
kube-apiserver v1.20.6 v1.20.15
kube-controller-manager v1.20.6 v1.20.15
kube-scheduler v1.20.6 v1.20.15
kube-proxy v1.20.6 v1.20.15
CoreDNS 1.7.0 1.7.0
etcd 3.4.13-0 3.4.13-0
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.20.15
Note: Before you can perform this upgrade, you have to update kubeadm to v1.20.15.
_____________________________________________________________________
The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.
API GROUP CURRENT VERSION PREFERRED VERSION MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io v1alpha1 v1alpha1 no
kubelet.config.k8s.io v1beta1 v1beta1 no
_____________________________________________________________________
最高可以升級到 v1.20.15 版本,正好與我們的目標(biāo)版本一致;只要可允許升級的最高版本高于你的目標(biāo)版本,就可以升級。
注意:kubeadm upgrade命令也會自動對kubeadm在節(jié)點上所管理的證書執(zhí)行續(xù)約操作。如果需要略過證書續(xù)約操作,可以使用
標(biāo)志--certificate-renewal=false。
確定集群升級目標(biāo)版本,并且查看升級計劃符合條件后,就可以在 master1 節(jié)點上執(zhí)行升級集群的命令了
# 將 master1 升級到目標(biāo)版本
kubeadm upgrade apply v1.20.15
③?升級 master2節(jié)點
master2節(jié)點操作
升級master2節(jié)點與 master1 節(jié)點相同,但是使用下面的命令,而不是kubeadm upgrade apply
命令。
kubeadm upgrade node
④升級kubectl和kubelet
兩臺 master 節(jié)點操作,操作順序:master1——>master2
分別在兩臺master節(jié)點上執(zhí)行如下操作,注意更改<節(jié)點名稱>。
# 1.將當(dāng)前節(jié)點標(biāo)記為不可調(diào)度,并驅(qū)逐節(jié)點上的Pod
kubectl drain <節(jié)點名稱> --ignore-daemonsets
##說明:
## --ignore-daemonsets 無視DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,這是
#因為deamonset會忽略unschedulable標(biāo)簽(使用kubectl drain時會自動給節(jié)點打上不可調(diào)度標(biāo)簽),
#由于deamonset控制器控制的pod被刪除后可能馬上又在此節(jié)點上啟動起來,這樣就會成為死循環(huán)。因此
#這里忽略daemonset。
# 2.升級kubelet和kubectl組件
yum install -y kubelet-1.20.15-0 kubectl-1.20.15-0 --disableexcludes=kubernetes
## 說明: --disableexcludes=kubernetes:禁掉除了這個kubernetes之外的別的倉庫
# 3.重啟kubelet
systemctl daemon-reload
systemctl restart kubelet
# 4.恢復(fù)當(dāng)前節(jié)點上的Pod調(diào)度,使其上線
kubectl uncordon <節(jié)點名稱>
此時查看節(jié)點版本,發(fā)現(xiàn)兩臺master節(jié)點已經(jīng)升級完畢。
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 95d v1.20.15
master2 Ready control-plane,master 94d v1.20.15
node1 Ready worker 94d v1.20.15
接下來升級worker節(jié)點。
(3)?升級 Worker
工作節(jié)點上的升級過程應(yīng)該一次執(zhí)行一個節(jié)點,或者一次執(zhí)行幾個節(jié)點,以不影響運(yùn)行工作負(fù)載所需的最小容量。
由于我的集群中只有一個worker節(jié)點,所以這里只在一臺機(jī)器上操作;如果你的集群中有多個worker節(jié)點,每個節(jié)點都需要操作。
# 升級kubeadm
yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes
# 查看版本
kubeadm version
# 升級 node 節(jié)點
kubeadm upgrade node
# 設(shè)置節(jié)點不可調(diào)度并排空節(jié)點。只有1個worker節(jié)點時忽略此步,因為可能會報錯
kubectl drain node1 --ignore-daemonsets
# 升級kubelet和kubectl組件
yum install -y kubelet-1.20.15-0 kubectl-1.20.15-0 --disableexcludes=kubernetes
# 重啟kubelet
systemctl daemon-reload
systemctl restart kubelet
# 恢復(fù)當(dāng)前節(jié)點上的Pod調(diào)度。只有1個worker節(jié)點時忽略此步
kubectl uncordon node1 # node1 為worker節(jié)點名稱
4.驗證集群
(1)驗證集群狀態(tài)是否正常
kubectl get nodes
# 結(jié)果如下:
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 95d v1.20.15
master2 Ready control-plane,master 94d v1.20.15
node1 Ready worker 94d v1.20.15
版本均已升級到 v1.20.15。
(2) 驗證集群證書是否正常
kubeadm alpha certs check-expiration
## 結(jié)果如下:
[root@master1 ~]# kubeadm alpha certs check-expiration
Command "check-expiration" is deprecated, please use the same command under "kubeadm certs"
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 11, 2024 05:29 UTC 364d ca no
apiserver Oct 11, 2024 05:28 UTC 364d ca no
apiserver-etcd-client Oct 11, 2024 05:28 UTC 364d etcd-ca no
apiserver-kubelet-client Oct 11, 2024 05:28 UTC 364d ca no
controller-manager.conf Oct 11, 2024 05:29 UTC 364d ca no
etcd-healthcheck-client Oct 11, 2024 05:28 UTC 364d etcd-ca no
etcd-peer Oct 11, 2024 05:28 UTC 364d etcd-ca no
etcd-server Oct 11, 2024 05:28 UTC 364d etcd-ca no
front-proxy-client Oct 11, 2024 05:28 UTC 364d front-proxy-ca no
scheduler.conf Oct 11, 2024 05:29 UTC 364d ca no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Jul 06, 2033 05:45 UTC 9y no
etcd-ca Jul 06, 2033 05:45 UTC 9y no
front-proxy-ca Jul 06, 2033 05:45 UTC 9y no
[root@master1 ~]#
二、實驗
?1.升級集群
(1)確定升級版本
可以看到目前的版本是v1.20.6。
執(zhí)行如下命令確定升級版本
我的目標(biāo)版本是1.20.15-0。
(2)升級Master
①所有 master 節(jié)點操作
?升級kubeadm
?升級完成后驗證版本
②?升級 master1 節(jié)點
驗證升級計劃。檢查當(dāng)前集群是否可被升級
最高可以升級到 v1.20.15 版本,正好與我們的目標(biāo)版本一致;只要可允許升級的最高版本高于你的目標(biāo)版本,就可以升級。
注意:kubeadm upgrade命令也會自動對kubeadm在節(jié)點上所管理的證書執(zhí)行續(xù)約操作。如果需要略過證書續(xù)約操作,可以使用
標(biāo)志--certificate-renewal=false。
確定集群升級目標(biāo)版本,并且查看升級計劃符合條件后,就可以在 master1 節(jié)點上執(zhí)行升級集群的命令了
成功
③?升級 master2節(jié)點
master2節(jié)點操作
升級master2節(jié)點與 master1 節(jié)點相同,但是使用下面的命令kubeadm upgrade node
,而不是kubeadm upgrade apply
命令。
升級kubeadm
升級完成后驗證版本
升級master2節(jié)點
成功:
④升級kubectl和kubelet
兩臺 master 節(jié)點操作,操作順序:master1——>master2
分別在兩臺master節(jié)點上執(zhí)行如下操作,注意更改<節(jié)點名稱>。
1)master1節(jié)點
將當(dāng)前節(jié)點標(biāo)記為不可調(diào)度,并驅(qū)逐節(jié)點上的Pod
升級kubelet和kubectl組件
重啟kubelet
恢復(fù)當(dāng)前節(jié)點上的Pod調(diào)度,使其上線
查看節(jié)點版本,發(fā)現(xiàn)一臺master節(jié)點已經(jīng)升級完畢。
2)master2節(jié)點
將當(dāng)前節(jié)點標(biāo)記為不可調(diào)度,并驅(qū)逐節(jié)點上的Pod
升級kubelet和kubectl組件
重啟kubelet
恢復(fù)當(dāng)前節(jié)點上的Pod調(diào)度,使其上線
此時查看節(jié)點版本,發(fā)現(xiàn)兩臺master節(jié)點已經(jīng)升級完畢。
接下來升級worker節(jié)點。
(3)?升級 Worker
工作節(jié)點上的升級過程應(yīng)該一次執(zhí)行一個節(jié)點,或者一次執(zhí)行幾個節(jié)點,以不影響運(yùn)行工作負(fù)載所需的最小容量。
由于我的集群中只有一個worker節(jié)點,所以這里只在一臺機(jī)器上操作;如果你的集群中有多個worker節(jié)點,每個節(jié)點都需要操作。
升級kubeadm
查看版本
升級 node 節(jié)點
設(shè)置節(jié)點不可調(diào)度并排空節(jié)點。只有1個worker節(jié)點時忽略此步,因為可能會報錯
升級kubelet和kubectl組件
重啟kubelet
恢復(fù)當(dāng)前節(jié)點上的Pod調(diào)度。只有1個worker節(jié)點時忽略此步
2.驗證集群
(1)驗證集群狀態(tài)是否正常
版本均已升級到 v1.20.15。
(2) 驗證集群證書是否正常
三、問題
1.給node1節(jié)點打污點報錯
(1)報錯
(2)原因分析
有pod在節(jié)點存儲使用資源,需要驅(qū)逐
(3)解決方法
需要命令加上參數(shù) --delete-emptydir-data?
如果有mount local volumn的pod,會強(qiáng)制驅(qū)逐pod文章來源:http://www.zghlxwxcb.cn/news/detail-724583.html
[root@master1 ~]# kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
文章來源地址http://www.zghlxwxcb.cn/news/detail-724583.html
到了這里,關(guān)于云原生Kubernetes:K8S集群版本升級(v1.20.6 - v1.20.15)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!