K8s 平滑升级

前言

一、升级前准备

[1️⃣ 查看集群状态(Master 节点)](#1️⃣ 查看集群状态(Master 节点))

[2️⃣ 备份 etcd 数据(Master 节点)](#2️⃣ 备份 etcd 数据(Master 节点))

[3️⃣ 备份 kubeadm 配置(Master 节点)](#3️⃣ 备份 kubeadm 配置(Master 节点))

[4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点)](#4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点))

[5️⃣ 查看可用版本(Master + Node 节点)](#5️⃣ 查看可用版本(Master + Node 节点))

[二、升级 Master 节点](#二、升级 Master 节点)

[6️⃣ 安装 kubeadm v1.21(Master01)](#6️⃣ 安装 kubeadm v1.21(Master01))

[7️⃣ 查看升级计划(Master01)](#7️⃣ 查看升级计划(Master01))

[8️⃣ 升级控制平面到 v1.21(Master01)](#8️⃣ 升级控制平面到 v1.21(Master01))

[9️⃣ 升级 Master kubelet 和 kubectl(Master01)](#9️⃣ 升级 Master kubelet 和 kubectl(Master01))

[三、升级 Node 节点(逐个执行)](#三、升级 Node 节点(逐个执行))

[10️⃣ 在 Master01 标记 Node 为不可调度](#10️⃣ 在 Master01 标记 Node 为不可调度)

[11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl](#11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl)

[12️⃣ 在 Master01 恢复 Node 调度](#12️⃣ 在 Master01 恢复 Node 调度)

[13️⃣ 重复步骤 10-12 对所有 Node 升级](#13️⃣ 重复步骤 10-12 对所有 Node 升级)

四、升级验证(Master01)

五、升级注意事项

总结

前言

在企业生产环境中,Kubernetes 升级必须保证平滑进行,不能影响业务服务。本篇文章将详细介绍如何将集群从 v1.20 升级到 v1.21 ,并在每一步明确 操作节点,确保升级安全可控。


一、升级前准备

升级前,必须先做好充分的准备,包括集群状态检查、数据备份和软件仓库配置。

1️⃣ 查看集群状态(Master 节点)

Master01 节点执行:

复制代码
kubectl version --short
kubectl get nodes
kubectl get pods -A

确认 Master 与 Node 状态正常,Pod 正常运行。

2️⃣ 备份 etcd 数据(Master 节点)

复制代码
wget https://github.com/etcd-io/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.7-linux-amd64.tar.gz
sudo mv etcd-v3.5.7-linux-amd64/etcdctl /usr/local/bin/
​
ETCDCTL_API=3 etcdctl snapshot save /root/etcd-backup.db \
--endpoints=127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
--key=/etc/kubernetes/pki/etcd/peer.key

备份 etcd 可以在升级失败时快速恢复集群。

3️⃣ 备份 kubeadm 配置(Master 节点)

复制代码
cp /etc/kubernetes/admin.conf ~/admin.conf.backup

4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点)

在 Master01、Node01、Node02 节点执行:

复制代码
cat <<EOF > /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
repo_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
​
yum clean all
yum makecache

5️⃣ 查看可用版本(Master + Node 节点)

复制代码
yum list kubeadm --showduplicates | sort -r

本次升级选择 v1.21.14 作为目标版本。


二、升级 Master 节点

Master 节点是控制平面,升级必须小心操作。

6️⃣ 安装 kubeadm v1.21(Master01)

复制代码
yum install -y kubeadm-1.21.14-0

7️⃣ 查看升级计划(Master01)

复制代码
kubeadm upgrade plan

确认可升级版本和依赖组件。

8️⃣ 升级控制平面到 v1.21(Master01)

复制代码
kubeadm upgrade apply v1.21.14

9️⃣ 升级 Master kubelet 和 kubectl(Master01)

复制代码
yum install -y kubelet-1.21.14-0 kubectl-1.21.14-0
systemctl daemon-reload
systemctl restart kubelet

至此,Master 节点控制平面已经成功升级到 v1.21。


三、升级 Node 节点(逐个执行)

Node 节点升级需要确保 Pod 不丢失 ,因此要配合 Master 执行 cordon/drain

10️⃣ 在 Master01 标记 Node 为不可调度

复制代码
kubectl cordon <node-name>
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

⚠ 注意:--delete-local-data 已废弃,新版本使用 --delete-emptydir-data

11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl

复制代码
yum install -y kubeadm-1.21.14-0 kubelet-1.21.14-0 kubectl-1.21.14-0
systemctl daemon-reload
systemctl restart kubelet

12️⃣ 在 Master01 恢复 Node 调度

复制代码
kubectl uncordon <node-name>

13️⃣ 重复步骤 10-12 对所有 Node 升级

逐个节点升级,保证业务 Pod 在其他节点可用,避免服务中断。


四、升级验证(Master01)

升级完成后,验证集群和 Pod 状态:

复制代码
kubectl get nodes
kubectl get pods -A
kubectl version --short
  • 所有 Master/Node 节点显示 v1.21

  • Pod 正常运行,无异常状态


五、升级注意事项

  1. 逐个节点升级,保证服务不中断。

  2. CNI 插件:升级前确认兼容 v1.21。

  3. PodDisruptionBudget:升级 Node 时可能需要临时调整或删除。

  4. 备份:升级前务必备份 etcd 和 kubeadm 配置。

  5. 节点操作总结

    • Master 节点:执行 kubeadm 升级 + kubelet/kubectl 升级

    • Node 节点:执行软件升级和 kubelet 重启

    • **Master 执行 cordon/drain/uncordon 管理 Pod 调度

    • 跨多版本升级需要逐步升级,如1.20升级到1.22则需要1.20→1.21→1.22,以此类推


总结

通过以上步骤,你可以平滑地将 Kubernetes 集群从 v1.20 升级到 v1.21,保证服务持续可用,并为后续升级到更高版本打下基础。

相关推荐
AKAMAI3 小时前
数据孤岛破局之战 :跨业务分析的难题攻坚
运维·人工智能·云计算
东巴图4 小时前
JavaScript性能优化实战大纲性能优化的核心目标
运维·matlab
---学无止境---4 小时前
Linux中进程创建和缓存对象初始化fork_init、proc_caches_init和buffer_init
linux
站长朋友4 小时前
【邀请函】锐成信息 × Sectigo | CLM - SSL 证书自动化运维解决方案发布会
运维·自动化·ssl·clm·sectigo·47天ssl证书
qq_183802875 小时前
Linux内核idr数据结构使用
linux·运维·服务器
King's King5 小时前
自动化仓库规划设计方案
运维·自动化
码农-小林5 小时前
使用leaflet库加载服务器离线地图瓦片(这边以本地nginx服务器为例)
运维·服务器·nginx
噜啦噜啦嘞好5 小时前
Linux:库制作与原理
linux·运维·服务器
androidstarjack5 小时前
知乎服务器崩溃!
运维·服务器