阿里云Kubernetes集群托管完全对接指南:从集群创建到生产级运维全解析
一、ACK集群类型解析与选型决策
在开始对接使用阿里云Kubernetes集群托管服务之前,首先需要深入理解ACK提供的不同集群类型及其适用场景。阿里云容器服务Kubernetes版(ACK)主要提供两种集群形态:ACK托管集群和ACK专有集群。
ACK托管集群的控制面完全由阿里云托管,用户只需负责Worker节点的创建与运维。托管集群又细分为Pro版和基础版。Pro版适用于企业生产与测试环境,提供99.95%的区域级SLA保障,单集群默认支持最大5000个Worker节点并可申请提高配额;基础版则仅供个人学习与测试,单账号最多创建2个集群,单集群仅支持10个Worker节点且不支持提高配额。两者的另一个重要区别在于,Pro版收取集群管理费用,而基础版不收取集群管理费用。ACK专有集群的控制面需要用户自行创建并运维。根据官方公告,ACK专有集群已于2024年8月21日起停止新建(云盒场景除外),官方推荐在生产环境中使用ACK托管集群Pro版。
从架构角度看,ACK托管集群的管控面由阿里云统一管理,包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd等核心组件。每一个托管集群的管控面包含至少2个kube-apiserver实例和3个etcd实例,并部署在不同的可用区以提供可用区级别的高可用性。这种设计显著降低了用户的运维负担,让团队可以更专注于业务应用的开发和部署。对于大多数企业的生产环境,ACK托管集群Pro版是最佳选择。它提供了可赔付的SLA保障,具备etcd高频冷热备机制和异地容灾能力,同时支持从基础版或专有集群热迁移至Pro版。在成本方面,Pro版虽然收取集群管理费用,但相比自行维护Master节点的专有集群,整体TCO通常更低,尤其适合希望减少Kubernetes运维投入、聚焦业务创新的团队。
需要先登录阿里云控制台,点击:阿里云控制台
二、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是阿里云自研的CNI插件。Flannel是社区开源的网络插件,在ACK中采用了阿里云VPC专用网络模式,报文经过VPC路由表直接转发。简单来说,如果对网络安全、IPAM管理(例如固定Pod IP、NetworkPolicy等)等方面有强诉求,建议使用Terway;如果集群规模较小(例如小于500个节点),且对网络无特殊需求,可使用Flannel。需要特别注意的是,创建集群后无法更改CNI网络插件(例如从Flannel切换至Terway)。因此,在网络插件选型时需要慎重决策。
在网络地址规划方面,需要根据业务场景和集群规模规划VPC网段(VPC自身网段和vSwitch网段)和Kubernetes网段(Pod地址段和Service地址段),定义整个集群的IP地址范围以及Pod和节点可用的IP地址数量。
2.3 使用Terraform创建ACK托管集群
对于基础设施即代码(IaC)的实践者,Terraform是管理ACK集群的强大工具。Terraform支持导入和管理ACK的存量资源,例如集群、节点池等。以下是通过Terraform创建ACK托管集群的核心配置示例:
# provider.tf
provider "alicloud" {
region = "cn-hangzhou"
}
# 创建VPC
resource "alicloud_vpc" "vpc" {
vpc_name = "ack-vpc"
cidr_block = "10.0.0.0/8"
}
# 创建交换机
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "10.1.0.0/16"
zone_id = "cn-hangzhou-g"
}
# 创建ACK托管集群
resource "alicloud_cs_managed_kubernetes" "cluster" {
name = "my-ack-cluster"
cluster_spec = "ack.pro.small"
kubernetes_version = "1.30"
vswitch_ids = [alicloud_vswitch.vsw.id]
new_nat_gateway = true
worker_instance_types = ["ecs.g6.xlarge"]
worker_numbers = [3]
# 启用日志服务
sls_project_name = "my-sls-project"
# 启用监控服务
enable_kubernetes_monitoring = true
}
output "cluster_id" {
value = alicloud_cs_managed_kubernetes.cluster.id
}
output "kubeconfig" {
value = alicloud_cs_managed_kubernetes.cluster.kube_config
sensitive = true
}三、集群连接与kubectl配置
集群创建完成后,需配置kubectl工具进行连接操作。在ACK集群列表页点击目标集群的"连接信息",获取集群访问凭证即kubeconfig文件。KubeConfig包含访问集群所需的认证信息。
3.1 KubeConfig类型选择
根据安全需求和使用场景,ACK提供两种类型的KubeConfig:
- 临时KubeConfig:支持配置KubeConfig有效期(30分钟~3天),过期后自动失效,以降低KubeConfig泄露的安全风险。适用于日常运维、故障排查、CI/CD流水线等无需长期连接API Server的场景。
- 长期KubeConfig:默认有效期为3年,适用于无法频繁更新KubeConfig的自动化系统或长期监控服务。
根据访问集群的方式,又可分为内网访问和公网访问:
- 内网访问:获取内网访问的KubeConfig,此时kubectl客户端机器必须与集群位于同一VPC。通过阿里云内网连接时,延迟更低,更安全。
- 公网访问:获取公网访问的KubeConfig,通过公网中的任意机器作为客户端来连接集群。依赖EIP连接API Server,适用于本地开发或远程运维。
3.2 配置kubectl并连接集群
在控制台获取KubeConfig后,kubectl可依据该文件连接并管理集群。具体操作步骤如下:
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群信息页面,单击连接信息页签,选择临时或长期KubeConfig。对于临时KubeConfig,需合理设置其有效期。
- 选择公网访问或内网访问页签,单击复制,将复制的KubeConfig内容粘贴至客户端的$HOME/.kube/config文件中,保存并退出。
配置完成后,即可通过kubectl命令行工具管理集群资源。验证连接是否成功:
kubectl cluster-info
kubectl get nodes四、节点池管理与弹性伸缩
ACK提供了节点池功能对节点进行分组管理。节点池是具有相同属性(例如实例规格、操作系统、标签和污点等)的一组节点的逻辑集合。一个集群中可以创建多个不同配置和类型的节点池。
4.1 节点池类型
ACK提供普通节点池和托管节点池两种类型。托管节点池为您提供管理一组同质节点的能力,同一个节点池的节点具有相同的配置,例如规格、标签等。在集群和节点池运行状态正常的情况下,您可以在节点池列表的操作列,单击开启托管或关闭托管,转换节点池类型。
4.2 弹性伸缩方案
ACK支持自动扩缩容,您可以选择节点自动伸缩或节点即时弹性两种弹性方案,自动扩缩节点资源以进行调度容量的补充。节点即时弹性相较于节点自动伸缩有着更快的弹性速度、更高的交付效率和更低的使用门槛。ACK GOATScaler是ACK为节点即时弹性场景提供的下一代节点伸缩组件,重点提升扩容成功率与弹性策略可定制能力。
4.3 虚拟节点与ECI
如果您的业务有不易提前预测的瞬时波峰,尽管ACK支持弹性伸缩,但ECS节点池扩容时,ECS实例的创建和启动本身会有一定的额外耗时。借助虚拟节点,您可以直接调度Pod到阿里云弹性容器实例ECI上运行,降低节点运维操作负担,同时避免产生闲置节点资源,降低成本。虚拟节点使用ack-virtual-node组件封装计算资源,让您可以在不管理底层基础设施的情况下部署工作负载。当Pod被调度到虚拟节点时,ECI会为这个Pod提供一个完全托管的Serverless容器,不消耗ACK的Worker节点资源。
五、集群存储管理
ACK通过Container Storage Interface(CSI)插件支持存储卷的挂载和管理。CSI插件支持在ACK集群中挂载静态和动态配置的存储卷,为应用数据提供持久化存储。
5.1 云盘存储卷
云盘(云服务器ECS的块存储)适用于需要高性能、低延迟的持久化存储场景。ACK支持通过控制台使用动态云盘卷。使用动态云盘卷时,需要先创建StorageClass,然后通过PersistentVolumeClaim(PVC)声明存储需求。
以下是通过YAML创建StorageClass和PVC的示例:
# storageclass.yaml
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
encrypted: "true"
reclaimPolicy: Delete
volumeBindingMode: Immediate
---
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-ssd
resources:
requests:
storage: 20Gi5.2 NAS存储卷
NAS存储卷提供数据持久化(Pod重建后数据不丢失)和数据共享(多Pod同时读写)能力。ACK支持将已有的NAS文件系统,以静态存储卷的方式挂载给工作负载使用。NAS存储卷特别适合需要多Pod共享数据的场景,例如日志收集、共享配置文件等。
以下是使用NAS静态存储卷的示例:
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nas-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: nas-pv
volumeAttributes:
server: "nas-xxxxxx.cn-hangzhou.nas.aliyuncs.com"
path: "/k8s/data"
vers: "3"
options: "noresvport"
---
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
volumeName: nas-pv六、可观测性体系建设
ACK提供了完整的可观测性解决方案,涵盖日志采集、监控告警和事件分析三个维度。alicloud-monitor-controller是ACK提供的对接阿里云可观测服务(阿里云Prometheus、日志服务SLS、云监控服务等)的系统组件,负责同步可观测配置(如报警规则配置)以及配置的生命周期管理。
6.1 日志采集与SLS集成
ACK与日志服务SLS深度集成,用于采集容器文本日志。安装日志采集组件后,它会以DaemonSet的形式在每个节点上运行一个Agent,将该节点上所有容器的日志转发到SLS进行查询和分析。集群事件监控功能默认上报集群事件至SLS日志服务,SLS日志服务提供事件数据的存储、分析能力,默认90天内的ACK集群事件数据免费。
6.2 Prometheus监控告警
ACK的可观测能力使用三种阿里云服务:托管Prometheus服务(用于指标监控)、应用实时监控服务ARMS(用于链路追踪和应用性能监控)和日志服务SLS(用于日志)。要使用托管Prometheus服务采集监控数据,需要在创建集群时启用集群监控功能。
报警功能的数据来源于日志服务SLS、可观测监控Prometheus版和云监控,触发报警后发送的短信、电话等通知会产生额外费用。ACK支持将钉钉、企业微信和飞书作为报警通知方式。
七、安全管理体系
ACK采用双层授权模型:RAM授权和RBAC授权。RAM授权决定了谁能"进入"集群的大门。RAM授权属于云资源维度的授权,通过RAM授权,用户可以获取容器服务ACK产品及其所依赖阿里云云产品的OpenAPI操作权限。RBAC授权则控制用户在集群内部对Kubernetes资源的操作权限。
7.1 RAM授权
RAM授权基于RAM系统策略或自定义策略的授权,属于云资源维度的授权。通过RAM授权,用户可以获取容器服务ACK产品及其所依赖阿里云云产品的OpenAPI操作权限,对集群进行运维操作。
7.2 RBAC授权
默认情况下,RAM用户或角色无法为其他账号授予RBAC权限。为便于权限管理,ACK支持指定某个RAM用户或角色为权限管理员,使其能够为其他用户授予RBAC权限。授权最佳实践中,ACK的授权体系包含对基础资源层的RAM授权和对ACK集群层的RBAC授权,不同用户角色在这两个层面都具有不同的权限要求。
八、应用部署与运维管理
8.1 Helm应用部署
ACK的应用市场提供了丰富的Helm Chart,用于部署和管理Kubernetes应用。应用目录中有简介、安装步骤、参数配置项、注意事项等信息。用户可以通过Helm工具部署和管理应用目录中的软件。
通过Helm CLI部署应用的示例:
# 添加阿里云应用市场仓库
helm repo add aliyun https://apphub.aliyuncs.com
# 安装Nginx Ingress Controller
helm install nginx-ingress aliyun/nginx-ingress \
--set controller.service.type=LoadBalancer \
--set controller.scope.enabled=true
# 安装自定义应用
helm install my-app ./my-chart \
--set image.repository=registry.cn-hangzhou.aliyuncs.com/myapp/app \
--set image.tag=v1.0.0 \
--set replicas=38.2 集群自动升级
启用ACK托管集群的自动升级功能后,您可以使集群保持周期性的自动升级,降低版本运维压力。配置自动升级策略后,系统会提前生成集群升级计划,在维护窗口期内触发前置检查并升级集群的控制面,让您更专注于容器应用开发。ACK会检查整体编排策略并分批调度升级,而非立即执行。
ACK Auto Mode模式提供适用于企业生产环境的自动化、智能化的集群运维功能。开启后,仅需简单的网络规划配置即可创建符合最佳实践的Kubernetes集群,并实现集群自动化运维能力的拓展。在集群层面,集群控制面与关键系统组件(如CoreDNS、CSI等)均实现全托管,并默认开启Kubernetes版本自动升级。在节点层面,默认创建一个开启了Auto Mode模式的节点池,自动推荐最优实例规格,无需手动配置。
8.3 GitOps持续交付
ACK One GitOps,由托管的Argo CD驱动,让您能够构建完整的CI/CD流水线。每次代码提交都会自动触发镜像构建、多集群部署、灰度发布和回滚——全部由Git作为单一事实来源驱动。
基于ACK One GitOps和ACR构建CI/CD流水线的典型流程:
- 代码提交到Git仓库。
- 自动触发镜像构建并推送至ACR镜像仓库。
- GitOps自动同步相应镜像变化至ACK集群。
- 按环境(开发、预发、生产)依次部署最新镜像。
九、成本优化实践
9.1 节点规格与计费模式选择
ACK托管集群Pro版收取集群管理费用(按集群数量计费),同时对Worker节点及部分组件使用的其他阿里云产品(例如日志服务SLS)收费。ACK托管集群基础版不收取集群管理费用,但对Worker节点及部分组件使用的其他阿里云产品收费。在节点选型方面,应根据业务负载特征选择合适的ECS实例规格,避免资源浪费。
9.2 使用Spot实例降低计算成本
对于可容忍中断的批处理任务、测试环境等场景,可以配置节点池使用Spot实例(抢占式实例),大幅降低计算成本。Spot实例的价格随市场供需波动,通常为按量付费实例的10%-30%。
9.3 虚拟节点与ECI的按需付费
借助虚拟节点将Pod调度到ECI上运行,可以避免为应对瞬时峰值而预留大量ECS节点。ECI按Pod运行时长计费,适合波动性大的批处理任务或突发流量场景。
9.4 利用内网流量免费用
ACK集群与同一地域的其他阿里云产品(如OSS、RDS等)之间通过内网通信时,不收取流量费用。在架构设计时应尽量将相关云资源部署在同一地域,利用内网通信降低网络成本。
十、生产环境最佳实践总结
综合以上各章节的讨论,以下是从测试环境到生产环境落地的核心实践要点:
- 集群选型:生产环境务必选择ACK托管集群Pro版,获得SLA保障和企业级特性。
- 网络规划:根据安全需求和集群规模选择Terway或Flannel,网络插件创建后不可更改。建议配置多可用区交换机保障高可用。
- 节点池管理:使用托管节点池降低运维负担。根据业务特征配置合理的弹性伸缩策略。
- 存储方案:根据性能需求选择云盘(高IOPS)或NAS(共享存储)。
- 可观测性:启用日志服务SLS和托管Prometheus监控,构建完整的可观测体系。
- 安全管理:遵循RAM授权+RBAC授权的双层权限模型,遵循最小权限原则。
- 集群升级:开启自动升级功能,在维护窗口内完成版本更新。
- 持续交付:采用ACK One GitOps实现基于Git的声明式应用部署。
通过以上实践,企业可以充分发挥阿里云ACK托管集群的优势,将精力聚焦于业务应用的开发与创新,而非底层基础设施的运维管理。
常见问题解答
问1:ACK托管集群和ACK专有集群的主要区别是什么?
答:ACK托管集群的控制面(包括kube-apiserver、etcd等核心组件)完全由阿里云托管,用户只需负责Worker节点。ACK专有集群的控制面需要用户自行创建并运维。官方已停止新建ACK专有集群(云盒场景除外),推荐使用ACK托管集群Pro版。
问2:创建ACK集群时,Terway和Flannel应该如何选择?
答:如果对网络安全、固定Pod IP、NetworkPolicy等方面有强诉求,建议使用Terway。如果集群规模较小(例如小于500个节点),且对网络无特殊需求,可使用Flannel。网络插件在集群创建后无法更改,需慎重决策。
问3:如何安全地管理集群的KubeConfig凭证?
答:ACK提供临时KubeConfig(有效期30分钟至3天)和长期KubeConfig(默认3年)两种类型。日常运维和CI/CD场景建议使用临时KubeConfig,过期后自动失效,降低泄露风险。同时应定期轮换KubeConfig并遵循最小化权限策略。
问4:ACK集群如何实现弹性伸缩?
答:ACK提供节点自动伸缩和节点即时弹性两种方案。节点即时弹性速度更快、效率更高。对于瞬时波峰,还可以借助虚拟节点将Pod调度到ECI上运行,无需购买和管理ECS节点。
问5:ACK的授权体系是怎样的?
答:ACK采用双层授权模型。RAM授权控制用户能否操作ACK的云资源API。RBAC授权控制用户在集群内部对Kubernetes资源的操作权限。两者结合实现精细化的权限管理。
问6:如何降低ACK集群的运维成本?
答:可以从以下几个方面优化:选择ACK托管集群Pro版降低Master节点运维投入;使用Spot实例运行可容忍中断的任务;借助虚拟节点和ECI应对突发流量,避免预留过多ECS节点;利用同地域内网通信免流量费用;开启集群自动升级功能降低版本管理成本。



