K8s高可用集群架构设计

Kubernetes高可用集群架构设计:从青铜到王者全解

生产环境中的K8S高可用架构,不是简单的多节点堆砌,而是一套精密运转的分布式系统! 本文将用最通俗的语言,拆解高可用集群的每个关键环节,附带生产环境血泪经验总结,让你少走三年弯路!


一、控制平面高可用:三大核心组件的生存之道

1. kube-apiserver:集群的咽喉要道

  • 多活部署:至少3个实例,通过负载均衡对外暴露
  • 真实生产案例
    # 使用kubeadm部署多master节点
    kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" --upload-certs
    
  • 避坑指南
    • 云厂商负载均衡器必须开启健康检查(推荐TCP:6443)
    • 自建方案推荐Keepalived + HAProxy组合

2. etcd:集群的大脑

  • 黄金法则:3/5/7奇数节点,跨AZ部署
  • 生产级配置
    # etcd启动参数关键配置
    --listen-peer-urls=https://${IP}:2380
    --listen-client-urls=https://${IP}:2379
    --initial-cluster=etcd-0=https://10.0.0.1:2380,etcd-1=https://10.0.0.2:2380,etcd-2=https://10.0.0.3:2380
    
  • 血泪教训
    • 必须定期备份(不备份等于作死!)
    • 磁盘必须SSD,网络延迟<10ms

3. 调度双雄(Scheduler+Controller Manager)

  • Leader选举机制
    # 查看当前Leader
    kubectl get endpoints -n kube-system kube-scheduler -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
    
  • 生产配置
    # 启动参数必须开启选举
    --leader-elect=true
    --leader-elect-lease-duration=15s
    

二、工作节点高可用:让业务永不掉线

1. 节点设计原则

  • 多可用区部署:至少跨2个AZ
  • 自动修复机制
    # GKE节点自动修复示例
    gcloud container node-pools create pool-1 \
      --cluster my-cluster \
      --enable-autorepair \
      --autoscaling=min=3,max=10
    

2. Pod调度黑科技

  • 反亲和性强制分散
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values: [my-app]
          topologyKey: "kubernetes.io/hostname"
    
  • PDB保护策略
    apiVersion: policy/v1
    kind: PodDisruptionBudget
    metadata:
      name: zk-pdb
    spec:
      minAvailable: 2
      selector:
        matchLabels:
          app: zookeeper
    

三、存储高可用:数据零丢失的终极防线

1. 存储选型矩阵

场景 推荐方案 优势
云原生有状态应用 Rook + Ceph 全自动运维,K8S原生集成
高性能数据库 云厂商块存储 低延迟, SLA保障
跨AZ共享存储 AWS EFS / GCP Filestore 多节点共享,自动扩展

2. 数据保护必杀技

  • Velero灾难恢复
    # 定时备份整个集群
    velero schedule create daily-backup \
      --schedule="@every 24h" \
      --include-namespaces=prod
    
  • 卷快照自动化
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: disk-snapshot-class
    driver: pd.csi.storage.gke.io
    deletionPolicy: Retain
    

四、监控与自愈:让集群拥有不死之身

1. 监控黄金组合

  • Prometheus关键指标
    - alert: APIHighLatency
      expr: histogram_quantile(0.99, rate(apiserver_request_duration_seconds_bucket[5m])) > 1
      for: 10m
    
  • Grafana大盘配置
    K8S监控大盘示例

2. 自动化运维三板斧

  • 节点自动扩缩
    # Cluster Autoscaler启动参数
    --scale-down-unneeded-time=10m
    --max-node-provision-time=15m
    
  • Pod自动重启
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20
    

五、生产环境高可用架构图

[负载均衡器]
    |
    v
[Master节点组]       [Worker节点组]
  ├─ API Server x3       ├─ Node x10 (跨AZ)
  ├─ etcd x3             ├─ Pod反亲和调度
  └─ Controller Manager  └─ PDB保护
    & Scheduler

[分布式存储]          [监控告警]
  ├─ Ceph集群          ├─ Prometheus
  └─ 云存储快照         └─ 自动修复机器人

六、血泪经验总结

  1. 证书管理:多master节点的证书必须统一管理,推荐使用cert-manager自动续期
  2. 版本灰度:先升级一个master节点,观察24小时再继续
  3. 混沌测试:定期用chaos-mesh模拟节点宕机
  4. 容量规划:控制平面节点需要4C8G以上配置

记住:高可用不是100%不故障,而是快速故障恢复! 按照这个架构设计,你的K8S集群将具备真正的生产级可靠性,轻松应对千万级流量冲击!

posted on 2025-03-20 13:09  Leo-Yide  阅读(153)  评论(0)    收藏  举报