阿里云容器服务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服务器,只需提供打包好的镜像即可运行容器。该集群类型适用于对资源弹性要求极高、希望免于节点运维的场景。
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个及以上不同可用区。
2.2 网络规划:Terway与Flannel对比
ACK提供了两种CNI网络插件:Terway和Flannel。Terway是基于阿里云弹性网卡(ENI)资源的云原生容器网络方案,提供更优的网络性能和更丰富的网络策略能力。Flannel则是社区标准的Overlay网络方案,配置简单但性能相对较弱。对于生产环境,推荐使用Terway以获得更好的网络性能和可观测性。
2.3 节点池管理
节点池是具有相同属性(例如实例规格、操作系统、标签和污点等)的一组节点的逻辑集合。一个集群中可以创建多个不同配置和类型的节点池。节点池的配置包含节点的属性,例如节点实例规格、计费类型、可用区(vSwitch)、操作系统镜像、CPU架构、标签和污点等。
通过节点池,可以实现:
- 分组管理:将不同配置的节点分组管理,例如CPU节点池和GPU节点池。
- 弹性伸缩:节点池支持手动扩缩容和自动弹性伸缩。
- 混合云部署:ACK托管集群Pro版支持创建混合云节点池,将已有的混合云节点加入集群。
三、应用部署与服务暴露
3.1 核心工作负载部署
ACK集群完全兼容Kubernetes原生API,可以使用Deployment、StatefulSet、DaemonSet等标准工作负载资源来部署应用。以下是一个Nginx Deployment的YAML示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"对于需要持久化存储的有状态应用,应使用StatefulSet配合持久化存储卷。
3.2 Service:集群内服务发现与四层负载均衡
Service是Kubernetes中实现服务发现和四层负载均衡的核心资源。ACK支持ClusterIP、NodePort和LoadBalancer三种Service类型。其中LoadBalancer类型会自动创建阿里云负载均衡实例,将服务暴露到公网或内网。
3.3 ALB Ingress:七层负载均衡
Ingress是集群内Service对外暴露七层(HTTP/HTTPS)的访问接入点,用于为集群中的多个Service提供统一的入口。ACK推荐使用ALB Ingress来实现七层负载均衡。
创建ACK托管集群时,在Ingress参数配置区域,选择安装ALB Ingress。ALB Ingress提供了以下核心能力:
- 支持通过域名或访问路径路由到不同的Service
- 支持混合挂载:将K8s集群内Pod和集群外ECS实例混合挂载到同一后端服务器组
- 支持跨地域挂载和本地IDC挂载
以下是一个ALB Ingress的配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: "alb"
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80四、存储管理
Kubernetes应用通常需要持久化存储来保存数据。ACK通过标准的容器存储接口(CSI),集成了多种阿里云存储服务(如云盘、OSS、NAS、CPFS等),并兼容Kubernetes原生存储机制,为不同业务场景提供存储解决方案。
4.1 存储方案选型
ACK的存储方案分为两类:
- Kubernetes原生存储卷:包括emptyDir、HostPath、ConfigMap/Secret等,生命周期通常与Pod绑定,不适用于需要持久化保存应用数据的场景。
- 阿里云持久化存储卷:通过CSI组件集成,为工作负载提供稳定、可靠的数据持久化能力。生命周期独立于Pod,可用于有状态应用。
4.2 云盘动态存储卷
云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性、高可靠等特点。ACK支持使用CSI插件创建云盘动态存储卷。
动态存储卷的配置需要先创建StorageClass,然后通过PVC(PersistentVolumeClaim)动态申请存储资源。以下是一个StorageClass和PVC的配置示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-ssd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_ssd
regionId: cn-hangzhou
zoneId: cn-hangzhou-g
reclaimPolicy: Delete
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-ssd
resources:
requests:
storage: 20Gi4.3 NAS静态存储卷
NAS存储卷提供数据持久化(Pod重建后数据不丢失)和数据共享(多Pod同时读写)能力。ACK支持将已有的NAS文件系统,以静态存储卷的方式挂载给工作负载使用。静态存储卷需预先创建PV来代表已有的存储资源(如NAS文件系统)。
五、安全与权限管理
5.1 RAM授权与RBAC授权的双层体系
ACK的权限管理采用双层体系:RAM授权和RBAC授权。
- RAM授权:控制用户对ACK产品的操作权限,例如创建集群、查看集群列表等。系统策略如AliyunCSFullAccess、AliyunCSReadOnlyAccess等可满足大部分场景。
- RBAC授权:控制用户在集群内部对Kubernetes资源的操作权限,例如创建Pod、删除Service等。RBAC授权通过Kubernetes原生的Role、ClusterRole、RoleBinding和ClusterRoleBinding资源来实现。
如果某个用户需要访问ACK集群,无需为用户授予访问其他云产品资源的权限,保证用户访问云产品资源权限最小化。
5.2 ack-ram-authenticator Webhook认证
ack-ram-authenticator组件是面向ACK托管集群的认证插件,基于Kubernetes原生Webhook Token认证方式,实现通过RAM完成集群API Server的请求认证。同时,该组件通过CRD形式提供RAM身份和RBAC权限的映射关系,帮您更灵活地配置RBAC鉴权。
该认证方式的主要优势包括:
- 适配企业通过云SSO场景,提供灵活可控的数据面RBAC授权
- 在角色SSO对接场景下,API Server审计日志中包含企业IDP中的身份信息,有效支持对扮演同一角色的不同IDP用户的行为审计
- 当企业员工离职时被删除所持有的RAM用户或RAM角色后,其在集群中的RBAC权限将自动失效
5.3 安全组配置
ACK集群使用安全组来约束控制面节点和Worker节点之间的网络流量。安全组还用于控制节点、VPC资源和外部IP地址之间的流量。创建集群或节点池时,系统会默认自动为您分配一个安全组,您也可以指定关联已有安全组。
六、可观测性体系建设
6.1 日志采集
在ACK集群中,通过部署日志采集组件(Logtail),可以将各类日志数据安全传输至日志服务SLS进行存储和分析。ACK通过AliyunLogConfig CRD实现与SLS采集配置的关联。日志采集支持容器标准输出、容器内文件日志以及节点日志等多种来源。
6.2 监控告警
ACK集成了阿里云托管版Prometheus监控服务。接入阿里云容器服务ACK后,云监控会创建对应的SLS Store和Prometheus实例用于存储对应可观测数据。通过Prometheus,可以采集集群节点、Pod、容器等各个层面的监控指标,并配置告警规则。
ACK还支持与Grafana集成,实现监控数据的可视化展示。
七、生产级运维与优化
7.1 集群自动升级
ACK支持集群的自动升级能力,保持集群控制面和节点池的周期性自动升级。集群维护窗口是一个为ACK集群预先设定的、可重复的特定时间段。在此期间,ACK将执行集群自动化运维操作,如集群自动升级、CVE漏洞自动修复等。开启自动升级后,可有效降低版本维护负担。
7.2 弹性伸缩
ACK提供了完善的弹性伸缩方案,包括工作负载伸缩和节点伸缩。
- 工作负载伸缩:支持社区标准的HPA(Horizontal Pod Autoscaler)、VPA(Vertical Pod Autoscaler)等能力。还提供了类似CronHPA的定时伸缩能力。
- 节点伸缩:通过Cluster Autoscaler实现节点级别的自动扩缩容。
ACK Pro版集群支持为应用申请GPU显存和算力,能够帮助您更精细化的使用GPU的显存和算力资源。共享GPU调度支持仅申请显存和同时申请显存和算力两种任务。
7.3 CI/CD流水线搭建
ACK与阿里云云效、容器镜像服务ACR等产品深度集成,支持构建完整的容器CI/CD流水线。
典型的CI/CD流程如下:
- 开发人员更新项目代码后,云效流水线自动触发镜像构建
- 构建完成的镜像推送到容器镜像服务ACR
- 流水线触发部署,将镜像拉取到测试集群进行测试
- 测试通过并经过审核批准后,将镜像拉取到生产集群完成部署
在多账号多集群的环境下,各个账号负责不同的业务和功能需求,同时在特定账号下创建对应职能的容器集群,实现集群间的完全隔离。
八、最佳实践与注意事项
8.1 生产环境集群配置建议
- 选择Pro版:生产环境务必选择ACK托管集群Pro版,以获得SLA保障和高可用性。
- 多可用区部署:配置至少两个不同可用区以保证集群的高可用性。
- 启用自动升级:开启集群自动升级,在维护窗口期内自动完成版本更新。
- 使用Terway网络:生产环境推荐使用Terway网络插件以获得更好的网络性能。
8.2 安全最佳实践
- 最小权限原则:通过RAM和RBAC的双层授权体系,确保用户仅拥有完成工作所需的最小权限。
- 启用Webhook认证:使用ack-ram-authenticator组件为集群API Server提供更安全的身份验证。
- 安全组配置:合理配置安全组规则,控制节点和Pod的网络访问。
8.3 成本优化建议
- 合理规划节点规格:根据工作负载的实际资源需求选择合适的ECS实例规格,避免资源浪费。
- 使用弹性伸缩:通过HPA和Cluster Autoscaler实现资源的按需使用,降低闲置成本。
- 选择合适的存储类型:根据业务场景选择云盘、NAS或OSS,平衡性能与成本。
九、常见问答
问1:ACK托管集群Pro版和基础版的主要区别是什么?
答:Pro版提供99.95%的区域级SLA保障,单集群默认支持最大5000个Worker节点,适用于企业生产环境;基础版仅供个人学习与测试,单账号最多创建2个集群,单集群仅支持10个Worker节点。Pro版收取集群管理费用,基础版不收取。
问2:如何在ACK集群中暴露一个Web应用给公网访问?
答:可以通过两种方式:一是创建LoadBalancer类型的Service,自动创建阿里云负载均衡实例暴露服务;二是安装ALB Ingress Controller,通过Ingress资源配置七层转发规则,将流量路由到后端Service。生产环境推荐使用ALB Ingress方式。
问3:ACK集群中的存储卷如何实现数据持久化?
答:ACK通过CSI插件集成了阿里云云盘、NAS、OSS等存储服务。对于云盘,可以通过StorageClass和PVC实现动态存储卷的自动创建和挂载;对于NAS,可以通过预先创建PV和PVC的方式实现静态存储卷的挂载。存储卷的生命周期独立于Pod,即使Pod被删除,数据依然保留。
问4:如何管理ACK集群的用户权限?
答:ACK采用RAM授权和RBAC授权的双层体系。RAM授权控制用户对ACK产品的操作权限;RBAC授权控制用户在集群内部对Kubernetes资源的操作权限。建议启用ack-ram-authenticator组件,实现基于RAM的Webhook认证。
问5:ACK集群如何进行版本升级?
答:ACK支持手动升级和自动升级两种方式。开启自动升级后,ACK会在设定的维护窗口期内自动完成集群控制面和节点池的版本升级。建议生产环境开启自动升级以降低版本维护负担。
问6:ACK如何与CI/CD流水线集成?
答:ACK与阿里云云效、容器镜像服务ACR深度集成。典型的流程是:代码提交触发云效流水线构建镜像,推送到ACR,然后通过流水线自动部署到ACK集群。也可以使用Jenkins、GitLab等第三方工具与ACK集成。


