在CentOS上更新Kubernetes(k8s)集群的流程大致如下:
升级前的准备工作
- 备份数据:
- 备份集群配置和数据,例如
/etc/kubernetes/
目录和/var/lib/etcd/
目录。 - 使用
etcdctl
工具备份 etcd 数据库的数据。
- 检查集群状态:
- 确保集群中所有节点的状态正常,所有 Pod 都在运行状态。
- 检查集群中是否有未完成的作业或任务,避免升级过程中出现意外。
- 配置 Kubernetes repo 仓库:
- 在所有节点上配置 Kubernetes repo 仓库,以便下载新版本的 Kubernetes 软件包。
升级控制平面节点(Master 节点)
- 下载新版本的
kubeadm
:
- 下载新版本的
kubeadm
二进制文件,并替换旧版本文件。 - 验证
kubeadm
版本,确认版本已升级到目标版本。
- 检查升级计划:
- 执行
kubeadm upgrade plan
命令,检查集群是否可以升级,并获取目标版本信息。
- 执行控制平面升级:
- 执行
kubeadm upgrade apply
命令,开始升级控制平面组件。该命令会自动下载并安装新版本的控制平面组件,包括kube-apiserver
、kube-controller-manager
、kube-scheduler
等。
- 腾空 Master 节点:
- 将 Master 节点标记为不可调度,并驱逐所有负载:
kubectl drain k8s-master --ignore-daemonsets
- 升级
kubelet
和kubectl
:
- 下载新版本的
kubelet
和kubectl
二进制文件,并替换旧版本文件。 - 重启
kubelet
服务。
- 解除节点保护:
- 将 Master 节点标记为可调度:
kubectl uncordon k8s-master
升级工作节点
- 逐个升级工作节点:
- 每次只升级一个工作节点,以确保集群在升级过程中仍能正常运行。
- 升级
kubelet
和kubectl
:
- 在工作节点上,下载并安装新版本的
kubeadm
二进制文件。 - 将工作节点标记为不可调度,并驱逐所有负载:
kubectl drain k8s-node1 --ignore-daemonsets
- 升级其他组件:
- 根据
kubeadm upgrade plan
的输出,手动升级其他需要升级的组件,如kube-apiserver
、kube-controller-manager
、kube-scheduler
、kube-proxy
等。
升级后验证
- 验证集群状态:
- 使用
kubectl get nodes
确认节点的版本和状态。 - 检查服务的运行状况和日志,确保没有错误发生。
- 恢复配置:
- 如有必要,恢复之前备份的配置文件。
注意事项
- 版本兼容性:Kubernetes 版本升级时不可以跳过次版本,只能按版本顺序升级。例如,只能从 1.y 升级到 1.y1,而不能从 1.y 升级到 1.y2。
- 避免跨版本升级:Kubernetes 版本向下兼容性非常差,不建议跨版本升级。建议分多个集群逐步升级。
- 数据备份:在生产环境中升级之前,务必做好数据备份,以便在出现问题时能够迅速恢复。
以上步骤和注意事项可以帮助您在 CentOS 上成功升级 Kubernetes 集群。如果在执行过程中遇到问题,建议参考 Kubernetes 官方文档或向社区寻求帮助。