升级
1.23.6 升级到 1.24.17
运行时升级
从 Kubernetes 1.24 开始,dockershim 被彻底移除了,所以 kubelet/kubeadm 不再支持通过 dockershim.sock 拉取镜像。你的环境现在还在用 Docker (dockershim),所以 kubeadm 升级时会失败。
- 安装 containerd
bash
apt-get install -y containerd.io- 初始化配置:
bash
containerd config default | tee /etc/containerd/config.toml- 编辑
/etc/containerd/config.toml,找到:
toml
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"- 然后设置默认 runtime 为 systemd cgroup:
toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true- 设置 crictl 的配置文件
shell
cat >/etc/crictl.yaml<<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF- 重启:
bash
systemctl restart containerd
systemctl enable containerd- 修改 kubelet 配置,指向 containerd
编辑 /var/lib/kubelet/kubeadm-flags.env,把 --container-runtime-endpoint 改成:
yaml
--container-runtime-endpoint=unix:///run/containerd/containerd.sock- 注意子节点需要额外增加
yaml
--container-runtime=remote- 重启 kubelet:
bash
systemctl daemon-reexec
systemctl restart kubelet- 确认 kubelet 已使用 containerd:
bash
crictl info- 再执行升级:
bash
kubeadm upgrade apply v1.24.17Step 1.3 执行升级
bash
kubeadm upgrade apply v1.24.17
kubeadm upgrade apply v1.24.17 --ignore-preflight-errors=all执行成功后,control-plane 组件(apiserver、controller、scheduler、coredns 等)会自动升级。
Step 1.4 升级 kubelet / kubectl
bash
apt-mark unhold kubelet kubectl
apt-get install -y kubelet=1.24.17-00 kubectl=1.24.17-00
apt-mark hold kubelet kubectl
systemctl daemon-reexec
systemctl restart kubelet确认:
bash
kubectl get nodes0. 前置准备
确认当前版本:
bashkubeadm version kubectl version --short kubelet --version检查集群健康:
bashkubectl get nodes -o wide kubectl get pods -n kube-system -o wide所有节点必须是
Ready,系统 Pod(apiserver、scheduler、etcd、coredns 等)都要Running。 ❗如果 master 是NotReady,先修复(一般是 kubelet/apiserver 没起来)。备份 etcd(推荐):
bashETCDCTL_API=3 etcdctl \ --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 \ snapshot save /root/etcd-snapshot.db
1. 升级 Master 节点
Step 1.1 更新 kubeadm
bash
apt-mark unhold kubeadm
apt-get update
apt-get install -y kubeadm=1.24.17-00
apt-mark hold kubeadm确认版本:
bash
kubeadm versionStep 1.2 计划升级
bash
kubeadm upgrade plan确认会显示 v1.24.17 为可升级目标。
2. 升级 Worker 节点
逐个节点操作,不要一次性全搞,避免集群不可用。
Step 2.1 将节点排空
在 master 上执行:
bash
kubectl drain <worker-node-name> --ignore-daemonsets --delete-emptydir-dataStep 2.2 SSH 到 worker 节点,升级 kubeadm
bash
apt-mark unhold kubeadm
apt-get update
apt-get install -y kubeadm=1.24.17-00
apt-mark hold kubeadm执行节点升级:
bash
kubeadm upgrade nodeStep 2.3 升级 kubelet / kubectl
bash
apt-mark unhold kubelet kubectl
apt-get install -y kubelet=1.24.17-00 kubectl=1.24.17-00
apt-mark hold kubelet kubectl
systemctl daemon-reexec
systemctl restart kubeletStep 2.4 解除节点隔离
在 master 上执行:
bash
kubectl uncordon <worker-node-name>确认 worker 已恢复 Ready。
3. 验证
检查节点状态:
bashkubectl get nodes所有节点应该显示
v1.24.17、状态Ready。检查系统 Pod:
bashkubectl get pods -n kube-system -o wide检查集群版本:
bashkubectl version --short