Kubernetes集群升级与证书更新 学习笔记
前言
本笔记整合两大核心K8s运维实操内容:集群版本升级 、集群证书更新。所有步骤均为实操落地流程,适配生产环境运维,核心场景为 kubeadm 部署的Kubernetes集群,同时补充非kubeadm集群适配方案,可直接用于实操参考与技术复盘。
一、Kubernetes集群版本升级(v1.28.15 → v1.29.15)
1.1 升级核心原则
集群升级遵循先Master控制节点、后Node工作节点的顺序,采用滚动升级模式,最大限度保障集群服务不中断。不同K8s版本升级规则存在差异,本文为1.28→1.29专属实操流程,不可通用所有版本。
1.2 升级前置辅助命令
升级全程可通过以下命令查看集群状态、排查问题,为必备运维指令:
-
查看指定节点运行的Pod:
kubectl get pod -o wide |grep <nodename> -
查看集群kubeadm配置文件:
kubectl -n kube-system get cm kubeadm-config -o yaml -
查看集群所有节点状态及版本:
kubectl get node
1.3 Master控制节点升级步骤
步骤1:更新源并升级kubeadm组件
基于阿里云K8s镜像源更新,保证版本匹配v1.29:
bash
# 更新系统包管理器
yum update
# 配置v1.29版本阿里云K8s源
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
# 查看可升级的kubeadm版本
yum list | grep kubeadm
# 执行kubeadm升级
yum update -y kubeadm
# 验证升级后版本
kubeadm version
步骤2:校验升级计划(关键前置检查)
升级前必须校验集群兼容性、可升级版本、需手动升级的组件,避免升级失败:
bash
# 检查集群可升级版本、组件差异、手动升级项
kubeadm upgrade plan
# 查看静态Pod资源清单升级差异
kubeadm upgrade diff 1.29.15
核心校验要点:关注输出中 MANUAL UPGRADE REQUIRED 字段,若为yes则需手动升级对应组件,no则可直接自动升级。本次1.28→1.29无需手动升级组件。
步骤3:执行控制平面版本升级
bash
# 升级Master控制平面至v1.29.15
kubeadm upgrade apply v1.29.15
该命令自动完成etcd、kube-apiserver、kube-controller-manager、kube-scheduler等核心控制组件的镜像更新、证书续签、配置文件替换,升级成功会提示 SUCCESS! Your cluster was upgraded to "v1.29.15"。
步骤4:排空节点、升级kubelet/kubectl
bash
# 排空Master节点,驱逐普通Pod,保留守护进程Pod
kubectl drain <nodename> --ignore-daemonsets
# 升级kubelet、kubectl组件
yum update -y kubelet
# 重载配置、重启kubelet服务
systemctl daemon-reload
systemctl restart kubelet
# 解除节点调度保护,恢复节点工作
kubectl uncordon <nodename>
1.4 Node工作节点升级步骤
所有操作需在Master节点远程执行,逐节点滚动升级:
bash
# 1. 更新node节点kubelet配置
kubeadm upgrade node
# 2. 排空待升级工作节点
kubectl drain <nodename> --ignore-daemonsets
# 3. 升级节点kubelet组件
yum update -y kubelet
# 4. 重启服务生效
systemctl daemon-reload
systemctl restart kubelet
# 5. 恢复节点调度能力
kubectl uncordon <nodename>
1.5 集群升级完整流程总结
-
升级前准备:备份集群配置、数据卷、证书等核心数据,测试环境预演升级流程;
-
控制平面升级:更新kubeadm→校验升级计划→执行控制平面升级;
-
Master节点收尾:排空节点→升级kubelet→重启服务→解除调度保护;
-
Node节点批量升级:逐节点执行配置更新、排空、组件升级、重启、恢复调度;
-
升级后校验:检查节点状态、Pod运行状态、业务应用可用性,排查日志异常;
-
故障回滚:升级失败可通过旧版本二进制文件、备份配置回滚集群。
二、Kubernetes集群证书更新
K8s集群证书默认有效期1年,证书过期会导致集群节点失联、API调用失败、Pod调度异常,需定期更新。分为**kubeadm自动更新(推荐)和手动更新(非kubeadm集群)**两种方案。
2.1 kubeadm自动更新证书(主流方案)
适用于kubeadm部署的集群,一键更新所有控制平面证书,简单高效、不易出错。
步骤1:检查证书过期时间
bash
kubeadm certs check-expiration
查看所有组件证书的过期时间、剩余有效期,确认需要更新的证书。
步骤2:批量更新所有证书
bash
sudo kubeadm certs renew all
自动更新kube-apiserver、etcd、controller-manager、scheduler等所有控制平面证书。
步骤3:验证更新结果
bash
kubeadm certs check-expiration
确认所有证书有效期已刷新为1年。
步骤4:重启组件加载新证书
静态Pod模式集群,重启kubelet即可加载新证书:
bash
systemctl daemon-reload
systemctl restart kubelet
2.2 手动更新证书(非kubeadm部署集群)
适用于二进制手动部署的K8s集群,通过openssl工具手动生成、替换证书。
步骤1:查看证书过期时间
bash
sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "Not After"
步骤2:手动生成新证书
bash
# 生成私钥
openssl genrsa -out apiserver.key 2048
# 生成证书请求文件
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kube-apiserver"
# 基于CA签发有效期1年的新证书
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365
其他组件(etcd、controller-manager等)证书生成方式一致。
步骤3:替换证书并重启服务
将新证书、私钥替换至 /etc/kubernetes/pki/ 目录,重启核心组件:
bash
sudo systemctl restart kube-apiserver kube-controller-manager kube-scheduler
步骤4:校验集群状态
bash
kubectl get nodes
kubectl get pods --all-namespaces
2.3 工作节点证书更新
工作节点需更新kubelet、kube-proxy证书,保证节点正常接入集群:
-
参考控制平面证书生成方式,为各工作节点生成新证书;
-
替换节点
/var/lib/kubelet/pki/目录下的旧证书文件; -
重启kubelet服务生效:
systemctl restart kubelet。
2.4 证书更新通用核心注意事项
-
提前备份 :更新证书前务必备份原有证书目录,用于故障回滚:
tar -czvf /root/kubernetes-pki-backup.tar.gz /etc/kubernetes/pki -
时间同步:所有集群节点必须时间同步,时间偏差会导致证书验证失败、节点异常;
-
全程校验:更新完成后必须检查节点、Pod、业务服务状态,确认集群无异常。
三、整体运维总结
-
集群升级:核心为「先控后工、滚动升级」,升级前校验兼容性、升级后全量巡检,不同版本升级规则不通用,需适配对应版本文档;
-
证书更新:kubeadm集群优先使用自动更新,高效稳定;手动集群需规范生成证书、逐一替换,重点做好备份;
-
通用准则:所有高危运维操作(升级、更证)必须提前备份,测试环境验证后再上生产,操作后全面校验集群与业务状态。