centos

centos k8s更新流程是怎样的

小樊
48
2025-09-24 13:36:32
栏目: 智能运维

CentOS环境下Kubernetes集群更新流程

一、升级前准备

  1. 备份关键数据
    备份etcd数据库(集群状态核心存储)、/etc/kubernetes/目录(配置文件)及/etc/etcd/目录(etcd数据),确保升级失败时可快速恢复。常用命令:

    ETCDCTL_API=3 etcdctl --endpoints=https://<etcd-ip>:2379 --cacert=/etc/etcd/ca.crt --cert=/etc/etcd/server.crt --key=/etc/etcd/server.key snapshot save /var/lib/etcd/backup/snapshot.db
    cp -r /etc/kubernetes/ /etc/kubernetes.backup/
    cp -r /etc/etcd/ /etc/etcd.backup/
    
  2. 检查集群状态
    确保所有节点处于Ready状态,无未完成的Pod调度或异常事件:

    kubectl get nodes
    kubectl get pods --all-namespaces
    
  3. 确认版本兼容性
    Kubernetes仅支持逐次小版本升级(如v1.23→v1.24→v1.25),禁止跨大版本跳跃。通过官方文档确认目标版本与当前版本的兼容性,避免因版本跳过导致组件冲突。

  4. 配置Kubernetes Repo仓库
    在所有节点上更新Kubernetes官方YUM仓库,确保能下载最新版本组件。以CentOS 7为例:

    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    

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

  1. 升级kubeadm工具
    在Master节点上,使用YUM安装目标版本的kubeadm(集群升级核心工具):

    sudo yum update -y kubeadm --disableexcludes=kubernetes
    
  2. 查看升级计划
    执行kubeadm upgrade plan命令,检查集群可升级的目标版本及需要更新的组件(如kube-apiserver、kube-controller-manager等),确认升级可行性:

    sudo kubeadm upgrade plan
    
  3. 执行控制平面升级
    使用kubeadm upgrade apply命令升级Master节点的控制平面组件,自动替换旧版本二进制文件并重启服务:

    sudo kubeadm upgrade apply v<target-version>
    
  4. 升级Master节点的kubelet和kubectl
    升级Master节点上的kubelet(节点代理)和kubectl(命令行工具)至目标版本,并重启kubelet服务:

    sudo yum update -y kubelet kubectl --disableexcludes=kubernetes
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  5. 解除Master节点保护
    升级完成后,将Master节点标记为可调度,允许新Pod调度至该节点:

    kubectl uncordon <master-node-name>
    

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

  1. 逐个升级工作节点
    为避免集群不可用,每次仅升级一个工作节点,待其恢复后再升级下一个节点。

  2. 标记节点为不可调度并驱逐Pod
    使用cordon命令将节点标记为不可调度,再通过drain命令驱逐节点上的所有Pod(--ignore-daemonsets忽略DaemonSet管理的Pod,--delete-emptydir-data清理临时数据):

    kubectl cordon <worker-node-name>
    kubectl drain <worker-node-name> --ignore-daemonsets --delete-emptydir-data
    
  3. 升级工作节点的kubeadm、kubelet和kubectl
    在工作节点上执行与Master节点相同的步骤,升级kubeadm、kubelet和kubectl至目标版本,并重启kubelet服务:

    sudo yum update -y kubeadm kubelet kubectl --disableexcludes=kubernetes
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  4. 执行节点升级
    使用kubeadm upgrade node命令升级工作节点的组件,同步至集群最新版本:

    sudo kubeadm upgrade node
    
  5. 恢复节点调度
    升级完成后,将工作节点标记为可调度,等待节点状态变为Ready

    kubectl uncordon <worker-node-name>
    

四、升级后验证

  1. 检查集群状态
    确认所有节点状态为Ready,无异常事件:

    kubectl get nodes
    
  2. 检查Pod运行状态
    查看kube-system命名空间下的核心组件(如kube-apiserver、kube-controller-manager、kube-scheduler)及业务Pod是否正常运行:

    kubectl get pods --all-namespaces
    
  3. 验证功能正常性
    部署一个测试Pod(如nginx),检查是否能正常调度、启动及访问,确保升级未影响业务功能:

    kubectl run test-pod --image=nginx --restart=Never
    kubectl get pod test-pod
    kubectl port-forward test-pod 8080:80
    

五、注意事项

0
看了该问题的人还看了