前言:
生產環境的k8s為了追求穩定,不能直接安裝最新版本,隨着新版本功能的穩定,很多新功能是老版本不具備的,這時進行一次穩妥的升級便是一個不錯的選擇。
以升級k8s集群v1.13.3到v1.14.0為例
升級次序:先升級master,后升級node
升級之前的准備:確保已經備份了etcd數據庫與master節點的狀態
升級master
安裝kubernetes的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
EOF
yum makecache
yum list --showduplicates kubeadm --disableexcludes=kubernetes
# find the latest 1.14 version in the list
# it should look like 1.14.x-0, where x is the latest patch
安裝v1.14.0的kubeadm與kubelet安裝包
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0
驗證下載的包是否為期望的版本
sudo kubeadm version
期望輸出
kubeadm version: &version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:51:21Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
驗證集群是否可升級
sudo kubeadm upgrade plan
期望輸出
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[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 -oyaml'
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.13.3
[upgrade/versions] kubeadm version: v1.14.0
Awesome, you're up-to-date! Enjoy!
執行升級
sudo kubeadm upgrade apply v1.14.0
交互界面輸入y,確認升級
期望輸出
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.14.0". Enjoy!
升級kubectl
yum install -y kubectl-1.14.0-0
重啟kubelet
sudo systemctl daemon-reload && sudo systemctl restart kubelet
查看升級結果
NAME STATUS ROLES AGE VERSION
k8s-agent Ready <none> 66m v1.13.3
k8s-cp Ready master 69m v1.14.0
升級node
安裝kubernetes的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
EOF
yum makecache
安裝v1.14.0的kubeadm與kubelet安裝包
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0
修改kubelet配置
sudo kubeadm upgrade node config --kubelet-version v1.14.0
升級kubectl
yum install -y kubectl-1.14.0-0
重啟kubelet
sudo systemctl daemon-reload && sudo systemctl restart kubelet
查看升級結果
NAME STATUS ROLES AGE VERSION
k8s-agent Ready <none> 70m v1.14.0
k8s-cp Ready master 73m v1.14.0
參考
補充第一點:如果k8s使用的是動態調度,那么在升級node節點之前,應該將其標記為不可用,從集群中剔出:
通過將節點標記為不可調度並刪除工作負載,為維護節點做好准備。運行:
kubectl drain $NODE --ignore-daemonsets
你應該看到類似這樣的輸出:
node/ip-172-31-85-18 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-dj7d7, kube-system/weave-net-z65qx
node/ip-172-31-85-18 drained
補充第二點:本博客最多可升級至1.15版本,1.15-->1.16版本需要加參數如下
kubeadm upgrade apply v1.16.10 --ignore-preflight-errors=CoreDNSUnsupportedPlugins
補充第三點:離線更新時,不但要下載kubeadm,kubectl,kubelet的安裝包,還要在線環境下升級成功所下載的docker鏡像,並將其離線上傳,才能離線升級成功
在離線安裝kubeadm,kubectl,kubelet時,可以用yumdownloader下載,yum install *來安裝