blog/kubernetes/upgrade/readme.md

1.9 KiB
Raw Blame History

Kubernetes集群升级

只能从一个次版本升级到下一个次版本,或者在次版本相同时升级补丁版本。 也就是说,升级时不可以跳过次版本。 例如,你只能从 1.y 升级到 1.y+1而不能从 1.y 升级到 1.y+2。

升级control plane

必须先升级第一个controlplane

升级kubeadm

export VERSION="1.20.1"
yum install -y kubeadm-${VERSION}-0 --disableexcludes=kubernetes

腾空controlplane

export NODE="k8smaster1"
kubectl drain ${NODE} --ignore-daemonsets

查看是否可以升级以及可升级的版本

kubeadm upgrade plan

升级到指定版本

kubeadm upgrade apply v${VERSION}

取消控制面节点的保护

kubectl uncordon ${NODE}

升级其他controlplane, 参考升级node

升级node

升级之前请确保control plane已经升级建议一次只升级1个或部分节点避免影响服务。

升级kubeadm在node执行

export VERSION="1.20.1-0"
yum install -y kubeadm-${VERSION} --disableexcludes=kubernetes

将节点标记为不可调度并逐出工作负载为维护做好准备。在control执行

export NODE="k8snode1"
kubectl drain ${NODE} --ignore-daemonsets

输出类似下文

node/k8snode1 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-jcpf2, kube-system/kube-proxy-rsskt
evicting pod kube-system/calico-kube-controllers-744cfdf676-g86dz
pod/calico-kube-controllers-744cfdf676-g86dz evicted
node/k8snode1 evicted

升级kubelet配置在node执行

kubeadm upgrade node

升级kubelet服务在node执行

yum install -y kubelet-${VERSION} kubectl-${VERSION} --disableexcludes=kubernetes

重启服务

systemctl daemon-reload
systemctl restart kubelet

将节点标记为可调度,让节点重新上线

kubectl uncordon ${NODE}