温馨提示×

如何升级Ubuntu上的Kubernetes版本

小樊
37
2025-10-25 02:35:39
栏目: 智能运维

如何在Ubuntu上升级Kubernetes版本(基于kubeadm部署)

升级Kubernetes版本需遵循**“备份→检查兼容性→升级控制平面→升级工作节点→验证”**的流程,以下是详细步骤及注意事项:

一、升级前准备

1. 备份集群数据

升级前必须备份etcd数据(集群核心状态存储)和配置文件(避免数据丢失):

# 备份etcd数据(需替换为实际etcd端点、证书路径)
ETCDCTL_API=3 etcdctl snapshot save /opt/etcd_backup/snapshot.db \
  --endpoints=https://127.0.0.1:2379 \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt

# 备份/etc/kubernetes目录(包含kube-apiserver、kube-controller-manager等配置)
sudo cp -r /etc/kubernetes /opt/kubernetes_backup/

2. 检查版本兼容性

  • 确认当前Kubernetes版本:kubectl version --short(重点关注Server Version)。
  • 查阅Kubernetes官方升级路径(如1.27→1.28→1.29),禁止跨多个次版本升级(例如不能从1.27直接跳到1.29)。
  • 检查第三方组件(如Calico、Flannel)是否支持目标版本,避免兼容性问题。

3. 更新系统及软件包

sudo apt update && sudo apt upgrade -y

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

控制平面节点升级需逐个进行(优先升级主节点),步骤如下:

1. 升级kubeadm工具

kubeadm是升级的核心工具,需先升级到目标版本:

# 查找可用的kubeadm版本(以1.28为例)
apt-cache madison kubeadm | grep 1.28

# 安装指定版本的kubeadm(替换为实际版本号,如1.28.3-00)
sudo apt-mark unhold kubeadm && \
sudo apt-get install -y kubeadm=1.28.3-00 && \
sudo apt-mark hold kubeadm

# 验证kubeadm版本
kubeadm version

2. 检查升级计划

运行kubeadm upgrade plan检查集群是否可升级,并获取目标版本:

sudo kubeadm upgrade plan

输出会显示可升级的目标版本(如v1.28.3)及需要升级的组件(如kube-apiserver、kube-controller-manager)。

3. 执行升级

根据kubeadm upgrade plan的输出,执行升级命令(替换为目标版本):

sudo kubeadm upgrade apply v1.28.3
  • 命令会自动续约etcd证书(无需手动操作)。
  • 升级完成后,会提示“SUCCESS!”,表示控制平面升级成功。

4. 升级kubelet和kubectl

# 升级kubelet和kubectl(替换为与kubeadm一致的版本号)
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get install -y kubelet=1.28.3-00 kubectl=1.28.3-00 && \
sudo apt-mark hold kubelet kubectl

# 重启kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet

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

工作节点升级需逐个进行(避免同时升级多个节点导致集群资源不足),步骤如下:

1. 腾空节点(Drain)

将节点标记为不可调度,并驱逐所有Pod(确保业务无损):

# 替换为实际节点名称(如work1)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

2. 升级kubeadm、kubelet和kubectl

# 升级kubeadm(可选,若需统一版本)
sudo apt-mark unhold kubeadm && \
sudo apt-get install -y kubeadm=1.28.3-00 && \
sudo apt-mark hold kubeadm

# 升级kubelet和kubectl
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get install -y kubelet=1.28.3-00 kubectl=1.28.3-00 && \
sudo apt-mark hold kubelet kubectl

# 重启kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet

3. 取消腾空(Uncordon)

升级完成后,将节点标记为可调度:

kubectl uncordon <node-name>

4. 验证节点状态

kubectl get nodes -o wide

确认节点状态为Ready,且VERSION列显示为目标版本。

四、升级后验证

  1. 检查集群状态

    kubectl get nodes  # 所有节点应为Ready状态
    kubectl get pods -A  # 所有Pod应为Running状态
    
  2. 测试业务功能: 部署一个简单应用(如Nginx),验证集群是否能正常调度和管理Pod:

    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get svc nginx
    

    访问NodePort对应的IP,确认Nginx能正常访问。

五、注意事项

  • 禁止跨版本升级:必须按版本顺序升级(如1.27→1.28→1.29),避免版本不兼容。
  • 内核版本要求:确保Ubuntu内核版本≥4.18(可通过uname -r查看),否则可能无法运行新版本Kubernetes。
  • 网络插件升级:部分网络插件(如Calico)需单独升级,参考插件官方文档操作。
  • 监控与回滚:升级后密切监控集群状态(如kubectl top nodeskubectl logs),若出现问题,可通过kubeadm upgrade revert回滚到上一版本。

通过以上步骤,即可完成Ubuntu上Kubernetes版本的升级。建议在测试环境验证流程后再应用于生产环境,确保业务稳定性。

0