阿里云容器服务Kubernetes版(ACK)对接使用完全指南
一、ACK集群类型解析与选型决策
在开始对接使用阿里云容器服务Kubernetes版(ACK)之前,首先需要理解ACK提供的不同集群类型及其适用场景。ACK目前主要提供三种集群形态:ACK托管集群、ACK专有集群和ACK Serverless集群。
1.1 ACK托管集群
ACK托管集群的控制面(包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd等核心组件)完全由阿里云托管,用户只需负责Worker节点的创建与运维。托管集群又细分为Pro版和基础版:
- Pro版:适用于企业生产与测试环境,提供99.95%的区域级SLA保障。单集群默认支持最大5000个Worker节点并可申请提高配额。Pro版收取集群管理费用,但相比自行维护Master节点的专有集群,整体TCO通常更低。
- 基础版:仅供个人学习与测试,单账号最多创建2个集群,单集群仅支持10个Worker节点且不支持提高配额。基础版不收取集群管理费用。
每一个托管集群的管控面包含至少2个kube-apiserver实例和3个etcd实例,并部署在不同的可用区以提供可用区级别的高可用性。这种设计显著降低了用户的运维负担,让团队可以更专注于业务应用的开发和部署。
1.2 ACK专有集群
ACK专有集群的控制面需要用户自行创建并运维。根据官方公告,ACK专有集群已于2024年8月21日起停止新建(云盒场景除外),官方推荐在生产环境中使用ACK托管集群Pro版。
1.3 ACK Serverless集群
ACK Serverless集群完全基于弹性容器实例(ECI)运行,用户无需管理底层ECS服务器,只需提供打包好的镜像即可运行容器。该集群类型与阿里云容器服务无缝对接,仅为容器实际运行消耗的资源付费。ACK Serverless集群适用于对资源弹性要求极高、希望免于节点运维的场景。
1.4 选型建议
对于大多数企业的生产环境,ACK托管集群Pro版是最佳选择。它具有以下优势:提供了可赔付的SLA保障;具备etcd高频冷热备机制和异地容灾能力;支持从基础版或专有集群热迁移至Pro版。对于测试或个人学习场景,可选择ACK托管集群基础版。对于对资源弹性要求极高、不想管理节点的场景,ACK Serverless集群是理想选择。
需要先登录阿里云控制台,点击:阿里云控制台
二、ACK托管集群创建与初始化配置
选定集群类型后,接下来进入集群创建阶段。ACK托管集群支持通过多种方式创建,包括控制台、API、Terraform、SDK以及CLI等。
2.1 控制台创建流程
在阿里云控制台中进入"容器服务Kubernetes版",点击"创建集群",选择"ACK托管集群"。创建过程中需要配置以下关键参数:
- 集群名称:自定义命名,创建后仍可修改。
- 集群规格:选择Pro版或基础版,生产环境务必选择Pro版。
- 地域和可用区:地域一经创建不可修改。建议选择与用户和业务资源部署地域较近的地域以降低网络延迟。同时配置至少两个不同可用区以保证高可用。
- Kubernetes版本:仅支持创建最近三个次要版本,建议使用当前最新版本以获得更好的稳定性、性能和安全性更新。
- 自动升级:开启后可在维护窗口期内自动升级集群控制面和节点池,有效降低版本维护负担。
- 专有网络(VPC)和交换机:可选择自动创建或使用已有VPC。建议选择2个不同可用区的交换机以保证高可用。
此外,集群创建时还需配置公网访问选项——集群节点是否需要访问公网(拉取公共镜像时需开通公网)。如需让集群节点访问公网,需要为VPC配置SNAT。
2.2 网络规划:Terway与Flannel对比
网络插件是集群创建时最关键的配置项之一,创建后不可更改。ACK支持Terway和Flannel两种容器网络插件:
- Terway:是阿里云自研的容器网络插件,基于弹性网卡(ENI)实现。如果对网络安全、IPAM管理(例如固定Pod IP、NetworkPolicy等)等方面有强诉求,建议使用Terway。
- Flannel:是Kubernetes社区经典的容器网络插件。如果集群规模较小(例如小于500个节点),且对网络无特殊需求,可使用Flannel。
在规划网络地址时,需要根据业务场景和集群规模规划VPC网段(VPC自身网段和vSwitch网段)和Kubernetes网段(Pod地址段和Service地址段),定义整个集群的IP地址范围以及Pod和节点可用的IP地址数量。
2.3 使用Terraform创建集群
对于基础设施即代码(IaC)实践,ACK支持使用Terraform创建集群。通过Terraform可以声明式地定义集群的全部配置,实现集群的自动化创建、更新和销毁,适合需要大规模、标准化部署多个集群的企业。
三、节点池管理与弹性扩缩容
节点池是对集群中节点的逻辑分组,用于统一管理具有相同配置(如ECS规格、操作系统、容器运行时)的节点。通过节点池,可实现节点的批量创建、扩容、缩容和升级,简化集群运维。
节点池的核心应用场景包括:
- 按业务类型分组:如将运行Web应用的节点归为"Web节点池",运行数据库的节点归为"数据节点池"。
- 按资源规格分组:如高性能节点池(用于计算密集型业务)、通用节点池(用于普通业务)。
- 版本管理:统一升级节点的Kubernetes版本或操作系统版本,避免节点配置不一致。
ACK还提供了Auto Mode(智能托管模式)选项。开启后,仅需进行简单的规划配置,即可一键创建符合最佳实践的Kubernetes集群。该集群会默认创建一个智能托管节点池,其中的节点生命周期将由ACK进行托管和运维。
四、应用部署与工作负载管理
ACK兼容原生Kubernetes API,可直接使用kubectl等原生工具操作集群。在ACK中部署应用的核心是理解Kubernetes的工作负载(Workload)概念——对运行容器化应用的抽象,用于定义应用的运行方式和管理策略。
4.1 核心工作负载类型
ACK支持多种Kubernetes原生工作负载类型,适配不同业务场景:
- Deployment(无状态工作负载):适用于无状态应用(如Web服务、API服务),Pod副本完全一致,可随意替换,支持滚动更新和回滚。
- StatefulSet(有状态工作负载):适用于有状态应用(如数据库、分布式缓存),每个Pod有唯一标识(名称、网络标识),支持稳定的存储挂载和有序部署/更新。
- DaemonSet(守护进程工作负载):适用于需要在集群所有节点(或指定节点)上运行的应用(如日志采集器、监控代理),确保每个节点仅运行一个Pod副本。
- Job/CronJob(任务型工作负载):适用于一次性任务(Job)或定时任务(CronJob),任务完成后Pod自动终止。
4.2 使用YAML部署应用
以下是一个典型的Nginx Deployment YAML示例,展示了如何在ACK集群中部署一个2副本的无状态应用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
namespace: my-nginx-namespace
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
ports:
- containerPort: 80
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"在生产环境中,必须为所有容器设置资源请求(requests)和限制(limits)。不设置资源限制可能导致单个Pod占用过多资源,影响集群中其他Pod的运行。
4.3 容器镜像管理
在ACK中部署应用时,容器镜像需要先上传到容器镜像仓库中。阿里云容器镜像服务(ACR)与ACK深度集成,提供私有镜像仓库、镜像安全扫描、全球同步加速等功能。用户可将每个微服务应用存储在阿里云镜像仓库中进行管理。此外,ACK还提供了免密组件(ack-secret-manager),可在应用市场中一键部署,实现从ACR拉取镜像时的免密认证。
五、服务暴露与负载均衡
应用部署到ACK集群后,需要将服务暴露给外部用户访问。ACK提供了Service和Ingress两种服务暴露机制。
5.1 Service——四层负载均衡
Service是Kubernetes中解决Pod IP变化问题的抽象层,提供稳定的服务访问入口。ACK支持多种Service类型:
- ClusterIP:仅在集群内部可访问,适用于集群内服务间的通信。
- NodePort:在集群每个节点上开放一个端口,通过节点IP+端口访问服务。
- LoadBalancer:自动创建阿里云负载均衡(CLB或NLB)实例,提供公网或内网访问入口。
以下是一个典型的Service YAML示例:
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: my-nginx-svc
namespace: my-nginx-namespace
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP5.2 Ingress——七层负载均衡
Ingress是Kubernetes中管理七层(HTTP/HTTPS)流量的API对象,提供负载均衡、SSL终结以及基于域名的虚拟托管功能。Ingress控制器负责完成Ingress的工作。ACK支持多种Ingress控制器,其中ALB Ingress是阿里云推荐的生产级方案。
使用ALB Ingress的典型流程如下:
- 为示例应用创建一个命名空间。
- 部署应用并创建Service。
- 创建ALB Ingress,手动创建AlbConfig用于管理ALB实例,创建IngressClass以关联AlbConfig。
- 验证部署是否成功,通过浏览器访问应用。
ALB Ingress可以提供高级的流量管理能力,包括基于URL路径的路由、基于HTTP头的路由、灰度发布等。
5.3 使用已有负载均衡实例
如果已有阿里云负载均衡(CLB或NLB)实例,ACK也支持复用这些实例来暴露服务。需要注意的是,创建集群时只能选择新建负载均衡的类型和规格,不能选择已有负载均衡实例。如需使用已有负载均衡,创建集群时可以选择先不安装Ingress插件,等集群创建成功后再去手动配置已有的负载均衡。
六、存储管理:CSI与动态存储卷
ACK通过容器存储接口(CSI)插件对接阿里云存储服务。CSI存储组件(csi-plugin和csi-provisioner)支持自动化完成存储卷的动态创建、挂载、卸载、扩容等操作。
6.1 云盘动态存储卷
云盘是阿里云为ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性等特点。ACK支持使用CSI插件创建云盘动态存储卷。
工作原理:通过在PVC(存储声明)中关联StorageClass,系统会自动根据配置创建并绑定PV(存储卷)。该方式无需预先手动创建和配置存储资源,可以降低底层基础设施的复杂性。
ACK提供了多种默认StorageClass,推荐使用alicloud-disk-topology-alltype。该StorageClass默认先调度Pod再创建云盘,避免因可用区不匹配导致挂载失败。Pod调度到的节点可用区和实例规格,会结合云盘库存情况,按ESSD、SSD、高效云盘的顺序尝试创建。
以下是通过StatefulSet使用云盘动态存储卷的YAML示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: alicloud-disk-topology-alltype
resources:
requests:
storage: 20Gi云盘适用于对磁盘I/O要求高的应用(如MySQL、Redis等数据存储服务)以及高速写日志等场景。云盘不支持跨可用区挂载,只能挂载到同一可用区下的Pod。
6.2 OSS动态存储卷(ossfs 2.0)
对于需要持久化存储或在多Pod间共享数据的应用,可通过动态PV将OSS Bucket挂载为ossfs 2.0存储卷。该方式通过StorageClass作为模板自动创建并绑定PV,让应用能像访问本地文件一样,通过标准的POSIX接口读写OSS数据。
七、可观测性体系建设
Kubernetes可观测性体系包含监控和日志两部分。ACK提供了完整的可观测性生态,从基础设施层到用户业务层共分为四个层次。
7.1 监控体系
ACK与阿里云可观测监控Prometheus版深度集成。ACK托管集群默认集成了可观测监控Prometheus版,通过自研的指标采集探针Prometheus Agent可以实现容器基础监控指标的采集。同时也支持基于ServiceMonitor、PodMonitor等方式实现自定义指标采集。
ACK还提供了独特的操作系统内核层的容器监控可观测能力SysOM(System Observer Monitoring)。该能力基于eBPF技术,整合了指标监控、应用链路追踪、日志分析和事件监控等多种功能,提供Kubernetes集群一站式可观测性产品。使ACK集群具备网络监控、架构可视化感知等能力。
7.2 日志采集
ACK通过Logtail组件与日志服务SLS集成,实现容器日志的采集、存储和分析。当配置采集ACK集群容器日志后,可在SLS控制台查看和检索日志。如果日志未能成功采集,建议分阶段排查配置、采集组件与节点状态、以及日志采集容器本身的作业记录。
八、安全管理与权限控制
ACK的授权体系包含对基础资源层的RAM授权和对ACK集群层的RBAC授权。不同用户角色在这两个层面具有不同的权限要求。
8.1 RAM授权
RAM(访问控制)是阿里云提供的身份管理和访问控制服务。ACK提供了多个系统权限策略:
- AliyunCSFullAccess:管理容器服务(CS)的权限。
- AliyunCSReadOnlyAccess:只读访问容器服务(CS)的权限。
安全最佳实践:日常运维应使用RAM子账号替代主账号。不要把RAM用户的AccessKey ID和AccessKey Secret保存在工程代码中,建议使用STS或环境变量等方式获取访问授权。
8.2 RBAC授权
RBAC(基于角色的访问控制)是Kubernetes原生的权限管理机制。ACK集群层的RBAC授权与RAM授权配合,实现对集群资源的精细化权限控制。针对集群的只读管理员、应用运维人员、应用开发人员以及权限管理员这几类对象,ACK提供了授权最佳实践。
8.3 RRSA——RAM Roles for Service Accounts
RRSA是ACK提供的一种安全特性,允许在集群内为Service Account绑定RAM角色。应用部署在ACK集群上时,可以在集群内开启RRSA功能,在RAM角色绑定ACK集群服务账户或Pod上获取STS Token。这避免了在Pod中硬编码AK/SK的安全风险。
8.4 Worker RAM角色精细化权限控制
ACK托管集群会自动创建一个所有节点共享的默认Worker RAM角色。当通过默认的Worker RAM角色授权时,权限会共享给集群内所有的节点,可能会存在非预期的权限扩散风险。建议在创建节点池时为其指定一个自定义的Worker RAM角色,实现节点池级别的精细化权限控制。
九、弹性伸缩配置
ACK提供了完善的弹性伸缩能力,包括Pod层面的水平伸缩(HPA)和节点层面的自动伸缩(cluster-autoscaler)。
9.1 HPA——Pod水平自动伸缩
Horizontal Pod Autoscaler(HPA)是Kubernetes内置的Pod水平自动伸缩组件。HPA根据CPU利用率、内存利用率或自定义指标(如QPS)自动调整Deployment或StatefulSet的副本数。
以下是一个HPA的YAML示例:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: my-nginx-namespace
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 509.2 cluster-autoscaler——节点自动伸缩
cluster-autoscaler是Kubernetes社区开源的节点自动伸缩组件。当集群中的Pod因资源不足而无法调度时,cluster-autoscaler会自动增加节点;当节点资源利用率较低时,会自动缩容节点。
通过ALB+ACK+cluster-autoscaler+HPA的组合方案,可以实现在业务需求波动时,自动调整指定类型的ECS实例和Pod个数,在保证服务质量的同时提升资源利用率、缩减资源成本。
十、多集群管理与ACK One
对于需要管理多个Kubernetes集群的企业,ACK提供了ACK One分布式云容器平台。ACK One舰队管理是阿里云提供的多集群管理方案,功能包括:
- GitOps应用分发
- 多集群网关
- 多集群Service
- 全局可观测
- 服务网格(集成ASM)
- 统一权限管理
通过ACK One注册集群,可以将其他公有云厂商和IDC的Kubernetes集群接入到阿里云ACK控制台进行统一管理。多集群服务可实现原生Service的跨集群通信,适用于因业务隔离、异地容灾等需求部署多个集群的场景。
十一、生产环境最佳实践与避坑指南
基于ACK的企业级生产实践,以下是最关键的几条最佳实践:
- 所有服务必须设置资源限制:为每个容器设置CPU和内存的requests和limits,避免资源争抢和集群不稳定。
- 配置健康检查:为每个Pod配置livenessProbe和readinessProbe,确保Pod异常时能被自动重启,流量不会路由到未就绪的Pod。
- 使用滚动更新策略:Deployment默认采用滚动更新,可配置maxSurge和maxUnavailable控制更新速度。
- 生产环境使用Pro版:ACK托管集群Pro版提供SLA保障和更高的配额。
- 开启集群自动升级:降低版本维护负担,及时获得安全补丁和新特性。
- 不要将数据库等有状态服务容器化:数据库等有状态服务对I/O和稳定性要求高,建议使用阿里云RDS等托管数据库服务。
根据CNCF发布的云原生调查报告,全球超过90%的企业已经在生产环境中使用Kubernetes或正在规划Kubernetes相关项目。ACK作为阿里云的企业级Kubernetes服务,通过托管控制面、与阿里云生态深度集成、提供完善的监控日志和安全体系,帮助企业降低Kubernetes运维门槛,让团队更聚焦于业务创新。
典型的企业架构为:ALB → ACK → RDS/Redis/OSS,所有云产品统一纳管,真正实现云原生平台化。
常见问题解答
Q1:ACK托管集群Pro版和基础版的主要区别是什么?
A:Pro版提供99.95%的区域级SLA保障,单集群默认支持最大5000个Worker节点,适用于生产环境,收取集群管理费用。基础版仅供个人学习与测试,单账号最多创建2个集群,单集群仅支持10个Worker节点,不收取集群管理费用。
Q2:创建ACK集群时,网络插件应该选择Terway还是Flannel?
A:如果对网络安全、IPAM管理(如固定Pod IP、NetworkPolicy等)有强诉求,建议使用Terway。如果集群规模较小(小于500个节点)且对网络无特殊需求,可使用Flannel。网络插件在集群创建后不可更改,需提前规划。
Q3:如何在ACK中实现应用的弹性伸缩?
A:ACK支持两种弹性伸缩方式:HPA(Pod水平自动伸缩)根据CPU利用率等指标自动调整Pod副本数;cluster-autoscaler根据Pod调度情况自动调整集群节点数量。两者配合可实现从Pod到节点的全方位弹性伸缩。
Q4:ACK中如何为有状态应用配置持久化存储?
A:ACK通过CSI插件对接阿里云存储服务。对于需要高I/O的有状态应用(如数据库),推荐使用云盘动态存储卷——在StatefulSet中定义volumeClaimTemplates,系统会自动为每个Pod创建独立的云盘并挂载。对于需要在多Pod间共享数据的场景,可使用ossfs 2.0将OSS Bucket挂载为存储卷。
Q5:ACK的权限管理体系是怎样的?
A:ACK的授权体系包含两层:RAM授权(控制对阿里云资源的访问)和集群内RBAC授权(控制对Kubernetes资源的操作权限)。生产环境建议使用RAM子账号进行日常运维,避免使用主账号。还可通过RRSA机制为集群内的Service Account绑定RAM角色,避免在Pod中硬编码AK/SK。
Q6:ACK的可观测性体系包括哪些内容?
A:ACK的可观测性体系涵盖监控和日志两部分。监控方面,ACK与可观测监控Prometheus版深度集成,提供容器基础监控指标采集,支持ServiceMonitor和PodMonitor自定义指标采集,还提供基于eBPF的SysOM内核层监控。日志方面,通过Logtail组件与SLS集成,实现容器日志的采集、存储和分析。



