温馨提示×

centos k8s更新与维护技巧

小樊
40
2025-11-22 04:19:22
栏目: 智能运维

适用于 CentOS 的 Kubernetes 更新与维护技巧

一 升级策略与顺序

  • 使用 kubeadm 管理的集群,升级顺序为:控制平面 → 工作节点 → kubectl 客户端 → 清单与 API 适配。升级前先查看版本信息:kubectl version,确认 ClientServer 差异与升级路径。控制平面为多 Master 时,前置 HAProxy/Keepalived 等负载均衡,升级期间将待升级的 API Server 从后端摘除,避免流量转发。升级通常要求按 次版本逐步 执行,避免跨多个小版本跳跃。升级完成后,按需将存量资源清单从旧 API 迁移到新 API(如 apps/v1 等)。

二 控制平面升级步骤

  • 准备与检查
    • 备份关键数据与配置:/etc/kubernetes//var/lib/etcd/;使用 etcdctl 进行 etcd 快照;确认集群健康(kubectl get nodeskubectl get pods -A)。
  • 升级 kubeadm 并制定计划
    • 下载目标版本的 kubeadm,执行 kubeadm upgrade plan 查看可升级版本与变更;按提示执行 kubeadm upgrade apply <target-version> 完成控制面组件升级。
  • 腾空与重启 kubelet
    • 对控制面节点执行:kubectl drain <master-node> --ignore-daemonsets;随后升级 kubelet/kubectl 二进制并重启:systemctl daemon-reload && systemctl restart kubelet;完成后 kubectl uncordon <master-node> 恢复调度。
  • HA 场景要点
    • 通过 HAProxy 健康检查自动摘除/恢复后端 API Server,逐台滚动升级控制面,确保 API 可用性。

三 工作节点升级步骤

  • 逐台处理、业务不断流
    • 对目标节点执行:kubectl drain <node> --ignore-daemonsets 驱逐业务 Pod;升级 kubelet/kubectl 并重启 systemctl daemon-reload && systemctl restart kubelet;完成后 kubectl uncordon <node> 恢复调度。
  • 单节点与单副本限制
    • 若集群仅有 1 个节点 或某应用仅有 1 个 Pod,驱逐后可能 Pending 导致短时中断,需在维护窗口或增加副本后再升级。
  • 升级后验证
    • 在升级完所有节点后,执行 kubectl get nodeskubectl get pods -A 检查 Ready 状态与事件,确认 kubelet 与容器运行时工作正常。

四 日常维护与稳定性保障

  • 系统与网络
    • 保持 CentOS 与内核、容器运行时的安全更新;统一 NTP 时间;按需配置 firewalld/iptables 放行 6443、10250、10251 等关键端口;生产环境不建议长期关闭 SELinux,应采用策略放行。
  • 可观测性
    • 部署 Prometheus + Grafana 监控节点/Pod 的 CPU、内存、网络、存储 等关键指标;使用 ELK/Fluentd/Loki 收集与分析日志,建立告警规则与值班机制。
  • 安全与合规
    • 启用 RBAC 最小权限;通过 NetworkPolicy 实现命名空间/应用间隔离;镜像来自可信源并定期漏洞扫描;对外通信启用 TLS/mTLS
  • 资源与弹性
    • Pod/容器 设置合理的 requests/limitsQoS;按命名空间实施 ResourceQuota;结合 HPA/VPACluster Autoscaler 实现弹性伸缩。
  • 备份与恢复
    • 定期快照 etcd 与关键 Kubernetes 资源清单;验证恢复流程与 RPO/RTO;将备份与恢复演练纳入变更管理。

五 故障排查与回滚要点

  • 快速定位
    • 查看节点与系统日志:kubectl get nodeskubectl get pods -A -o wide;对异常 Pod 使用 kubectl describe pod <name>kubectl logs <name>;系统组件日志通过 journalctl -u kubelet -u kube-apiserver 等检索。
  • 回滚与重试
    • 控制面升级异常可使用 kubeadm upgrade plan 确认可回退版本并执行回滚;应用侧采用 Deployment 的滚动更新策略与 revisionHistoryLimit,必要时 kubectl rollout undo 快速回退;若升级导致 API 不兼容,使用 kubectl convert 将清单迁移至新 API 版本并重新应用。

0