Skip to content

K8S架构

概述

Kubernetes采用主从架构(Master-Worker),包含控制平面(Control Plane)和数据平面(Data Plane)。控制平面负责集群管理,数据平面负责运行容器化应用。

整体架构图

┌─────────────────────────────────────────────────────────┐
│                    Kubernetes Cluster                    │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌──────────────────┐    ┌──────────────────┐         │
│  │   Control Plane  │    │   Worker Nodes   │         │
│  │  (Master Node)   │    │   (Minions)      │         │
│  └──────────────────┘    └──────────────────┘         │
│                                                         │
└─────────────────────────────────────────────────────────┘

控制平面(Control Plane)

1. kube-apiserver

  • 功能:K8S集群的API入口
  • 作用:处理所有REST请求,验证和配置数据
  • 特点:水平可扩展,支持高可用部署

2. etcd

  • 功能:分布式键值存储
  • 作用:存储集群所有配置数据和状态
  • 特点:强一致性,高可用,支持备份恢复

3. kube-scheduler

  • 功能:调度器
  • 作用:为新创建的Pod选择运行节点
  • 调度策略
    • 资源需求(CPU、内存)
    • 亲和性/反亲和性规则
    • 节点标签匹配

4. kube-controller-manager

  • 功能:控制器管理器
  • 作用:运行各种控制器进程
  • 包含控制器
    • Node Controller
    • Replication Controller
    • Endpoints Controller
    • Service Account & Token Controllers

5. cloud-controller-manager

  • 功能:云控制器管理器
  • 作用:与云服务商API交互
  • 适用场景:在云环境中运行K8S

数据平面(Data Plane)

1. kubelet

  • 功能:节点代理
  • 作用
    • 管理Pod生命周期
    • 监控容器健康状态
    • 向Master报告节点状态
  • 工作流程
    1. 接收PodSpecs
    2. 确保容器正常运行
    3. 定期报告状态

2. kube-proxy

  • 功能:网络代理
  • 作用
    • 维护节点网络规则
    • 实现Service的负载均衡
    • 支持多种代理模式
  • 代理模式
    • userspace(已弃用)
    • iptables(默认)
    • IPVS(高性能)

3. Container Runtime

  • 功能:容器运行时
  • 支持
    • Docker
    • containerd
    • CRI-O
    • 其他符合CRI标准的运行时

网络架构

Pod网络模型

  • 每个Pod获得唯一IP地址
  • Pod间直接通信
  • 容器共享Pod网络命名空间

Service网络

  • ClusterIP:集群内部访问
  • NodePort:节点端口暴露
  • LoadBalancer:云负载均衡器
  • ExternalName:外部服务别名

网络插件

  • Flannel:简单的Overlay网络
  • Calico:基于BGP的网络策略
  • Weave Net:Mesh网络
  • Cilium:基于eBPF的高性能网络

存储架构

存储卷类型

  • emptyDir:临时存储
  • hostPath:主机路径
  • PersistentVolume:持久化存储
  • ConfigMap/Secret:配置存储

存储供应方式

  • 静态供应:管理员预先创建PV
  • 动态供应:按需自动创建PV

集群拓扑设计最佳实践

1. 节点规划

  • 控制平面节点:建议3-5个节点,确保高可用
  • 工作节点:根据业务需求规划,建议至少3个节点
  • 节点规格
    • 控制平面:4核8G以上,SSD存储
    • 工作节点:根据应用需求配置,建议4核16G以上
  • 网络规划
    • 控制平面网络:独立VLAN,确保安全
    • 工作节点网络:高性能网络,支持大带宽
    • 存储网络:单独网络,减少网络拥塞

2. 高可用架构设计

控制平面高可用

  • 多Master部署
    • 3个Master节点(推荐),避免脑裂
    • 每个Master节点运行全套控制平面组件
    • 负载均衡器分发API请求
  • etcd集群
    • 3-7个节点,奇数个节点
    • 分布式部署,跨可用区
    • 定期备份和监控
  • 负载均衡器
    • 硬件负载均衡器或软件负载均衡器(如HAProxy、Nginx)
    • 健康检查和故障转移
    • 支持TLS终止

数据平面高可用

  • 多Worker节点
    • 至少3个节点,确保Pod分布
    • 跨可用区部署,提高容灾能力
    • 节点自动加入和退出
  • Pod高可用
    • 合理设置副本数
    • 反亲和性规则,避免Pod集中在同一节点
    • 健康检查和存活探针
  • 存储高可用
    • 使用分布式存储(如Ceph、GlusterFS)
    • 多副本存储,确保数据安全
    • 快照和备份机制

3. 多集群架构方案

1. 集群联邦(Cluster Federation)

  • 功能:跨多个Kubernetes集群管理资源
  • 组件
    • Federation API Server
    • Federation Controller Manager
  • 应用场景
    • 跨区域部署
    • 混合云场景
    • 灾备和容灾

2. 多集群管理工具

  • Karmada:开源的Kubernetes多集群管理系统
  • Cluster API:声明式集群管理
  • Anthos:Google云的混合云管理平台
  • Tanzu:VMware的Kubernetes管理平台

3. 多集群网络方案

  • Service Mesh:使用Istio等实现跨集群服务发现
  • DNS解析:配置跨集群DNS解析
  • VPN连接:建立集群间VPN隧道
  • Direct Connect:物理专线连接

4. 多集群数据管理

  • 数据同步:使用GitOps工具同步配置
  • 存储复制:跨集群数据复制
  • 备份策略:统一的备份和恢复机制

4. 架构组件间的通信机制

控制平面内部通信

  • kube-apiserver:与所有组件通信
  • etcd:只与kube-apiserver通信
  • kube-scheduler:与kube-apiserver通信
  • kube-controller-manager:与kube-apiserver通信

控制平面与数据平面通信

  • kubelet:向kube-apiserver注册节点,接收Pod配置
  • kube-proxy:从kube-apiserver获取Service信息
  • 容器运行时:通过CRI与kubelet通信

通信安全

  • TLS加密:所有组件间通信使用TLS
  • 认证授权:基于RBAC的访问控制
  • 网络策略:限制Pod间通信

5. 架构性能优化

控制平面优化

  • etcd优化
    • 使用SSD存储
    • 合理设置内存和CPU资源
    • 调整压缩和保留策略
  • kube-apiserver优化
    • 水平扩展
    • 调整请求超时和并发数
    • 启用缓存
  • kube-scheduler优化
    • 调整调度策略
    • 启用抢占和优先级

数据平面优化

  • 节点优化
    • 关闭不必要的服务
    • 调整内核参数
    • 优化容器运行时
  • 网络优化
    • 使用高性能网络插件(如Cilium)
    • 调整MTU和网络缓冲区
    • 启用网络加速技术
  • 存储优化
    • 使用本地存储提高性能
    • 合理设置存储类
    • 优化IO调度

安全架构

认证(Authentication)

  • 客户端证书
  • 承载令牌
  • 认证代理

授权(Authorization)

  • RBAC(基于角色的访问控制)
  • ABAC(基于属性的访问控制)
  • Node授权
  • Webhook授权

准入控制(Admission Control)

  • Namespace生命周期
  • LimitRanger
  • ResourceQuota
  • PodSecurityPolicy

扩展架构

Custom Resource Definitions (CRD)

  • 自定义资源类型
  • 扩展API
  • 自定义控制器

Operator模式

  • 应用特定控制器
  • 自动化运维
  • 声明式配置

部署架构模式

单Master架构

  • 适合开发和测试
  • 简单部署
  • 单点故障风险

多Master高可用架构

  • 适合生产环境
  • 高可用性
  • 复杂部署

云托管架构

  • 使用云服务商托管K8S
  • 简化运维
  • 按需付费

总结

Kubernetes架构设计体现了现代分布式系统的核心理念:解耦、可扩展、高可用。通过本次完善,我们增加了:

  1. 集群拓扑设计最佳实践:包括节点规划、网络规划和硬件配置建议
  2. 详细的高可用架构设计:控制平面和数据平面的高可用方案,以及存储高可用
  3. 多集群架构方案:集群联邦、多集群管理工具、网络方案和数据管理
  4. 组件间通信机制:控制平面内部通信、控制平面与数据平面通信以及通信安全
  5. 架构性能优化:控制平面、数据平面、网络和存储的优化策略

这些内容为Kubernetes集群的设计和部署提供了全面的指导,帮助您构建更加可靠、高效的容器编排平台。理解K8S架构是掌握容器编排技术的基础,也是实现生产环境高可用部署的关键。

下一步学习