阿里云容器计算服务ACS深度对接与实践指南
一、初识阿里云容器计算服务ACS
阿里云容器计算服务(Alibaba Cloud Container Compute Service,简称ACS)是阿里云推出的新一代Serverless容器计算平台,以Kubernetes为使用界面提供弹性、免运维的容器算力资源。从产品演进来看,ACS是ACK Serverless集群(原ASK)的全面升级版本,在成本效益、易用性和弹性能力上均实现了显著提升。
相比传统的ACK Pro集群,ACS完全免去了集群控制面的运维负担:您无需关心节点规格选择、节点创建和节点管理,只需要按需申请Pod资源,ACS会自动分配算力,并按秒级计费。ACS面向不同业务场景,定义了高性价比的Serverless容器算力类型和算力质量,便于您按需申请使用、秒级按量付费,无需关注底层节点及集群的运维管理。
ACS的核心价值在于将Kubernetes管控和容器算力进行分层设计,为Kubernetes提供一种层次化的解决方案:ACS的计算资源层负责底层Pod容器资源的调度和分配,而Kubernetes则在此基础上承载业务负载管理,例如管理Deployment、Service、StatefulSet、CronJob等。这种架构设计使得ACS既能提供完整的Kubernetes生态兼容性,又能让用户彻底摆脱节点运维的烦恼。
二、开通服务与授权前置
首次使用ACS时,需要完成服务开通和授权两个关键步骤。登录容器计算服务控制台,点击"前往开通",按照页面提示完成产品开通。开通完成后,返回控制台并刷新页面,点击"前往授权",为ACS授权访问其他云资源的权限。完成以上操作后,刷新控制台即可正常使用ACS服务。
对于RAM用户,还需要确保已经授予了与ACS相关的系统策略,例如AliyunCSFullAccess,以便拥有完整的集群管理权限。此外,ACS还需要特定的服务角色来访问您的云资源,例如AliyunCCManagedNetworkRole用于访问网络相关云产品资源。若该角色未被正确授予,容器计算服务将无法正常调用ECS、OSS、NAS、CPFS、SLB等相关服务。
需要先登录阿里云控制台,点击:阿里云控制台
三、网络架构设计与集群创建
3.1 网络规划核心要点
在创建ACS集群之前,网络规划至关重要。ACS集群的网络架构分为三个层次:
- VPC:作为最外层的网络边界,定义了整体IP地址空间
- vSwitch(交换机):作为可用区级子网,Pod的IP地址从Pod专用vSwitch中分配
- Service CIDR:专门为Kubernetes Service预留的独立IP范围,仅在集群内部生效
规划时必须遵守三个核心约束:
- vSwitch的CIDR必须是VPC CIDR的子集
- Service CIDR不能与任何vSwitch CIDR重叠
- Service CIDR在集群创建后不可修改
创建ACS集群时,可以选择自动创建VPC或使用已有VPC。配置SNAT选项决定了VPC内的实例能否访问公网,如果Pod需要从公网拉取容器镜像,则需要配置NAT网关。为了降低成本,更好的做法是将容器镜像上传到与ACS集群同一地域的阿里云容器镜像服务(ACR)中,然后通过内网VPC地址拉取镜像,这样可以避免产生公网流量费用。在可用区选择上,建议选择多个可用区以确保高可用,ACS会在每个选中的可用区下自动创建一个对应的虚拟节点。
3.2 通过控制台创建集群
登录容器计算服务控制台,在左侧导航栏选择"集群列表",然后单击页面左上角的"创建集群"。在创建集群页面,需要配置以下关键参数:
- 集群名称:填写集群的名称,例如"ACS-Demo"
- 地域:选择集群所在的地域,例如"华北2(北京)"
- 专有网络:支持自动创建和使用已有VPC两种方式
- API Server访问配置:设置集群API Server是否可在公网访问,当需要从公网远程管理集群时,需要配置弹性公网IP(EIP)
- 服务发现:可选择开启CoreDNS托管以提供集群内服务发现能力
集群的创建时间一般约为10分钟。创建完成后,在集群列表页面可以看到新创建的集群。
3.3 通过OpenAPI创建集群
除了控制台,ACS也支持通过OpenAPI进行集群创建,便于实现基础设施即代码(IaC)的自动化管理。以下是创建集群时网络配置的JSON格式示例:
{
\"cluster_type\": \"ManagedKubernetes\",
\"profile\": \"Serverless\",
\"name\": \"my-acs-cluster\",
\"region_id\": \"cn-hangzhou\",
\"zone_ids\": [\"cn-hangzhou-g\", \"cn-hangzhou-h\"],
\"vpc_id\": \"vpc-xxxxxx\",
\"vswitch_ids\": [\"vsw-xxxxxx1\", \"vsw-xxxxxx2\"],
\"service_cidr\": \"172.19.0.0/20\",
\"snat_entry\": true,
\"security_group_id\": \"sg-xxxxxx\"
}对于跨地域或多集群场景,不同集群的Service CIDR可以重叠,但需要注意Pod IP无法直接访问另一个集群的Service,只有Pod之间的流量可以跨越集群边界。
四、连接集群与kubectl使用
除了通过容器服务控制台来管理集群之外,您还可以通过Kubernetes命令行工具kubectl来管理集群以及应用。ACS集群创建时会为API Server自动创建一个CLB实例,作为集群API Server的连接端点。您可以进一步配置API Server的访问控制策略和公网访问能力。
获取集群访问凭证的步骤如下:在容器计算服务控制台的集群列表页面,单击目标集群名称,然后在左侧导航栏选择"集群信息",单击"连接信息"页签,即可获取kubeconfig文件内容。将kubeconfig保存到本地后,即可通过kubectl命令管理集群:
# 设置KUBECONFIG环境变量
export KUBECONFIG=/path/to/your/kubeconfig
# 验证集群连接
kubectl cluster-info
# 查看集群节点(ACS集群的节点是虚拟节点)
kubectl get nodes
# 查看所有命名空间
kubectl get namespaces此外,阿里云CloudShell是云命令行工具,可以在容器计算服务控制台上直接开启,无需任何安装或配置操作,即可在CloudShell中通过kubectl管理集群。
五、ACS Pod计算类型与规格配置
ACS提供了多种计算类型和相对应的算力质量,以满足多样化的业务需求。ACS Pod支持秒级伸缩,能够根据应用配置的CPU和内存资源量按需、按量付费,帮助您降低业务的计算成本,尤其适用于有明显波峰波谷的业务。
5.1 计算类型体系
ACS Pod的计算类型主要分为以下几类:
- 通用型:适用于大多数常规容器应用场景,平衡了计算、内存和网络资源
- 性能型:提供更高性能的CPU和更稳定的算力质量,适用于对性能要求较高的场景
- GPU型:支持异构计算资源,适用于AI推理、模型训练等GPU密集型任务
- HPN型:高性能网络型,适用于对网络吞吐和延迟有极致要求的场景
5.2 Pod规格声明示例
在创建Deployment时,可以通过Pod的resources字段精细化指定算力规格。以下是一个部署Nginx应用的完整YAML示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
cpu: \"0.5\"
memory: \"1Gi\"
limits:
cpu: \"1\"
memory: \"2Gi\"ACS会根据Pod声明的CPU和内存资源量,自动匹配合适的算力规格并分配相应的容器实例。
5.3 镜像拉取与加速
ACS整合了对DADI overlaybd加速镜像格式的支持,允许容器按需加载镜像文件,从而大幅缩短启动时间。使用ACR企业版制作加速镜像并在ACS中使用,可以显著提升大规模弹性场景下的Pod启动速度。
六、ACK集群通过Virtual Node接入ACS算力
ACS容器算力可以通过虚拟节点(Virtual Node)的形式接入到Kubernetes集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。ACS Virtual Node是基于社区开源项目Virtual Kubelet,扩展了对Provider的支持,并做了大量优化,实现了Kubernetes与容器计算服务ACS容器算力的无缝连接。
6.1 使用场景
ACS Virtual Node将应用Pod以Serverless容器方式运行,提供弹性、免容量规划、按需使用、按需计费的能力。在以下场景中可以显著提升应用部署的弹性效率并降低计算成本:
- Job类任务:批处理作业、数据处理任务
- CI/CD流水线:持续集成和持续部署的构建、测试任务
- 大数据计算:Spark等大数据处理框架
- 在线应用弹性:应对突发流量的Web应用和服务
6.2 接入前提条件
在ACK托管集群Pro版中接入ACS算力,需要满足以下前提条件:
- 已开通ACS服务
- 已创建ACK托管集群Pro版且版本为1.26及以上
- 在ACK集群中手动部署虚拟节点组件(ACK Virtual Node)
部署虚拟节点后,集群需要扩容时可以直接在虚拟节点下按需创建ACS Pod,而无需规划节点的计算容量。ACS Pod与集群中真实节点上的Pod之间网络互通。建议将部分长时间运行且流量弹性变化的业务负载调度至虚拟节点,这可以充分利用已有资源,缩短弹性扩容的时间,并减少扩容成本。当业务流量下降后,可以快速释放部署在虚拟节点上的Pod,从而降低使用成本。虚拟节点上的Pod均基于ACS运行在安全隔离的容器运行环境中,每个Pod对应一个ACS实例。
七、存储集成实践
ACS集群支持挂载多种阿里云存储服务,包括云盘(块存储)和NAS(文件存储)等,以满足有状态应用对持久化存储的需求。
7.1 存储挂载方式
在ACS集群中使用阿里云存储的标准方式是通过PV(PersistentVolume)和PVC(PersistentVolumeClaim):通过PV描述阿里云存储资源(如云盘、NAS文件系统等),通过PVC绑定PV,然后在Pod的Volume中声明要使用的PVC,实现云存储的挂载。
7.2 挂载云盘示例
以下是通过StorageClass动态创建云盘PV并挂载到Pod的完整示例:
# 1. 创建PVC(使用默认StorageClass自动创建云盘)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
# 2. 在Pod中挂载PVC
apiVersion: v1
kind: Pod
metadata:
name: disk-pod
spec:
containers:
- name: app
image: nginx:latest
volumeMounts:
- mountPath: /data
name: disk-volume
volumes:
- name: disk-volume
persistentVolumeClaim:
claimName: disk-pvc7.3 挂载NAS示例
NAS是一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统,适用于共享数据以及I/O要求较高的应用场景。挂载NAS时,需要确保NAS文件系统与ACS集群在同一VPC下。NAS不支持跨VPC挂载,即不支持跨地域使用。同一VPC下,NAS可以跨可用区挂载,但建议和ACS集群中Pod使用的可用区一致,性能相对更优。
# 使用PV/PVC挂载已有NAS文件系统
apiVersion: v1
kind: PersistentVolume
metadata:
name: nas-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
mountOptions:
- vers=3
- nolock
- proto=tcp
- port=2049
nfs:
server: \"nas-xxxxxx.cn-hangzhou.nas.aliyuncs.com\"
path: \"/\"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nas-pod
spec:
containers:
- name: app
image: nginx:latest
volumeMounts:
- mountPath: /mnt/nas
name: nas-volume
volumes:
- name: nas-volume
persistentVolumeClaim:
claimName: nas-pvc八、可观测性建设:日志、监控与事件
ACS集成了阿里云日志服务SLS,可在创建ACS集群时启用日志服务,快速采集集群内的容器日志,包括容器的标准输出以及容器内的文本文件。
8.1 通过Pod环境变量采集日志
在创建应用时,可以通过Pod环境变量配置日志采集。在控制台创建应用时,在日志配置区域,可以添加采集配置:
- 日志库(Logstore):配置Logstore名称,用于指定所采集日志存储于该Logstore。如果该Logstore不存在,ACS将会自动在集群关联的日志服务Project下创建相应的Logstore
- 容器内日志路径:指定希望采集的日志所在的路径,例如使用
/usr/local/tomcat/logs/catalina.*.log来采集Tomcat的文本日志。指定为stdout时,表示采集容器的标准输出和标准错误输出
也可以配置自定义Tag来为日志数据添加标记,例如版本号等信息。
8.2 通过AliyunLogConfig CRD采集日志
对于更精细化的日志采集控制,ACS支持通过AliyunLogConfig CRD方式采集应用日志。以下是一个采集特定应用标准输出日志的CRD示例:
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-stdout
spec:
project: k8s-log-c326bc86xxxx # 请修改为实际Project名称
logstore: test-stdout
logtailConfig:
inputType: plugin
configName: test-stdout
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true该配置支持通过K8sNamespaceRegex、K8sContainerRegex、K8sPodRegex和IncludeK8sLabel等多种方式进行Pod和容器的精细过滤。
8.3 事件中心与集群巡检
ACS集群提供了事件中心功能,用于查看集群中各类资源的事件信息。登录容器计算服务控制台,在集群列表页面单击目标集群名称,然后在左侧导航栏选择"运维管理 > 事件中心",即可根据级别、命名空间、名称等条件筛选目标资源的事件。
此外,ACS支持容器智能运维平台提供的集群巡检功能。您可以扫描集群运行状况,发现集群中存在的潜在风险,例如云资源配额余量、Kubernetes集群关键资源水位等,排查风险项并根据推荐的解决方案修复问题。集群巡检功能还提供一键故障诊断能力,包括Pod诊断、Service诊断、Ingress诊断,可以辅助您定位集群中出现的问题。
九、弹性伸缩与柔性变配
9.1 多种弹性伸缩策略
弹性伸缩是Kubernetes上被广泛采用的功能,典型的场景包含在线业务弹性、定时周期性负载变化等。ACS目前支持HPA、CronHPA、AHPA、KEDA和AVPA等多种弹性伸缩策略,通过感知应用负载或设定时间表,动态调整应用副本数或者应用的资源规格,以确保资源的高效利用和服务的稳定性。
- HPA(Horizontal Pod Autoscaler):基于CPU使用率、内存使用率或其他自定义指标实现Pod的自动水平扩缩。HPA能够在业务负载急剧飙升时快速扩容多个Pod副本来缓解压力,也可以在业务负载变小时根据实际需要缩容
- CronHPA:基于时间周期的定时弹性伸缩,适用于有明显周期性规律的业务场景
- AVPA(Advanced Vertical Pod Autoscaler):ACS提供的增强型垂直Pod自动伸缩组件,结合柔性变配能力实现Pod资源的动态调整
9.2 柔性变配技术
在生产环境中,Serverless Pod的资源配置通常是固定的,而在应对不同场景时对资源的消耗又可能是动态的。ACS Pod的柔性变配提供了10秒级的低延迟完成容器的CPU资源热变更的产品能力。
柔性变配的核心特性包括:
- 支持对通用型和性能型中算力质量为 ComputeQoS=default 的ACS Pod的CPU资源进行柔性变配
- 支持柔性变配的资源规格上限为16vCPU、16Gi内存
- 支持的变配范围是原始CPU规格的100%扩容,以及原始CPU规格的50%缩容
- 例如,一个2vCPU、4Gi的ACS Pod扩缩容范围是1vCPU、4Gi至4vCPU、4Gi
柔性变配目前支持变配过程不发生容器重启,适用于以下场景:
- 应用启动加速:启动期间分配更多CPU资源以加速编译或预加载,启动完成后降配至较低资源稳定运行
- 有状态应用原地变配:如Redis在负载增加时通过柔性变配进行纵向扩容
- 应对局部热点:在线应用存在部分大请求或长连接Session导致的局部热点压力时进行纵向扩容
需要注意的是,柔性变配后应用Pod将按照变配后的规格进行计费,变配过程中或变配失败时仍然按照变配前的规格进行计费。
十、安全与权限管理
10.1 RAM权限体系
阿里云访问控制(RAM)产品提供了两种类型的权限策略:系统策略和自定义策略。系统策略统一由阿里云创建,策略的版本更新由阿里云维护,用户只能使用不能修改。自定义策略由用户管理。
为RAM用户或RAM角色授予权限时,建议遵循最小授权原则,为允许访问云资源的身份授予恰好够用的权限。当RAM用户或RAM角色需要具有阿里云账号下所有集群的运维管理权限时,建议使用系统策略进行快捷授权。
10.2 自定义授权策略示例
以下是一个自定义授权策略的示例,授予RAM用户或RAM角色查询、扩容和删除集群的权限:
{
\"Version\": \"1\",
\"Statement\": [
{
\"Effect\": \"Allow\",
\"Action\": [
\"cs:DescribeClusters\",
\"cs:DescribeClusterDetail\",
\"cs:ScaleCluster\",
\"cs:DeleteCluster\"
],
\"Resource\": [
\"*\"
]
}
]
}10.3 安全最佳实践
ACS集群节点和Control Plane组件配置基于Kubernetes安全基线加固,且集群内所有系统组件均依据容器安全最佳实践进行了组件配置上的加固,同时保证系统组件镜像没有严重级别的CVE漏洞。建议用户在生产环境中遵循以下安全实践:
- 使用RAM子账号进行日常运维,避免使用主账号
- 为不同团队和角色分配最小权限的自定义策略
- 定期审查和更新权限策略
- 启用API Server的访问控制策略,限制公网访问来源IP
十一、CI/CD集成实践
ACS与多种CI/CD工具和平台具有良好的集成能力。您可以在ACS集群中使用GitLab Runner构建CI/CD环境。GitLab Runner是基于Go语言的开源应用,是运行来自GitLab的CI/CD作业的代理。
Argo Workflows提供了简单易用的接口和工具,您可以通过YAML定义工作流,快速设置和配置CI流水线。您可以在集群中实现任务的并行执行,动态扩展所需的计算资源,并提高CI流水线的运行效率。通过Serverless Argo Workflows集群,您可以轻松编排工作流,每个工作流步骤使用容器运行,可以在短时间内轻松运行大规模机器学习或数据处理的计算密集型作业,也可以快速运行CI/CD流水线。
云效是阿里云提供的一站式DevOps平台,涵盖软件研发全生命周期的工具链和服务管理,可以通过流水线Flow将应用部署到ACS集群中。在云效流水线中,可以结合阿里云容器镜像服务ACR实现从代码构建到镜像推送、再到ACS集群部署的完整自动化流程。
十二、最佳实践与成本优化建议
12.1 镜像管理最佳实践
建议将容器镜像上传到与ACS集群同一地域的ACR中,通过内网VPC地址拉取镜像,避免产生公网流量费用。使用ACR企业版的加速镜像功能,可以显著缩短Pod启动时间。
12.2 弹性策略选择建议
对于不同业务场景,建议选择合适的弹性策略组合:
- Web应用程序:推荐使用通用型实例
- CI/CD流水线:使用通用型实例
- 大数据计算框架:使用任务型实例
- 数据库、缓存:使用独享型实例
12.3 成本优化要点
- 充分利用ACS的秒级按量付费特性,在非高峰时段及时缩容
- 使用柔性变配技术,在启动阶段分配高规格资源加速启动,运行后降配至合理规格
- 合理规划存储,根据数据访问频率选择适当的存储类型
- 启用集群巡检功能,定期发现和修复资源浪费问题
常见问题问答
问1:ACS与传统ACK集群的主要区别是什么?
答:ACS是完全Serverless化的容器服务,用户无需管理任何集群节点和控制面。您只需声明Pod所需的资源规格,ACS自动分配算力并按秒计费。而传统ACK集群需要用户自行管理节点(ECS实例)的选型、创建、扩容和维护。
问2:如何在已有ACK集群中使用ACS的弹性算力?
答:可以通过部署ACS Virtual Node组件,将ACS算力以虚拟节点形式接入ACK集群。部署后,您可以通过NodeSelector或Toleration将Pod调度到虚拟节点上,即可使用ACS的Serverless容器算力,实现集群的弹性扩容。
问3:ACS Pod支持哪些存储类型?如何挂载?
答:ACS支持云盘(块存储)和NAS(文件存储)等多种存储类型。挂载方式遵循Kubernetes标准PV/PVC模型:先创建描述存储资源的PV,再创建PVC进行绑定,最后在Pod的Volume中声明使用该PVC。
问4:ACS的柔性变配是什么?有什么使用限制?
答:柔性变配是ACS提供的Pod CPU资源热变更能力,可以在Pod不重启的情况下动态调整CPU规格,响应时间在10秒级以内。目前仅支持通用型和性能型中ComputeQoS=default的Pod,规格上限为16vCPU/16Gi,变配范围为原始CPU规格的50%到100%。
问5:如何采集ACS Pod的日志?
答:ACS集成了阿里云日志服务SLS。您可以在创建集群时启用日志服务,然后通过两种方式采集日志:一是在创建应用时通过控制台或Pod环境变量配置日志采集;二是通过AliyunLogConfig CRD进行更精细化的日志采集配置,支持按命名空间、Pod名称、容器名称、Label等多维度过滤。
问6:ACS支持哪些弹性伸缩策略?
答:ACS支持HPA(基于资源指标的水平伸缩)、CronHPA(定时水平伸缩)、AHPA(高级水平伸缩)、KEDA(基于事件驱动的伸缩)和AVPA(垂直伸缩)等多种策略,可以灵活应对不同业务场景的弹性需求。


