温馨提示×

如何更新 Ubuntu Kubernetes 版本

小樊
46
2025-10-08 03:44:43
栏目: 智能运维

如何在Ubuntu上更新Kubernetes版本(基于kubeadm部署)

更新Kubernetes集群是保障集群安全性、稳定性及获取新功能的关键操作。以下是基于Ubuntu系统和kubeadm工具的详细升级流程,覆盖从准备到验证的全流程:

一、升级前准备

1. 备份关键数据

升级前必须备份etcd(集群状态存储)和配置文件,防止数据丢失:

  • 备份etcd数据(需替换为实际etcd端点、证书路径及备份目录):
    ETCDCTL_API=3 etcdctl snapshot save /path/to/backup/snapshot.db \
      --endpoints https://<etcd-endpoint>:2379 \
      --cert /etc/kubernetes/pki/etcd/server.crt \
      --key /etc/kubernetes/pki/etcd/server.key \
      --cacert /etc/kubernetes/pki/etcd/ca.crt
    
  • 备份配置文件
    sudo cp -r /etc/kubernetes /etc/kubernetes.backup
    

2. 检查版本兼容性

  • 查看当前集群版本:
    kubectl version --short
    
  • 确认目标版本与当前版本的兼容性(如1.28.x→1.29.x),参考Kubernetes官方版本升级路径(通常不允许跨大版本升级,如1.y→1.y+2)。

3. 更新软件包列表

sudo apt-get update

4. 升级kubeadm工具

kubeadm是升级集群的核心工具,需先升级到目标版本(以v1.29.2为例):

sudo apt-get install -y kubeadm=1.29.2-00
sudo apt-mark hold kubeadm  # 锁定kubeadm版本,防止自动升级

5. 检查升级计划

运行kubeadm upgrade plan查看可升级的版本及需要更新的组件:

sudo kubeadm upgrade plan

输出会显示当前版本、可升级的目标版本及升级前的检查项(如etcd版本兼容性)。

二、升级控制平面节点(Master节点)

1. 执行升级命令

根据kubeadm upgrade plan的输出,执行升级到目标版本的命令(以v1.29.2为例):

sudo kubeadm upgrade apply v1.29.2 --etcd-upgrade=false
  • --etcd-upgrade=false:若etcd为外部部署,建议单独升级(更安全);若为内置etcd,可设置为true(需提前备份)。

2. 排空Master节点

升级前将Master节点标记为不可调度,避免新Pod调度到该节点:

kubectl drain <master-node-name> --ignore-daemonsets --force
  • --ignore-daemonsets:忽略DaemonSet管理的Pod(如kube-proxy);
  • --force:强制排空,即使Pod有local-storage等限制。

3. 重启kubelet服务

升级完成后重启kubelet以应用新版本:

sudo systemctl daemon-reload
sudo systemctl restart kubelet

4. 取消Master节点保护

升级完成后,允许新Pod调度到Master节点:

kubectl uncordon <master-node-name>

三、升级工作节点(Worker节点)

1. 逐个升级工作节点

为避免集群不可用,需逐个升级工作节点(以worker1为例):

  • 排空节点
    kubectl drain worker1 --ignore-daemonsets --force
    
  • 升级kubeadm(与Master节点版本一致):
    sudo apt-get install -y kubeadm=1.29.2-00
    
  • 升级kubelet和kubectl
    sudo apt-get install -y kubelet=1.29.2-00 kubectl=1.29.2-00
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    

2. 验证节点升级

在Master节点上检查节点状态,确保节点转为Ready

kubectl get nodes

节点状态变为Ready后,继续升级下一个工作节点。

3. 取消节点保护

节点升级完成后,取消排空状态:

kubectl uncordon worker1

四、升级后验证

  1. 检查集群状态
    kubectl get nodes  # 所有节点应为Ready状态
    kubectl get pods --all-namespaces  # 所有Pod应为Running状态
    
  2. 验证新功能:根据目标版本的新特性(如API变更、性能优化),测试集群功能是否正常。
  3. 清理旧镜像:删除旧版本的Kubernetes镜像,释放磁盘空间:
    docker system prune -a --filter "until=24h"
    

注意事项

  • 版本升级路径:必须遵循Kubernetes的版本斜率策略(如1.28→1.29→1.30),禁止跨大版本升级。
  • 网络插件兼容性:升级前确认网络插件(如Calico、Flannel)与新版本Kubernetes兼容,避免网络故障。
  • 回滚方案:若升级失败,可通过kubeadm upgrade revert回滚到上一个版本,并恢复etcd备份数据。
  • 测试环境验证:生产环境升级前,务必在测试环境中验证升级流程,确保无兼容性问题。

0