跳到主要内容

组件总览

kubernetes 提供了完整的云原生解决方案,包括了云原生应用的编排、存储、网络、安全等各个方面。在云原生环境中,我们只需要关注应用的编排,而将存储、网络、安全等交给 kubernetes 来管理

对于自建或托管的 kubernetes 集群,想要使用完整的 kubernetes 能力,需要将 kubernetes 与云厂商的 API 进行集成。这就需要用到一些额外的组件来完成

组件总览

不同的组件提供了不同的功能,都是为了将 kubernetes 与云厂商的 API 进行集成以完成 kubernetes 的完整能力

  • Cloud Controller Manager (CCM): 将 Kubernetes 与云厂商 API 解耦,包含 ServiceController(为 Service type=LoadBalancer 创建云 LB)、NodeControllerRouteController 等。
  • Container Storage Interface (CSI): 动态制备与挂载云存储(如云盘)。
  • Ingress Controller: 监听 Ingress/Gateway,创建并更新云负载均衡的监听、转发规则等(与 Service type=LoadBalancer 的 CCM 链路不同)。
  • Cluster Autoscaler (CA): 当出现 Pending Pod 时按需调用云 API 扩/缩节点数。

术语:in-tree 与 out-of-tree

  • in-tree(树内)

    • 云厂商相关逻辑直接编译在 Kubernetes 核心组件中(主要是 kube-controller-manager 的内部云控制循环)。
    • 通过 --cloud-provider=<provider> 使用内置实现,升级与发布节奏受 Kubernetes 本身约束,耦合度高,正被逐步淘汰,不建议新集群使用。
  • out-of-tree(树外,也称 external)

    • 将云厂商逻辑从核心代码中解耦,作为独立进程运行的 Cloud Controller Manager(CCM)。
    • 集群组件需设置为外置模式:kube-controller-managerkubelet 使用 --cloud-provider=external
    • 初始化行为:节点会带有污点 node.cloudprovider.kubernetes.io/uninitialized:NoSchedule,由外置 CCM 完成二次初始化并移除污点;云相关 API 由 CCM 统一调用,可能受到速率限制,需要容量规划。
    • 优点:解耦核心发布、独立升级、更易维护与安全加固,是官方推荐路径。

更多细节与示例,见官方文档:运行云管理控制器(CCM)

自建集群 vs 托管集群

  • 自建集群

    • 需切换到外置云提供商模式:在 kube-controller-manager 与各节点 kubelet 配置 --cloud-provider=external
    • 部署并配置对应云厂商的 CCM、CSI、Ingress Controller、Cluster Autoscaler 等。
    • 为组件提供凭据(推荐主机绑定云角色,否则使用 AK/SK Secret)与最小权限策略。
  • 托管集群(如阿里云 ACK)

    • 云厂商已托管 CCM/CSI/Ingress Controller 等控制面组件,用户直接声明 Service/PVC/Ingress 即可触发云资源创建。

快速开始

  1. 按官方文档将集群切到 external 模式并理解初始化污点行为。
  2. 按云厂商 CCM 指南部署 cloud-controller-manager,提供 Region、VPC/VSwitch、安全组、凭据等配置。
  3. 验证 Service type=LoadBalancer 能自动创建云负载均衡并写入 status.loadBalancer.ingress
  4. 按需部署存储 CSI、Ingress Controller 与 Cluster Autoscaler。

参考链接