如何在Debian上更新K8s
在 Debian 上使用 kubeadm 升级 Kubernetes 的实操指南
一 升级前准备
- 备份关键数据与配置:建议备份 /etc/kubernetes/ 与 /var/lib/etcd/;如使用 etcd,可用 etcdctl 快照,例如:
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。 - 检查集群健康:确保节点 Ready、etcd 可用、核心工作负载稳定,尽量在业务低峰期执行。
- 版本路径与兼容性:kubeadm 升级通常要求逐个大版本进行(如 1.28 → 1.29),不支持跨多个大版本;升级前阅读目标版本的变更说明与弃用清单。
- 系统与环境:保持 Debian 与安全补丁为最新;禁用 Swap;确保容器运行时(如 containerd/Docker)版本与新版本 K8s 兼容;准备好 kubectl 以便验证。
- 高可用提示:若为 HA 控制面,确保 APIServer 前端(如 HAProxy/Keepalived)健康检查与摘除策略正常。
二 升级路线与版本选择
- 升级顺序:先升级 控制平面节点(一次一台),再升级 工作节点;每台节点升级前先 排空(drain),升级 kubelet 后 解除封锁(uncordon)。
- 选择目标版本:先确定要停留的小版本线(如 1.28),再在该线内升级到最新补丁。Debian 上可用:
apt update & & apt-cache madison kubeadm
查看可用版本,例如 1.28.x-*(x 为最新补丁)。 - 升级节奏:同一时间只升级一个控制面节点;所有控制面节点完成后再逐台升级工作节点,避免一次性大面积中断。
三 控制平面节点升级步骤
-
升级 kubeadm(每台控制面节点)
apt-mark unhold kubeadm
apt-get update & & apt-get install -y kubeadm=‘1.28.x-*’
apt-mark hold kubeadm
kubeadm version -
检查升级计划并应用
kubeadm upgrade plan
kubeadm upgrade apply v1.28.x
注:该过程会更新 kube-apiserver、kube-controller-manager、kube-scheduler 等控制面组件及 kube-proxy 配置。 -
排空节点并升级 kubelet/kubectl
kubectl drain < 控制面节点名> --ignore-daemonsets
apt-mark unhold kubelet kubectl
apt-get update & & apt-get install -y kubelet=‘1.28.x-’ kubectl='1.28.x-’
apt-mark hold kubelet kubectl
systemctl daemon-reload & & systemctl restart kubelet -
解除封锁
kubectl uncordon < 控制面节点名>
提示:若为 HA,升级期间可通过负载均衡摘除该节点,恢复后再加回。
四 工作节点升级步骤
-
升级 kubeadm
apt-mark unhold kubeadm
apt-get update & & apt-get install -y kubeadm=‘1.28.x-*’
apt-mark hold kubeadm -
排空节点
kubectl drain < 工作节点名> --ignore-daemonsets -
升级 kubelet/kubectl 并重启
apt-mark unhold kubelet kubectl
apt-get update & & apt-get install -y kubelet=‘1.28.x-’ kubectl='1.28.x-’
apt-mark hold kubelet kubectl
systemctl daemon-reload & & systemctl restart kubelet -
解除封锁
kubectl uncordon < 工作节点名>
重复以上步骤逐台升级工作节点。
五 升级后验证与常见问题
-
版本与节点状态
kubectl version --client
kubectl get nodes
kubectl get pods -A
确认控制面与工作节点均处于 Ready,核心系统组件(如 CoreDNS、kube-proxy)运行正常。 -
组件与清单适配
升级后按需升级 CNI/CSI/Ingress/Dashboard/监控 等附加组件,确保与新版本 Kubernetes API 兼容。
如存在 API 版本变更,使用 kubectl convert 将现有清单迁移至新版本,例如:
kubectl convert -f pod.yaml --output-version v1
再应用更新后的清单。 -
常见问题与处理
- 单节点集群无法排空:升级期间业务会短暂中断,建议在具备多节点的生产环境执行滚动升级。
- 升级后容器重启:kubelet 升级会触发容器重建,属正常现象。
- 升级失败回滚:若 kubeadm upgrade apply 失败,可回退到上一补丁版本(如 1.28.(x-1)),修复问题后再重试;必要时基于备份恢复 etcd。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Debian上更新K8s
本文地址: https://pptw.com/jishu/758191.html
