阿里云Kubernetes集群托管实战指南:从创建到生产运维全流程
一、ACK集群类型解析与选型决策
在正式对接阿里云Kubernetes托管服务之前,得先把ACK集群的几种类型和适用场景理清楚。阿里云容器服务Kubernetes版(ACK)主要提供两种集群形态:托管集群和专有集群。
托管集群的控制面由阿里云完全托管,用户只需要负责Worker节点的创建和运维。托管集群又细分为Pro版和基础版。Pro版面向企业生产与测试环境,提供99.95%的区域级SLA保障,单集群默认支持最大5000个Worker节点,还能申请提高配额;基础版仅供个人学习与测试,单账号最多创建2个集群,每个集群只支持10个Worker节点,且不支持提高配额。另一个关键区别是,Pro版会收取集群管理费用,而基础版不收。至于专有集群,控制面需要用户自己创建和管理。根据官方公告,ACK专有集群从2024年8月21日起已停止新建(云盒场景除外),官方推荐在生产环境中使用托管集群Pro版。
从架构上看,托管集群的管控面由阿里云统一管理,包括kube-apiserver、kube-controller-manager、kube-scheduler和etcd这些核心组件。每个托管集群的管控面至少包含2个kube-apiserver实例和3个etcd实例,并且部署在不同的可用区,实现可用区级别的高可用。这种设计极大减轻了运维负担,团队可以把精力更多地放在业务应用的开发和部署上。对于大多数企业的生产环境,托管集群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集群的强大工具。它支持导入和管理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:支持配置有效期(30分钟~3天),过期自动失效,能降低凭证泄露风险。适用于日常运维、故障排查、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: 20Gi
5.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授权,用户可以获取容器服务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=3
8.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)收费。基础版不收取集群管理费用,但对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专有集群的主要区别是什么?
答:托管集群的控制面(包括kube-apiserver、etcd等核心组件)完全由阿里云托管,用户只需负责Worker节点。专有集群的控制面需要用户自行创建并运维。官方已停止新建专有集群(云盒场景除外),推荐使用托管集群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节点;利用同地域内网通信免流量费用;开启集群自动升级功能降低版本管理成本。
