K8s 集群管理实战
Kubernetes 集群管理实战指南:从零构建生产级管控体系
真实生产警示:某电商平台曾因控制平面单点故障导致黑五促销宕机!本文将揭秘高可用集群管理核心方案。
一、集群核心架构解析——"大脑"与"肢体"的协作
1.1 控制平面(大脑)
graph TD
A[API Server] --> B[etcd]
A --> C[Scheduler]
A --> D[Controller Manager]
B -->|状态存储| A
C -->|调度决策| A
D -->|状态协调| A
- 关键组件:
- API Server:集群的"总控台",所有操作必经之路
- etcd:集群的"记忆中枢",采用 Raft 算法保证一致性
- Scheduler:资源调度专家,决策 Pod 落脚点
- Controller Manager:自动化运维机器人,确保状态一致
1.2 工作节点(肢体)
# 典型节点进程列表
kubelet # 节点管家,管理 Pod 生命周期
kube-proxy # 网络魔术师,处理服务发现和负载均衡
containerd # 容器引擎,实际运行容器
calico-node # 网络插件,构建 Pod 间通信
二、生产级集群管理五大核心能力
2.1 智能调度引擎
# 高级调度策略示例
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: gpu-type
operator: In
values: ["a100"]
tolerations:
- key: "disk-pressure"
operator: "Exists"
effect: "NoSchedule"
- 调度策略:
- 硬策略:必须满足的条件(如 GPU 类型)
- 软策略:优先但不强制的条件(如区域分布)
- 污点容忍:允许 Pod 在特定节点运行
2.2 弹性扩缩容体系
# 自动扩缩容配置
kubectl autoscale deployment web-server \
--cpu-percent=50 \
--min=3 \
--max=10
- 扩缩维度:
- 水平扩缩(HPA):增减 Pod 副本
- 垂直扩缩(VPA):调整单个 Pod 资源
- 集群扩缩(CA):动态增减节点
2.3 自愈能力矩阵
| 故障类型 | 自愈机制 | 恢复时间目标 |
|---|---|---|
| Pod 崩溃 | kubelet 自动重启 | <1分钟 |
| 节点离线 | 控制器重新调度 Pod | <5分钟 |
| 网络分区 | 领导者选举机制触发 | <30秒 |
| 存储故障 | PV 自动迁移到健康存储 | 依赖存储系统 |
2.4 服务治理体系
# 金丝雀发布配置示例
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: frontend
spec:
progressDeadlineSeconds: 60
analysis:
interval: 1m
threshold: 5
metrics:
- name: error-rate
thresholdRange:
max: 1
interval: 1m
2.5 统一网络平面
| 网络方案 | 特点 | 适用场景 |
|---|---|---|
| Calico | BGP 路由,策略丰富 | 跨机房部署 |
| Flannel | 简单易用,VxLAN 封装 | 中小型集群 |
| Cilium | eBPF 驱动,高性能 | 万级节点集群 |
三、生产环境管理工具链
3.1 标准运维工具
# 常用命令组合
kubectl get pods -o wide --sort-by=.metadata.creationTimestamp # 查看最新Pod
kubectl top pod --containers # 显示容器资源消耗
kubectl debug node/<node-name> -it --image=busybox # 节点故障排查
3.2 可视化管控平台
- 开源方案:
- Lens:功能全面的桌面客户端
- KubeSphere:企业级可视化平台
- Octant:轻量级 Web 界面
- 商业方案:
- Rancher:多集群管理专家
- OpenShift:红帽全栈解决方案
3.3 基础设施即代码
# Terraform 创建 EKS 集群示例
resource "aws_eks_cluster" "prod" {
name = "prod-cluster"
role_arn = aws_iam_role.eks.arn
vpc_config {
subnet_ids = [aws_subnet.public[*].id]
}
}
四、生产环境黄金实践
4.1 高可用架构设计
# 使用 kubeadm 部署 HA 集群
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" \
--upload-certs \
--apiserver-cert-extra-sans=10.0.0.1,10.0.0.2,10.0.0.3
4.2 监控告警体系
| 监控层级 | 工具组合 | 关键指标 |
|---|---|---|
| 基础设施 | Node Exporter + Prometheus | CPU 使用率 >80% |
| 集群组件 | kube-state-metrics | etcd 写入延迟 >200ms |
| 应用业务 | Grafana + Prometheus | 应用错误率 >1% |
4.3 安全加固方案
# Pod 安全策略示例
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
volumes:
- 'configMap'
- 'emptyDir'
五、灾难恢复演练清单
-
定期备份 etcd:
etcdctl snapshot save backup.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 -
模拟节点故障:
kubectl cordon <node-name> # 标记节点不可调度 kubectl drain <node-name> --ignore-daemonsets # 排空节点 -
集群升级演练:
kubectl upgrade apply -f k8s-1.25.yaml --dry-run=server
生产环境铁律:
- 控制平面必须3节点起步
- 每周执行全链路健康检查
- 严格区分生产与测试集群
- 关键操作需双人复核
下期预告:《百万级集群性能调优:从参数优化到内核级改造实战》
浙公网安备 33010602011771号