阿里云 ACK:Kubernetes 集群类型、节点池与服务网格深度指南
阿里云容器服务 Kubernetes 版(ACK)是一款全托管的 Kubernetes 服务,支撑着全球最大规模的容器化工作负载,包括阿里巴巴自身的双十一购物节——该事件每秒处理数十万笔交易。ACK 抽象了 Kubernetes 控制平面管理的复杂性,同时与阿里云更广泛的生态系统深度集成,涵盖网络(VPC、SLB)、存储(OSS、NAS、CPFS)、安全(RAM、KMS)以及可观测性(ARMS、日志服务)等方面。
本综合指南涵盖了 ACK 集群类型、节点池策略、与阿里云服务网格(ASM)的集成、成本优化技术,以及每位云原生工程师都应掌握的生产级最佳实践。
ACK 集群类型:选择合适的架构
ACK 提供三种主要的集群类型,每种类型设计用于不同的运维模式和工作负载需求。
ACK 托管集群(标准版)
ACK 托管集群是默认且最广泛使用的选项。阿里云完全管理 Kubernetes 控制平面(API Server、etcd、Controller Manager、Scheduler),不收取额外费用。您只需负责运行工作负载的 Worker 节点。
主要特性: - 控制平面托管在阿里云的管理账号中,默认以三个副本的形式提供高可用 - etcd 同样由阿里云管理,具备自动备份和恢复能力 - Kubernetes 版本升级由阿里云提供一键式操作 - 控制平面不可通过 SSH 直接访问——所有管理操作均通过 ACK 控制台、CLI 或 Kubernetes API 进行 - Worker 节点可以是 ECS 实例、弹性容器实例(ECI / 虚拟节点)或注册的外部服务器
适用场景: 大多数生产工作负载。托管控制平面消除了运维负担,同时提供完整的 Kubernetes API 兼容性。
ACK 专有集群
在专有集群中,阿里云为控制平面组件提供专用的 ECS 实例——API Server、etcd、Controller Manager 和 Scheduler 运行在属于您账号且位于您 VPC 中的实例上。
主要特性: - 对控制平面实例拥有完全控制权(可通过 SSH 登录 Master 节点) - 需要自行负责 etcd 的备份和恢复 - Kubernetes 升级需要与阿里云技术支持协调配合 - 由于需要专用 Master 实例(通常为三台 Master 节点),成本更高 - 满足要求对控制平面具有物理控制权的严格合规要求
适用场景: 有严格合规要求、禁止共享控制平面的组织,或需要托管集群无法支持的自定义控制平面配置的场景。
ACK Serverless 集群(ASK)
ACK Serverless(ASK)完全消除了 Worker 节点。Pod 运行在阿里云的弹性容器实例(ECI)上,这是一种安全的无服务器容器运行时。无需进行集群自动伸缩或节点管理——您直接部署 Pod,仅按运行容器消耗的 vCPU 和内存计费。
主要特性: - 无需管理 Worker 节点——无需打补丁、无需扩缩容、无需容量规划 - 每个 Pod 运行在轻量级、硬件虚拟化的沙箱中,拥有独立内核(基于 Kata Containers 的隔离) - Pod 启动时间以秒为单位(根据镜像大小通常在 5-30 秒之间) - 按秒计费,基于 Pod 的资源请求量 - 支持部分 Kubernetes 功能(不支持特权容器、不支持宿主机网络、卷类型受限)
适用场景: 突发型、不可预测的工作负载,CI/CD 流水线,批量处理任务以及事件驱动型应用——这些场景下保持闲置节点会造成资源浪费。
集群对比矩阵
| 特性 | 托管集群(ACK) | 专有集群 | Serverless(ASK) | |---------|--------------|-----------|-----------------| | 控制平面高可用 | 托管(3 副本) | 自管理(3 Master) | 完全托管 | | Worker 节点操作系统 | 自管理 | 自管理 | 不适用 | | 节点自动伸缩 | 内置 | 内置 | 不适用 | | GPU 支持 | 支持(GPU ECS) | 支持(GPU ECS) | 支持(GPU ECI) | | 自定义准入控制器 | 支持 | 支持 | 受限 | | 特权容器 | 支持 | 支持 | 不支持 | | 合规等级 | 标准 | 增强 | 标准 | | 计费模式 | 免费控制平面 + Worker ECS | Worker ECS + Master ECS | 按 Pod 按秒计费 |
节点池:扩缩容与管理 Worker 基础设施
节点池是 ACK 集群内共享相同配置的一组 Worker 节点。它们是集群自动伸缩、工作负载隔离和成本管理的基础。
节点池配置
创建节点池时,您需要定义:
实例类型: 节点池可以使用一种或多种 ECS 实例类型。指定多种实例类型可提高可用性,当主要实例类型容量不足时,自动伸缩器可以回退到备用类型。
伸缩配置: - 最小和最大节点数量 - 期望节点数量 - 自动伸缩规则(CPU/内存阈值、基于计划)
节点标签与污点: 自动应用到节点池中所有节点的 Kubernetes 标签和污点。这些对于工作负载调度至关重要——使用节点标签配合 nodeSelector 或 nodeAffinity 将特定工作负载定向调度到特定节点池。
操作系统与 Kubernetes 版本: 可选择阿里云 Linux(推荐,针对 ACK 优化)、CentOS 或 Windows Server。同一节点池中的所有节点共享相同的操作系统。
安全组与交换机: 节点的网络配置。为实现高可用,应将节点池分布到多个可用区。
节点修复与自愈: ACK 可以自动检测并替换不健康的节点。启用后,ACK 监控节点状态,并替换在可配置时间内持续处于不健康状态的节点。
多节点池架构模式
一个设计良好的 ACK 集群通常会为不同的工作负载类别使用多个节点池:
系统节点池:
- 运行集群关键系统组件:CoreDNS、kube-proxy、metrics-server、日志采集代理
- 少量且稳定的实例数量(2-3 个节点)
- 设置污点 CriticalAddonsOnly=true:NoSchedule,防止用户工作负载调度到此池
- 不启用自动伸缩——系统组件不随工作负载需求变动
通用节点池: - 运行无状态应用工作负载(Web 服务器、API 服务、微服务) - 中等至大规模的实例数量,具备积极的自动伸缩能力 - 多种实例类型以确保容量灵活性 - CPU 优化型实例(ecs.g6、ecs.g7)
内存优化节点池: - 运行内存密集型工作负载(缓存层、内存数据库、流处理) - 内存优化型实例(ecs.r6、ecs.r7) - 设置较高的最小节点数以保持缓存热度
GPU 节点池: - 运行机器学习训练、推理或视频处理工作负载 - GPU 实例(ecs.gn6v、ecs.gn7i) - 独立的伸缩配置,配合 GPU 专属节点选择器 - 考虑使用抢占式实例运行可中断的训练任务
抢占式实例节点池: - 使用抢占式实例运行容错、可中断的工作负载 - 成本显著降低(最高可节省 90%) - 务必与按量付费节点池搭配使用,以保证关键基线容量 - 使用 Pod 中断预算和优雅终止机制应对抢占式实例回收
ACK 集群自动伸缩器 vs. Kubernetes Cluster Autoscaler
ACK 提供两种自动伸缩机制:
ACK 集群自动伸缩器(推荐): 阿里云原生自动伸缩器,与 ECS API 和 ACK 调度深度集成。它基于待调度 Pod 和节点利用率做出伸缩决策,并可根据 Pod 调度要求跨多个节点池进行伸缩。还支持缩容到零。
Kubernetes Cluster Autoscaler(社区版): 上游 Kubernetes Cluster Autoscaler,ACK 同样支持。如果您需要通过社区扩展实现自定义自动伸缩逻辑,可选择此方案。
阿里云服务网格(ASM):管理微服务通信
阿里云服务网格(ASM)是一款全托管的、兼容 Istio 的服务网格,为运行在 ACK 上的微服务提供流量管理、可观测性和安全保障。
ASM 架构
ASM 采用托管控制平面模型——阿里云在专用管理集群中托管 Istio 控制平面(Istiod)。您只需在 ACK 中的应用 Pod 旁部署数据平面(Envoy Sidecar 代理)。
核心组件:
- ASM 实例: 托管的 Istio 控制平面。每个 ASM 实例可以管理多个 ACK 集群,实现多集群服务网格。 - Sidecar 代理(Envoy): 通过 Kubernetes Mutating Webhook 注入到应用 Pod 中。Envoy 拦截所有入站和出站流量,执行流量策略,采集指标并处理 mTLS 加密。 - 入口网关: 基于 Envoy 的托管入口网关,用于处理南北向流量。可自动通过阿里云 SLB 进行配置。 - 出口网关: 可选的托管网关,用于控制从服务网格到外部服务的出站流量。
流量管理功能
ASM 支持完整的 Istio 流量管理 API:
流量分割: 将一定比例的流量路由到不同的服务版本。这是金丝雀发布和 A/B 测试的基础:
`yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: reviews-route
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
weight: 90
- destination:
host: reviews
subset: v2
weight: 10
`
故障注入: 有意注入延迟或 HTTP 错误以测试应用的弹性:
`yaml
fault:
delay:
percentage:
value: 10
fixedDelay: 5s
abort:
percentage:
value: 5
httpStatus: 500
`
熔断: 通过限制并发连接数和请求数来保护服务免受级联故障的影响:
`yaml
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 10
maxRequestsPerConnection: 10
outlierDetection:
consecutiveErrors: 5
interval: 30s
baseEjectionTime: 30s
`
ASM 可观测性
ASM 与阿里云的可观测性工具集成:
- ARMS(应用实时监控服务): 跨服务的分布式链路追踪,展示请求延迟、错误率和依赖拓扑图。ASM 自动传播追踪标头。 - 日志服务(SLS): 从 Envoy 访问日志中集中采集日志,提供详细的请求级可见性,无需修改应用代码。 - 云监控与 Grafana: 预置的 Grafana 仪表盘,用于展示 Istio 指标(请求速率、错误率、延迟百分位数),使用云监控作为数据源。
mTLS 与安全
ASM 支持服务之间的自动双向 TLS:
- 宽容模式: 同时接受明文和 mTLS 流量。在迁移期间使用此模式。 - 严格模式: 拒绝所有非 mTLS 流量。这是推荐的生产环境设置。 - 授权策略: 基于命名空间、主体和请求属性定义服务之间的细粒度访问控制。
ASM 与阿里云 RAM 集成(使用 RBAC),并可通过 OIDC 与外部身份提供商联合认证。
ACK 成本优化
如果不进行有意识的成本管理,Kubernetes 集群的成本可能会迅速攀升。以下是专为 ACK 设计的优化策略:
工作负载合理调整
Kubernetes 中最常见的浪费是过度配置的 Pod。使用垂直 Pod 自动伸缩器(VPA)的推荐模式来分析实际资源使用情况,并给出合适的资源请求和限制建议:
`yaml
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Off" # 仅推荐,不自动更新
`
每月审查 VPA 推荐值,并相应调整 Pod 资源配置。
节点池优化
- 使用多种实例类型: 每个节点池指定 4-6 种兼容的实例类型。当容量受限时,这为自动伸缩器提供了更多选择。同时包含当前代和上一代实例。 - 充分利用抢占式实例: 为无状态、容错的工作负载创建专用的抢占式实例节点池。从 20-30% 的抢占式实例占比开始,逐步增加比例。 - 合理选择节点规格: 在节点大小和装箱效率之间取得平衡。较大的节点(更多核心)可降低系统守护进程的开销,但会增加单节点故障的影响范围。对于大多数工作负载,4-8 vCPU 的节点规格是一个良好的起点。
集群级策略
- 合并非生产环境: 在单个集群内使用独立的节点池(配合命名空间隔离和资源配额)来承载开发环境和预发环境,而不是为每个环境创建独立的集群。ACK 每个集群最多支持 100 个节点池。 - 基于计划的节点池伸缩: 对于具有可预测使用模式的环境(例如仅在工作时间使用),配置定时伸缩规则,在空闲时段将节点池缩容到零。 - 对突发型工作负载使用 ACK Serverless: 对于具有不可预测峰值的工作负载,在 ACK Serverless(ASK)中运行它们,或在标准 ACK 集群中使用虚拟节点。您只需为 Pod 运行时间付费,无需为空闲节点付费。
预留实例与节省计划
对于基准节点数量(7×24 小时运行的最小节点数),购买预留实例或节省计划: - 1 年期承诺: 相比按量付费节省约 40% - 3 年期承诺: 相比按量付费节省约 60% - 自动应用到账户中符合条件的 ECS 实例
生产环境最佳实践
集群安全
- 启用 RBAC: ACK 与阿里云 RAM 集成进行身份认证。定义细粒度的 RBAC 角色,并将其绑定到 RAM 用户和角色。切勿为应用部署使用 cluster-admin 权限。
- Pod 安全: 使用 Pod 安全标准(PSS)或 Pod 安全准入来强制执行安全配置。从 baseline 配置开始,逐步过渡到 restricted 配置。
- 网络策略: 实施 Kubernetes 网络策略来限制 Pod 到 Pod 的通信。Terway 网络插件(ACK 推荐的 CNI)同时支持 Kubernetes NetworkPolicy 和阿里云特有的网络策略,可实现更丰富的规则定义。
- 私有 API Server: 将 ACK API Server 端点配置为私有(仅 VPC 内可访问),并使用堡垒机或 VPN 进行管理访问。在生产集群中禁用公网 API Server 端点。
备份与灾备
- etcd 备份(专有集群): 如果使用专有集群,启用自动 etcd 快照备份到 OSS,至少保留 30 天。 - 应用状态备份: 使用 Velero(开源 Kubernetes 备份工具)将 Kubernetes 资源和持久卷备份到 OSS。定期执行备份并定期测试恢复流程。 - 多可用区部署: 将节点池分布到至少两个可用区。使用 Pod 反亲和性规则将关键服务的副本分散到不同可用区。
可观测性技术栈
ACK 与阿里云的可观测性服务集成:
- ARMS Prometheus: 托管 Prometheus 服务,提供 90 天数据保留、预置的 ACK 仪表盘以及与 AlertManager 集成的告警功能。 - 日志服务(SLS): 部署 Logtail DaemonSet(ACK 的日志采集代理),将容器的 stdout/stderr 日志和应用日志文件采集到 SLS。 - ARMS APM: 面向 Java、Go、Node.js 和 Python 应用的应用性能监控。Java 应用无需修改代码(字节码注入)。
CI/CD 集成
- ACK + ACR(容器镜像服务): 将容器镜像存储在阿里云容器镜像服务(ACR)中。使用 ACR 企业版获得镜像漏洞扫描、全球同步和跨账号共享功能。 - 基于 GitOps 的 ArgoCD / Flux: 在 ACK 上部署 ArgoCD 实现基于 GitOps 的持续交付。将 Kubernetes 清单文件存储在 Git 仓库中,让 ArgoCD 自动协调集群状态。 - 使用 ASM 实现金丝雀发布: 将上述 ASM 流量路由功能与 Argo Rollouts 或 Flagger 结合使用,实现基于指标的渐进式交付和自动回滚。
总结
阿里云 ACK 提供了一个成熟、经过生产验证的 Kubernetes 平台,将开源 Kubernetes 的灵活性与深度云原生集成相结合。通过选择适合您运维模式的集群类型、为工作负载隔离和成本效率设计多节点池架构、利用 ASM 进行微服务通信,以及遵循本文概述的生产最佳实践,您可以构建和运维从少量服务扩展到数千个服务的容器平台。
ACK 生态持续快速演进——请关注 ACK One(多集群管理)、ACK Edge(边缘计算)以及不断增长的 ACK 插件列表,这些插件简化了常用基础设施组件的部署。从一个托管集群开始,迭代优化节点池设计,随着运维成熟度的提升逐步采用服务网格和 GitOps。
本指南反映阿里云国际版最新 ACK 功能。请始终参考官方 ACK 文档以获取最新的服务能力和限制信息。
> 本文由 chengzicloud.cloud 提供,点击访问首页了解更多