centos

如何升级centos k8s版本

小樊
39
2025-10-15 13:51:20
栏目: 智能运维

如何在CentOS上升级Kubernetes(K8s)版本
升级Kubernetes集群需遵循“准备充分、渐进执行、验证到位”的原则,以下是基于kubeadm工具的标准流程及关键注意事项:

一、升级前准备:规避风险的核心步骤

  1. 备份关键数据
    备份集群配置(/etc/kubernetes/目录)和etcd数据(etcd是K8s的核心存储组件),确保升级失败时可快速恢复。etcd备份命令示例:

    etcdctl snapshot save /data/etcd/etcd_bak.db \
      --endpoints=https://127.0.0.1:2379 \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/server.crt \
      --key=/etc/kubernetes/pki/etcd/server.key
    
  2. 检查集群健康状态
    确保集群无未解决问题:

    • 控制平面组件状态:kubectl get pods -n kube-system -l component=kube-apiserver(需全部为Running);
    • 节点状态:kubectl get nodes(所有节点需为Ready);
    • Pod运行状态:kubectl get pods --all-namespaces --field-selector status.phase!=Running(无CrashLoopBackOffError状态的Pod)。
  3. 确认升级路径
    Kubernetes不支持跨多个次要版本跳跃升级(如从1.22直接升级到1.25),必须遵循“相邻次要版本递进”规则(如1.22→1.23→1.24→1.25)。可通过kubectl version查看当前版本,在官方升级文档中确认目标版本的兼容性。

  4. 检查组件兼容性
    确保周边组件与目标K8s版本匹配:

    • 容器运行时:Docker 1.24+已弃用,需切换为containerd(K8s 1.25对应containerd 1.6+);
    • 网络插件:Calico 3.24支持K8s 1.25,Flannel 0.20.0及以上支持K8s 1.25;
    • 工具链:kubectl版本需与集群版本相差不超过1个次要版本(如集群1.24,kubectl需为1.23-1.25)。
  5. 配置Kubernetes Repo仓库
    在所有节点上配置官方Kubernetes repo,确保能下载新版本软件包:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
    

二、核心升级步骤:以kubeadm部署的集群为例

1. 升级Master节点(控制平面)

(1)升级kubeadm工具
在Master节点上,使用yum安装新版本kubeadm(以升级到1.25为例):

sudo yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes

(2)检查升级计划
运行kubeadm upgrade plan,确认集群可升级的目标版本及需要修改的配置:

kubeadm upgrade plan
# 输出示例:建议升级到v1.25.0,当前版本v1.24.3

(3)执行控制平面升级
使用kubeadm upgrade apply升级控制平面组件(kube-apiserverkube-controller-managerkube-scheduler):

sudo kubeadm upgrade apply v1.25.0

升级完成后,系统会提示“升级成功”,控制平面组件会自动重启。

(4)升级kubelet和kubectl
在Master节点上升级kubeletkubectl

sudo yum install -y kubelet-1.25.0-00 kubectl-1.25.0-00 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet

(5)解除Master节点保护
升级后,将Master节点标记为可调度(允许Pod调度到Master):

kubectl uncordon <master-node-name>

2. 升级Worker节点(工作节点)

(1)逐个升级工作节点
为避免集群中断,每次仅升级1个Worker节点,重复以下步骤:

(2)升级节点组件
在Master节点上,使用kubeadm upgrade node升级工作节点的组件:

sudo kubeadm upgrade node

(3)解除节点保护
升级完成后,将工作节点标记为可调度:

kubectl uncordon <worker-node-name>

(4)验证节点状态
等待节点状态变为Readykubectl get nodes),确认Pod恢复正常运行(kubectl get pods --all-namespaces)。

三、升级后验证:确保集群稳定性

  1. 检查集群状态

    kubectl get nodes  # 所有节点应为Ready状态
    kubectl get pods -A  # 所有Pod应为Running状态
    
  2. 检查组件日志
    查看K8s组件日志,确认无错误信息:

    sudo journalctl -u kubelet -f
    sudo journalctl -u kube-apiserver -f
    
  3. 测试业务功能
    访问集群内的业务Pod(如curl http://<pod-ip>:<port>),确认业务正常运行。

四、注意事项:避免升级失败的“坑”

通过以上步骤,可确保CentOS上的Kubernetes集群平稳升级到目标版本,同时保障业务连续性。升级前务必在测试环境验证流程,降低生产环境风险。

0
看了该问题的人还看了