阿里云Kubernetes集群托管对接使用完全指南
一、ACK集群类型解析与选型决策
在开始对接使用阿里云容器服务Kubernetes版(ACK)之前,首先需要深入理解ACK提供的不同集群类型及其适用场景。阿里云容器服务Kubernetes版目前主要提供三种集群形态: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个及以上不同可用区的交换机以保障高可用。
2.2 网络插件选型:Terway与Flannel
ACK提供两种CNI插件——Terway和Flannel。Terway是阿里云自研的高性能网络插件,使用弹性网卡(ENI)为Pod提供网络能力,具备基于eBPF的网络加速、NetworkPolicy网络策略以及Pod级别的虚拟交换机和安全组等特性。Flannel是社区开源网络插件,在ACK中采用了阿里云VPC专有网络模式,报文经过VPC路由表直接转发。
两种插件的核心差异在于:Terway性能更高、功能更丰富,适合对网络性能和安全性有较高要求的生产环境;Flannel配置简单、易于使用,但网络性能受NAT损失影响,访问控制能力相对较弱,且集群节点数量上限较低。需要注意的是,网络插件在集群创建后无法更改,因此创建前需谨慎选型。
2.3 使用Terraform创建ACK托管集群
对于基础设施即代码(IaC)的管理需求,Terraform是理想的选择。以下是通过Terraform创建ACK托管集群的配置示例:
provider "alicloud" {
region = "cn-hangzhou"
}
resource "alicloud_cs_managed_kubernetes" "default" {
name = "my-ack-cluster"
cluster_spec = "ack.pro.small"
kubernetes_version = "1.28"
vswitch_ids = ["vsw-xxx1", "vsw-xxx2"]
worker_nodes {
instance_type = "ecs.g6.large"
count = 3
system_disk_category = "cloud_efficiency"
system_disk_size = 40
}
pod_cidr = "172.20.0.0/16"
service_cidr = "172.21.0.0/20"
enable_ssh = false
install_cloud_monitor = true
sls_project_name = "my-sls-project"
}执行以下命令完成集群创建:
terraform init
terraform applyTerraform还支持导入和管理已存在的ACK集群及节点池等存量资源,实现基础设施的完整生命周期管理。
三、节点池管理与弹性伸缩
节点池是ACK中管理一组同质Worker节点的逻辑分组。通过节点池,用户可以统一管理节点的规格、镜像、安全组、标签和污点等属性。
3.1 节点池的创建与配置
在ACK托管集群中,节点池支持多种配置:
- 实例规格:根据业务负载选择适当的ECS实例类型,如通用型、计算型或内存型。
- 系统盘与数据盘:可配置云盘类型(高效云盘、SSD云盘、ESSD云盘)及大小。
- 节点标签与污点:用于实现Pod的调度策略,如将特定工作负载调度到特定节点池。
- 节点数量:可设置初始节点数及最大/最小节点数限制。
3.2 集群弹性伸缩
ACK支持两种弹性伸缩方式:
- 节点池自动伸缩(Cluster Autoscaler):当集群资源不足时,自动增加节点;当节点利用率过低时,自动缩容节点。需在节点池配置中开启自动伸缩并设置伸缩范围。
- Pod水平自动伸缩(HPA):基于CPU利用率、内存利用率或自定义指标(如QPS)自动调整Pod副本数。
ACK还提供了智能托管模式(Auto Mode),开启后仅需进行简单的网络规划配置即可一键建立符合最佳实践的Kubernetes集群,集群会自动创建智能托管节点池,节点生命周期由ACK托管和运营。
四、连接集群与kubectl配置
集群创建完成后,需要配置kubectl工具来连接和管理集群。
4.1 获取集群访问凭证
在ACK控制台的集群详情页面,点击"连接信息",可获取集群的KubeConfig文件内容。该文件包含了访问集群API Server所需的认证信息。
4.2 配置kubectl
将获取的KubeConfig内容保存到本地 ~/.kube/config 文件中,或通过环境变量指定:
export KUBECONFIG=/path/to/my-kubeconfig
kubectl get nodes验证连接成功后,即可通过kubectl命令管理集群资源。
五、应用部署与服务暴露
5.1 核心工作负载:Deployment与StatefulSet
生产环境中,应用通常以Deployment或StatefulSet的形式部署。
Deployment是最常用的工作负载资源,提供副本管理、自动恢复和滚动升级能力。以下是一个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.21
ports:
- containerPort: 80
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5在生产环境中,务必为每个容器设置资源请求(requests)和限制(limits),避免因资源抢占导致节点雪崩。同时必须配置存活探针(livenessProbe)和就绪探针(readinessProbe),以确保应用的健康运行和流量切换的平滑性。
StatefulSet用于有状态应用,如数据库、消息队列等,提供稳定的网络标识和持久化存储。
5.2 服务发现:Service
Service解决了Pod IP动态变化带来的服务发现问题。ACK支持以下Service类型:
- ClusterIP:集群内部访问,默认类型。
- NodePort:通过节点端口对外暴露服务。
- LoadBalancer:自动创建云产品负载均衡(SLB)实例,对外提供公网或内网访问。
Service YAML示例:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: ClusterIP
selector:
app: nginx
ports:
- port: 80
targetPort: 805.3 七层负载均衡:ALB Ingress
Ingress作为集群的统一流量入口,提供七层路由能力。ACK支持基于应用型负载均衡(ALB)的Ingress实现。通过ALB Ingress,可以实现HTTPS卸载、基于域名的路由、灰度发布等高级功能。
ALB Ingress配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: "alb"
alb.ingress.kubernetes.io/scheme: "internet"
spec:
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80六、镜像管理:对接容器镜像服务ACR
容器镜像是应用部署的核心资产。阿里云容器镜像服务(ACR)提供个人版和企业版,分别面向个人开发者和企业客户。
6.1 镜像仓库配置
在ACK中部署应用时,需要指定镜像地址。对于私有镜像仓库,需要配置镜像拉取凭证(imagePullSecrets)。
6.2 免密拉取组件
ACK提供免密组件,支持同账号或跨账号从ACR企业版实例拉取镜像。免密组件通过将ACR认证信息自动注入到Pod中,避免了手动管理用户名密码Secret的繁琐和安全风险。跨账号拉取镜像时,需要确保网络互通(VPC对等连接或CEN)并进行跨账号授权。
七、存储管理:基于CSI的持久化存储
ACK基于容器存储接口(CSI)实现了云盘、NAS、OSS等存储资源的动态与静态存储卷管理。
7.1 云盘动态存储卷
云盘适用于对磁盘I/O要求高的应用,且没有共享数据需求的场景,如MySQL、Redis等数据存储服务。以下是通过StorageClass动态创建云盘存储卷的示例:
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
fsType: ext4
reclaimPolicy: Delete在Pod中通过PVC(PersistentVolumeClaim)引用:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-ssd
resources:
requests:
storage: 20Gi7.2 NAS静态存储卷
NAS存储卷提供数据持久化(Pod重建后数据不丢失)和数据共享(多Pod同时读写)能力。ACK支持将已有的NAS文件系统以静态存储卷的方式挂载给工作负载使用。
PV(PersistentVolume)配置示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nas-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: "nas-xxx"
volumeAttributes:
server: "nas-xxx.cn-hangzhou.extreme.nas.aliyuncs.com"
path: "/k8s"
vers: "3"
options: "noresvport,nolock"八、可观测性体系构建
8.1 日志采集:Logtail与SLS集成
ACK与阿里云日志服务SLS深度集成。在ACK集群中部署日志采集组件(Logtail)后,组件以DaemonSet形式运行在每个节点上,自动发现并采集容器日志,安全传输至SLS进行存储和分析。整个过程无需修改应用代码。
日志采集配置可通过控制台或CRD(AliyunLogConfig)进行定义,支持采集标准输出、文件日志等多种来源,并支持日志解析、过滤等预处理能力。
8.2 监控告警:托管Prometheus
ACK提供托管版Prometheus监控服务,与集群无缝集成。接入ACK后,云监控会自动创建对应的Prometheus实例用于存储可观测数据。用户可以通过PromQL查询集群、节点、Pod等多维度监控指标,并配置告警规则。
典型监控指标包括:
- 节点CPU、内存、磁盘、网络利用率
- Pod CPU、内存使用情况
- API Server请求延迟与错误率
- 应用自定义业务指标
九、安全管理:RAM授权与RBAC
ACK的授权体系包含两个层面:基础资源层的RAM授权和集群层面的RBAC授权。
9.1 RAM授权
RAM授权属于云资源维度的授权,通过RAM系统策略或自定义策略,控制用户对ACK产品及其依赖的阿里云云产品OpenAPI的操作权限。例如,可以限制某个用户对某个具体集群的操作权限。
常见的RAM授权策略包括:
- AliyunCSFullAccess:容器服务完全管理权限
- AliyunCSReadOnlyAccess:容器服务只读权限
- 自定义策略:精细化控制特定集群、特定资源的操作
9.2 RBAC授权
集群层面的RBAC授权控制用户在集群内部对Kubernetes资源的操作权限。ACK托管集群支持通过ack-ram-authenticator组件,基于RAM实现API Server的Webhook认证。通过RBAC Role和ClusterRole,可以定义不同用户或服务账户对命名空间级别或集群级别资源的访问权限。
RBAC配置示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-pods
subjects:
- kind: User
name: "user@example.com"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: pod-reader
apiGroup: rbac.authorization.k8s.io9.3 Worker节点RAM角色权限收敛
为了提升ACK托管集群节点的安全性,建议基于最小化原则手动调整和优化已分配给Worker节点的RAM角色所具有的权限。当前ACK组件已支持基于托管服务角色的Token认证方式,建议升级集群组件并分析审计日志,移除Worker RAM角色中不必要的权限,以降低潜在安全事件的影响范围。
十、集群运维与生命周期管理
10.1 集群自动升级
ACK托管集群支持配置自动升级策略。开启自动升级后,可在设定的维护窗口期内自动升级集群控制面和节点池,有效降低版本维护负担。建议生产环境开启自动升级,同时设置合理的维护窗口(如业务低峰期),确保升级过程对业务影响最小化。
10.2 滚动更新策略
在应用部署时,通过配置Deployment的更新策略实现零停机发布:
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%- maxUnavailable:滚动更新过程中允许不可用的Pod最大数量或百分比。
- maxSurge:滚动更新过程中允许超出期望副本数的最大Pod数量或百分比。
10.3 资源配额管理
通过ResourceQuota限制命名空间级别的资源使用总量:
apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: default
spec:
hard:
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
persistentvolumeclaims: "5"
services.nodeports: "2"通过LimitRange设置命名空间内Pod和容器的默认资源请求与限制:
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
namespace: default
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 250m
memory: 256Mi
type: Container十一、成本优化实践
11.1 合理选择实例规格
根据工作负载特征选择合适的ECS实例规格:
- 通用型实例(如g7系列):适用于大多数通用业务
- 计算型实例(如c7系列):适用于CPU密集型应用
- 内存型实例(如r7系列):适用于内存密集型应用
- GPU实例(如gn7系列):适用于AI训练和推理
11.2 利用弹性伸缩降低成本
通过节点池自动伸缩和HPA,在业务低谷期自动缩容,高峰期自动扩容,避免资源闲置浪费。
11.3 使用抢占式实例
对于容错性强、可中断的工作负载(如批处理任务、大数据计算),可以使用抢占式实例(Spot Instance)大幅降低成本。
11.4 合理配置存储
根据数据访问频率和性能要求选择合适的云盘类型:
- ESSD云盘:高性能、低延迟,适合数据库等核心应用
- SSD云盘:均衡性能与成本
- 高效云盘:低成本,适合备份、日志等冷数据存储
十二、生产环境最佳实践总结
- 资源限制:所有容器必须设置requests和limits。
- 健康检查:必须配置livenessProbe和readinessProbe。
- 高可用:集群部署至少两个可用区,关键应用多副本部署。
- 网络规划:创建前完成网络插件选型,合理规划Pod CIDR和Service CIDR。
- 安全加固:遵循最小权限原则配置RAM和RBAC,定期审计权限。
- 可观测性:全面配置日志采集、监控告警和链路追踪。
- 备份恢复:定期备份etcd和关键应用数据。
- 灰度发布:利用Ingress和Deployment的滚动更新策略实现灰度发布和蓝绿部署。
常见问题问答
问1:ACK托管集群Pro版和基础版的主要区别是什么?
答:Pro版提供99.95%的SLA保障,单集群支持最大5000个Worker节点,适用于企业生产环境;基础版仅供个人学习测试,单集群仅支持10个Worker节点。Pro版收取集群管理费用,基础版免费。
问2:创建集群时如何选择网络插件Terway还是Flannel?
答:Terway是阿里云自研的高性能网络插件,基于ENI提供Pod网络,支持eBPF加速和NetworkPolicy,适合对性能和安全性要求较高的生产环境。Flannel配置简单但性能相对较弱。网络插件创建后不可更改,需提前规划。
问3:如何在ACK中实现应用的高可用部署?
答:建议从以下方面实现高可用:集群选择至少两个可用区部署;应用采用多副本部署(replicas≥2);配置PodDisruptionBudget保障最小可用副本数;使用云盘等持久化存储保证数据不丢失;配置健康检查实现自动恢复;开启集群自动升级保持版本最新。
问4:ACK如何与容器镜像服务ACR对接?
答:ACK支持通过免密组件自动拉取ACR企业版镜像,无需手动管理镜像拉取凭证。对于同账号场景,安装免密组件后自动完成认证;跨账号场景需配置网络互通和跨账号授权。个人版镜像需通过imagePullSecrets配置认证信息。
问5:ACK的日志和监控如何配置?
答:ACK通过Logtail组件与日志服务SLS集成,以DaemonSet形式采集容器日志并传输至SLS。监控方面,ACK提供托管Prometheus服务,自动采集集群、节点、Pod等多维度指标。两者均在集群创建时可选择安装,或后续通过组件管理安装。
问6:如何降低ACK集群的使用成本?
答:主要从以下方面优化成本:合理选择ECS实例规格,避免资源过度配置;开启节点池自动伸缩和HPA,按需使用资源;对容错性高的任务使用抢占式实例;根据数据访问频率选择适当的云盘类型;定期分析集群资源利用率,清理闲置资源。




