升级CentOS上的Kubernetes(K8s)部署版本需要按照一定的步骤进行,以确保系统的稳定性和可靠性。以下是详细的升级步骤和注意事项:
升级前的准备工作
-
备份数据:
- 备份集群配置和数据,例如
/etc/kubernetes/
目录和/var/lib/etcd/
目录。 - 使用
etcdctl
工具备份 etcd 数据库的数据。
- 备份集群配置和数据,例如
-
检查集群状态:
- 确保集群中所有节点的状态正常,所有 Pod 都在运行状态。
- 检查集群中是否有未完成的作业或任务,避免升级过程中出现意外。
升级控制平面节点(Master 节点)
-
下载新版本的 kubeadm:
- 下载新版本的 kubeadm 二进制文件,并替换旧版本文件。例如,下载 1.29.10 版本:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm chmod +x kubeadm sudo mv kubeadm /usr/local/bin/
- 下载新版本的 kubeadm 二进制文件,并替换旧版本文件。例如,下载 1.29.10 版本:
-
验证 kubeadm 版本:
- 执行
kubeadm version
命令,确认版本已升级到目标版本。
- 执行
-
检查升级计划:
- 执行
kubeadm upgrade plan
命令,检查集群是否可以升级,并获取目标版本信息。
- 执行
-
执行控制平面升级:
- 执行
kubeadm upgrade apply v1.29.10
命令,开始升级控制平面组件。该命令会自动下载并安装新版本的控制平面组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler 等。
- 执行
-
腾空 Master 节点:
- 将 Master 节点标记为不可调度,并驱逐所有负载:
kubectl drain k8s-master --ignore-daemonsets
- 将 Master 节点标记为不可调度,并驱逐所有负载:
-
升级 kubelet 和 kubectl:
- 下载新版本的 kubelet 和 kubectl 二进制文件,并替换旧版本文件:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl chmod +x kubelet kubectl sudo mv kubelet /usr/local/bin/ sudo mv kubectl /usr/local/bin/
- 下载新版本的 kubelet 和 kubectl 二进制文件,并替换旧版本文件:
-
重启 kubelet 服务:
- 执行以下命令重启 kubelet 服务:
sudo systemctl daemon-reload sudo systemctl restart kubelet
- 执行以下命令重启 kubelet 服务:
-
解除节点保护:
- 将 Master 节点标记为可调度:
kubectl uncordon k8s-master
- 将 Master 节点标记为可调度:
升级工作节点
-
逐个升级工作节点:
- 每次只升级一个工作节点,以确保集群在升级过程中仍能正常运行。
-
升级 kubeadm:
- 在工作节点上,下载并安装新版本的 kubeadm 二进制文件:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm chmod +x kubeadm sudo mv kubeadm /usr/local/bin/
- 在工作节点上,下载并安装新版本的 kubeadm 二进制文件:
-
腾空工作节点:
- 将工作节点标记为不可调度,并驱逐所有负载:
kubectl drain k8s-node1 --ignore-daemonsets
- 将工作节点标记为不可调度,并驱逐所有负载:
-
升级 kubelet 和 kubectl:
- 下载并安装新版本的 kubelet 和 kubectl 二进制文件:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl chmod +x kubelet kubectl sudo mv kubelet /usr/local/bin/ sudo mv kubectl /usr/local/bin/
- 下载并安装新版本的 kubelet 和 kubectl 二进制文件:
-
重启 kubelet 服务:
- 执行以下命令重启 kubelet 服务:
sudo systemctl daemon-reload sudo systemctl restart kubelet
- 执行以下命令重启 kubelet 服务:
-
解除节点保护:
- 将工作节点标记为可调度:
kubectl uncordon k8s-node1
- 将工作节点标记为可调度:
注意事项
-
版本兼容性:
- Kubernetes 版本升级时不可以跳过次版本,只能按版本顺序升级。例如,只能从 1.y 升级到 1.y+1,而不能从 1.y 升级到 1.y+2。
-
避免跨版本升级:
- Kubernetes 版本向下兼容性非常差,不建议跨版本升级。建议分多个集群逐步升级。
-
数据备份:
- 在生产环境中升级之前,务必做好数据备份,以便在出现问题时能够迅速恢复。
通过以上步骤和注意事项,您可以确保 CentOS 上的 Kubernetes 集群能够顺利升级到新的版本,同时最大限度地减少对系统正常运行的影响。