阿里云容器计算服务ACS深度对接与使用完全指南
1. 初识阿里云容器计算服务ACS
阿里云容器计算服务(Alibaba Cloud Container Compute Service,简称ACS)是阿里云推出的新一代Serverless容器计算平台,以Kubernetes为使用界面,提供弹性、免运维的容器算力资源。从产品演进来看,ACS是ACK Serverless集群(原ASK)的全面升级版本,在成本效益、易用性和弹性能力上均实现了显著提升。
相比传统的ACK Pro集群,ACS完全免去了集群控制面的运维负担:您无需关心节点规格选择、节点创建和节点管理,只需要按需申请Pod资源,ACS会自动分配算力,并按秒级计费。ACS依托于阿里云神龙架构,实现了容器和资源的一体化管理,提供了按需弹性和资源预留两种资源使用方式。
ACS的产品定位可以概括为三个核心特征:第一,以Kubernetes为使用界面,完全兼容Kubernetes API和生态工具;第二,Serverless形态的算力交付,用户无需关注底层节点及集群的运维管理;第三,提供多样化的计算类型和算力质量,适配不同类型的业务负载。
需要先登录阿里云控制台,点击:阿里云控制台
2. ACS与ACK的核心区别
理解ACS与ACK的区别是正确选型的前提。ACS是ACK Serverless集群的升级版本,基于ACK Serverless集群和ACK演进K8s层能力,优化了Serverless K8s的编排调度灵活度和兼容使用体验。
在控制面层面,ACS集群的控制面由ACS创建并托管,您无需设计集群规模、选择节点规格、创建节点或管理节点。而ACK Pro集群的控制面由ACK创建并托管,您需要灵活设计集群规模、选择节点规格,并在部署Pod前先创建节点。
在计费模式上,ACS不收取集群管理费,Pod按实例类型和分配的vCPU、内存或GPU资源进行秒级计费。ACK Pro集群则收取集群管理费,节点按规格和运行时长计费。ACS的CPU资源从0.25 vCPU和0.5 GiB内存起配,以0.5 vCPU和1 GiB为步长递增,GPU资源从1个GPU起配,真正做到按需申请、按量付费。
在运维复杂度上,ACS托管了Kubernetes核心系统组件并自动更新集群补丁版本,大幅降低了运维负担。ACS集群也是ACK的一种Serverless K8s集群类型,在ACK控制台上可以看到相关ACS集群,并且可以对ACS集群做集群RBAC授权管理以及KubeConfig凭证管理。
3. 服务开通与角色授权
首次使用ACS时,需要完成服务开通和授权两个关键步骤。
步骤一:开通容器计算服务ACS
登录容器计算服务ACS产品控制台,首次登录会跳转到开通引导页面。单击\"前往开通\",在新页面中创建服务关联角色,然后单击\"立即购买\"完成开通。
步骤二:角色授权
开通完成后,返回控制台并刷新页面,单击\"前往授权\",为ACS授权访问其他云资源的权限。当且仅当该角色被正确授予后,容器计算服务才能正常地调用相关服务(ECS、OSS、NAS、CPFS、SLB等),执行创建集群、保存日志等操作。阿里云账号(主账号)和拥有管理权限的RAM用户都可以授权系统默认角色。对于RAM用户,还需要确保已经授予了与ACS相关的系统策略,例如AliyunCSFullAccess,以便拥有完整的集群管理权限。
4. 创建ACS集群
完成开通与授权后,即可开始创建ACS集群。集群创建可以通过控制台和OpenAPI两种方式完成。
4.1 控制台创建集群
登录容器计算服务控制台,在左侧导航栏选择\"集群列表\",单击页面左上角的\"创建集群\"。在创建集群页面,需要完成集群配置、网络配置、组件配置和高级选项配置。
集群配置:填写集群名称,选择集群所在的地域和Kubernetes版本。目前ACS已在多个地域开服,具体可参考官方开服地域文档。
网络配置:ACS集群仅支持专有网络(VPC),支持自动创建和使用已有VPC两种方式。选择可用区或交换机时,建议选择多个以确保集群的高可用。ACS会在所选可用区下分别创建一个对应的虚拟节点。配置SNAT决定了VPC内的实例能否访问公网,如果Pod需要从公网拉取容器镜像,则需要配置NAT网关。为了降低成本,更好的做法是将容器镜像上传到与ACS集群同一地域的阿里云容器镜像服务(ACR)中,然后通过内网VPC地址拉取镜像。
安全组与API Server访问:选择自动创建普通安全组或企业级安全组。API Server访问配置默认为API Server创建一个按量付费的私网CLB实例。
4.2 通过OpenAPI创建集群
以下是通过OpenAPI调用创建集群时的参数配置示例:
{\n \"cluster_type\": \"ManagedKubernetes\",\n \"profile\": \"Serverless\",\n \"name\": \"my-acs-cluster\",\n \"region_id\": \"cn-hangzhou\",\n \"zone_ids\": [\"cn-hangzhou-g\", \"cn-hangzhou-h\"],\n \"vpc_id\": \"vpc-xxxxxx\",\n \"vswitch_ids\": [\"vsw-xxxxxx1\", \"vsw-xxxxxx2\"],\n \"service_cidr\": \"172.19.0.0/20\",\n \"snat_entry\": true,\n \"security_group_id\": \"sg-xxxxxx\"\n}集群创建时间通常需要5到10分钟。
5. 网络架构深度解析
ACS集群的网络架构分为三个层次:
VPC:作为最外层的网络边界,定义了整体IP地址空间。
vSwitch:作为可用区级子网,Pod的IP地址从Pod专用vSwitch中分配。
Service CIDR:专门为Kubernetes Service预留的独立IP范围,仅在集群内部生效。
规划时必须遵守三个核心约束:vSwitch的CIDR必须是VPC CIDR的子集;Service CIDR不能与任何vSwitch CIDR重叠;Service CIDR在集群创建后不可修改。
对于跨地域或多集群场景,不同集群的Service CIDR可以重叠,但需要注意Pod IP无法直接访问另一个集群的Service,只有Pod之间的流量可以跨越集群边界。
在Service层面,ACS采用Service方式为一组容器提供固定的访问入口,并对这一组容器做负载均衡。创建Service对象时,ACS会分配一个相对固定的Service IP地址。ACS支持ClusterIP(集群内访问)、LoadBalancer(通过阿里云负载均衡器对外暴露服务)等多种网络模式。
6. 计算类型与算力规格
ACS面向不同业务场景,定义了高性价比的Serverless容器算力类型和算力质量。ACS当前提供了多种计算类型和算力质量,不同的实例类型在资源供给上有所区别,以适应不同的业务场景。
6.1 计算类型
通用型:适用于微服务、Web应用等常规在线业务,平衡了性能与成本。
性能型:适用于对计算性能有更高要求的场景,提供更强的CPU和内存配置。
GPU加速型:适用于AI推理、模型训练等GPU计算场景。
GPU-HPN型:适用于高性能网络场景的GPU计算。
6.2 算力质量
Default(默认):提供标准的算力质量保证,适用于大多数生产场景。
BestEffort:成本优先的算力质量,适用于对延迟不敏感、吞吐密集型的工作负载,如Spark、Presto、AI训练等。使用BestEffort实例时,为应对实例被抢占回收时导致的业务中断风险,可安装acs-instance-helper组件并添加注解,实现待释放Pod的自动副本轮转和优雅下线。
6.3 通过YAML指定算力规格
以下YAML示例展示了如何精细化指定Pod的算力规格:
apiVersion: v1\nkind: Pod\nmetadata:\n name: acs-demo-pod\n annotations:\n alibabacloud.com/compute-class: \"general-purpose\"\nspec:\n containers:\n - name: nginx\n image: nginx:latest\n resources:\n requests:\n cpu: \"2\"\n memory: \"4Gi\"\n limits:\n cpu: \"2\"\n memory: \"4Gi\"通过alibabacloud.com/compute-class注解可以指定计算类型,通过resources字段可以精确控制CPU和内存的申请与限制。
7. 存储集成与管理
ACS的容器存储功能基于Kubernetes容器存储接口(CSI),融合了块存储、NAS、OSS等阿里云存储服务,并兼容Kubernetes原生的EmptyDir、ConfigMap等存储。
7.1 CSI插件
CSI是当前Kubernetes社区推荐的存储插件实现方案,ACS提供了csi-provisioner作为ACS集群的CSI插件,支持基于阿里云存储资源的存储卷。在存储卷的挂载、卸载、创建、删除等操作上,CSI插件需要您授予其访问阿里云其他产品资源的权限。
7.2 支持的存储类型
块存储(云盘):非共享、低时延、高可靠的数据块级随机存储,适合数据库、中间件等高IO、低延时场景。支持ESSD Entry、ESSD AutoPL、ESSD、SSD、高效云盘等多种类型。云盘为非共享存储,仅支持挂载到一个Pod上。
NAS:可共享访问、弹性扩展、高可靠、高性能的分布式文件系统,提供高吞吐和高IOPS,支持文件的随机读写和在线修改。适用于共享数据场景。
OSS:对象存储服务,适用于大规模非结构化数据的存储与访问。
7.3 使用PVC挂载存储
以下示例展示了如何通过StorageClass和PVC挂载NAS存储:
apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: nas-llm-sc\nmountOptions:\n- nolock,tcp,noresvport\n- vers=3\nparameters:\n volumeAs: filesystem\n fileSystemType: standard\n storageType: Performance\n regionId: cn-hangzhou\n zoneId: cn-hangzhou-g\n vpcId: \"vpc-xxxxxx\"\n vSwitchId: \"vsw-xxxxxx\"\n accessGroupName: DEFAULT_VPC_GROUP_NAME\n deleteVolume: \"false\"\nprovisioner: nasplugin.csi.alibabacloud.com\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nas-llm-pvc\nspec:\n accessModes:\n - ReadWriteMany\n storageClassName: nas-llm-sc\n resources:\n requests:\n storage: 30Gi8. 部署应用
ACS支持通过容器镜像、编排YAML模板和kubectl命令行等多种方式创建无状态应用。
8.1 通过控制台部署Nginx应用
登录容器计算服务控制台,在集群列表页面单击目标集群名称,然后在左侧导航栏选择\"工作负载 > 无状态\"。单击\"使用镜像创建\",配置应用基本信息、容器配置和高级配置。
在容器配置中,选择Nginx镜像并配置相关参数。在高级配置中,可以创建Service对外暴露服务:设置服务名称为http,服务端口80,容器端口80。在类型中选择\"负载均衡\"和\"公网访问\",选择新建SLB。也可创建Ingress路由实现七层负载均衡。
8.2 通过YAML部署应用
以下是一个部署Nginx Deployment并通过Service对外暴露的完整YAML示例:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: nginx-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: nginx\n template:\n metadata:\n labels:\n app: nginx\n spec:\n containers:\n - name: nginx\n image: nginx:latest\n ports:\n - containerPort: 80\n resources:\n requests:\n cpu: \"0.5\"\n memory: \"1Gi\"\n limits:\n cpu: \"0.5\"\n memory: \"1Gi\"\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: nginx-service\nspec:\n type: LoadBalancer\n selector:\n app: nginx\n ports:\n - port: 80\n targetPort: 809. 连接集群与kubectl使用
除了通过容器服务控制台管理集群外,还可以通过Kubernetes命令行工具kubectl来管理集群以及应用。
9.1 获取kubeconfig
ACS集群提供了两种集群凭证(即kubeconfig文件),分别用于公网访问和内网访问。登录ACS控制台,在左侧导航栏单击\"集群\",在集群信息页面单击\"连接信息\"页签。可以选择临时或长期KubeConfig,对于临时KubeConfig需合理设置有效期。选择公网访问或内网访问页签,单击复制,将复制的KubeConfig内容粘贴至客户端的$HOME/.kube/config文件中。
对于无需长期连接集群API Server的访问场景,建议优先使用生成临时的kubeconfig,降低kubeconfig凭据泄露后的安全风险。
9.2 使用kubectl管理集群
配置好kubeconfig后,即可使用kubectl命令管理ACS集群:
# 查看集群节点\nkubectl get nodes\n\n# 查看所有命名空间下的Pod\nkubectl get pods --all-namespaces\n\n# 查看集群事件\nkubectl get events --all-namespaces\n\n# 部署应用\nkubectl apply -f deployment.yaml\n\n# 查看部署状态\nkubectl rollout status deployment/nginx-deployment10. 权限管理体系
容器计算服务ACS的授权体系包含对基础资源层的RAM授权和对ACS集群层的RBAC授权两部分。
10.1 RAM授权
RAM授权包括对集群的运维操作权限。因为ACS集群是ACK的一种Serverless K8s集群类型,对ACS集群的运维操作需要通过ACK OpenAPI执行,所以需要获取ACK产品及其所依赖的阿里云产品的OpenAPI操作权限。ACS系统策略相对粗粒度,如果无法满足细粒度授权需求,可以创建自定义授权策略。
10.2 RBAC授权
RBAC授权对应的是运行于ACS集群中Kubernetes应用的运维操作,需要获取ACS集群及其命名空间的操作权限。ACS提供了五个预定义的RBAC角色。当RAM用户或RAM角色需要操作指定集群内K8s资源时(例如获取集群Pod信息),需要授予相应的RBAC权限。
当前ACS授权管理只支持自定义ClusterRole角色与集群内RBAC权限的绑定,不支持自定义Role角色与集群内RBAC权限的绑定。
授权流程为:首先完成RAM授权,然后通过ACS控制台的授权页面为RAM用户或RAM角色授予RBAC权限。
11. 弹性伸缩配置
弹性伸缩是ACS上被广泛采用的功能,典型的场景包含在线业务弹性、定时周期性负载变化等。ACS支持HPA、CronHPA和AHPA多种弹性方式。
11.1 水平Pod自动伸缩(HPA)
HPA根据CPU使用率、内存使用率等指标自动调整Pod的副本数。在创建应用的高级配置页面中,开启\"指标伸缩\",设置伸缩条件和配置。支持CPU和内存两种指标类型。
以下是通过YAML配置HPA的示例:
apiVersion: autoscaling/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n name: nginx-hpa\nspec:\n scaleTargetRef:\n apiVersion: apps/v1\n kind: Deployment\n name: nginx-deployment\n minReplicas: 2\n maxReplicas: 10\n metrics:\n - type: Resource\n resource:\n name: cpu\n target:\n type: Utilization\n averageUtilization: 7011.2 定时伸缩(CronHPA)
CronHPA适用于有周期性规律的业务场景,可以在指定时间自动调整副本数。CronHPA可以兼容HPA策略共同作用,实现复杂场景下的工作负载伸缩。
11.3 智能弹性伸缩(AHPA)
AHPA可根据历史数据预测业务波动,支持快速扩容,确保业务稳定运行。智能弹性伸缩方案AHPA可根据历史数据预测业务波动,支持每分钟7000个Pod的快速扩容。
12. 日志采集与监控
12.1 日志采集
容器计算服务ACS集成了阿里云日志服务SLS。可在创建ACS集群时启用日志服务,快速采集集群内的容器日志,包括容器的标准输出以及容器内的文本文件。
ACS支持通过AliyunLogConfig CRD方式采集应用日志。在logtailConfig配置中可以增加advanced配置来匹配特定的Pod或容器。ACS还支持收集集群控制面组件日志,将日志从ACS控制面采集到您账号中日志服务SLS的Log Project中。
12.2 监控告警
您可以通过阿里云Prometheus监控查看预先配置的监控大盘和监控性能指标。容器智能运维平台提供一键故障诊断能力,包括Pod诊断、Service诊断、Ingress诊断,可以辅助您定位集群中出现的问题。容器智能运维平台还提供集群巡检功能,可以扫描集群运行状况,发现集群中存在的潜在风险,例如云资源配额余量、Kubernetes集群关键资源水位等。
13. 服务发现与DNS配置
ACS集群默认不会部署DNS服务,需要在创建集群时选中CoreDNS。CoreDNS通过kube-dns的服务名暴露DNS服务。ACS集群使用CoreDNS负责集群的服务发现。以下命令可以查看kube-dns的服务详情:
kubectl get svc kube-dns -n kube-system对于已创建的ACS集群,启用DNS服务发现方案仅对新建的容器Pod生效。如果需要使用自建DNS服务来解析镜像仓库以及其他应用的域名,可以通过在Pod metadata中添加Annotation来指定ACS Pod使用自定义DNS。
14. CI/CD集成
ACS可以无缝集成主流CI/CD工具,实现自动化部署。
14.1 GitLab Runner集成
在ACS集群中使用GitLab Runner可以构建完整的CI/CD环境。GitLab Runner提供了Kubernetes执行器,可以在ACS集群中运行CI/CD作业。CI任务作为典型的时间周期型算力使用场景,完美契合ACS按需使用和快速弹性的特性。
14.2 Knative与ACS算力
Knative Service支持配置使用ACS算力,通过其多样化的计算类型和算力质量,满足不同业务场景的负载需求并优化成本。可以在Knative Service的Pod模板中添加标签,以声明使用ACS算力。
15. 成本优化最佳实践
利用内网拉取镜像:将容器镜像上传到与ACS集群同一地域的ACR中,通过内网VPC地址拉取镜像,避免公网流量费用。
选择合适的算力类型:对于延迟不敏感的离线任务,使用BestEffort算力质量可以显著降低成本。
合理设置资源请求:CPU资源从0.25 vCPU和0.5 GiB内存起配,按实际需求申请资源,避免资源浪费。
使用节省计划:对于波动性工作负载,基于每日承诺消费的节省计划可以进一步降低成本。
配置生命周期管理:合理配置Pod的生命周期策略,及时回收闲置资源。
16. 安全加固建议
最小权限原则:使用RAM子账号进行日常运维,授予最小必要权限。
临时kubeconfig:对于临时访问场景,使用临时kubeconfig并设置合理的有效期。
API Server访问控制:配置API Server的访问控制策略,限制公网访问来源。
安全组配置:合理配置安全组规则,仅开放必要的端口。
Pod安全策略:为Pod配置安全策略,验证Pod部署和更新的请求是否安全。
17. 常见问题解答
问:ACS和ACK Serverless是什么关系?
答:ACS是ACK Serverless集群的全面升级版本,在成本效益、易用性和弹性能力上均实现了显著提升。ACS集群也是ACK的一种Serverless K8s集群类型,在ACK控制台上可以看到相关ACS集群。
问:ACS集群创建后,Service CIDR可以修改吗?
答:不可以。Service CIDR在集群创建后不可修改,因此在集群创建前需要做好网络规划。
问:ACS支持哪些存储类型?
答:ACS基于CSI插件支持块存储(云盘)、NAS、OSS等阿里云存储服务,并兼容Kubernetes原生的EmptyDir、ConfigMap等存储。
问:如何实现ACS集群的弹性伸缩?
答:ACS支持HPA(基于CPU/内存指标)、CronHPA(定时伸缩)和AHPA(基于历史数据预测的智能弹性)三种方式,可以根据业务场景选择合适的弹性策略。
问:ACS的计费方式是怎样的?
答:ACS不收取集群管理费,Pod按实例类型和分配的vCPU、内存或GPU资源进行秒级计费,真正做到按需使用、按量付费。
问:如何使用kubectl连接ACS集群?
答:从ACS控制台获取集群的kubeconfig文件(支持公网和内网两种访问方式),配置到本地$HOME/.kube/config文件中,即可使用kubectl命令管理集群。



