阿里云容器计算服务 ACS(Container Compute Service)已经集成到容器服务 Kubernetes 版,您可以通过ACK集群Pro版快速使用ACS提供的容器算力。本文介绍ACK集群如何接入ACS算力。
ACK集群对接方式
容器计算服务 ACS(Container Compute Service)是以Kubernetes为用户界面的容器服务产品,提供符合容器规范的算力资源。ACS的Kubernetes管控和容器算力分层设计,为Kubernetes提供一种层次化的解决方案:ACS的计算资源层负责底层Pod容器资源的调度和分配,而Kubernetes则在此基础上负载业务负载管理,例如管理Deployment、Service、StatefulSet、CronJob等。
ACS容器算力可以通过虚拟节点(Virtual Node)的形式接入到Kubernetes集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。ACS在接管Pod容器底层基础设施的管理工作后,Kubernetes不再需要直接负责单个Pod的放置、启动等工作,也不再需要关心底层虚拟机的资源情况,通过ACS即可确保Pod需要的资源随时可用。
容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)是全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理服务。它整合了阿里云虚拟化、存储、网络和安全能力,简化集群的搭建和扩容等工作,让您专注于容器化的应用的开发与管理。
在ACK集群Pro版中,您需要先手动部署虚拟节点,才能创建ACS Pod。集群需要扩容时,可以直接在虚拟节点下按需创建ACS Pod,而无需规划节点的计算容量,ACS Pod与集群中真实节点上的Pod之间网络互通。建议您将部分长时间运行且流量弹性变化的业务负载调度至虚拟节点,这可以充分利用已有资源,缩短弹性扩容的时间,并减少扩容成本。当业务流量下降后,您可以快速释放部署在虚拟节点上的Pod,从而降低使用成本。虚拟节点上的Pod均基于ACS运行在安全隔离的容器运行环境中,每个Pod对应一个ACS实例。更多信息,请参见ACK产品概述。
前提条件
首次操作时,需完成服务开通和相关授权操作:
开通容器服务 Kubernetes 版,并授权默认角色和开通相关云产品。具体操作,请参见首次使用容器服务Kubernetes版。
登录容器计算服务控制台,根据提示开通ACS服务。
已创建ACK集群Pro版且版本为1.26及以上。具体操作,请参见创建ACK托管集群。关于如何升级集群版本,请参见升级ACK集群K8s版本。
对于不同Kubernetes版本的ACK集群Pro版,虚拟节点组件(ACK Virtual Node)版本需要满足以下要求。
Kubernetes版本
虚拟节点组件版本
1.26及以上
v2.13.0-beta.2及以上
安装ACK Virtual Node组件启用ACS算力
ACS容器算力可以以虚拟节点的形式接入到ACK集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。具体操作步骤如下:
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在核心组件分页选择ACK Virtual Node组件进行安装或者升级到指定版本。
若安装ACK Virtual Node前提示开通并授权ACS,需要按指引开通并授权ACS。完成ACS的开通和授权后点击确定安装。
安装完成后,在左侧导航栏选择
,新增的虚拟节点名称默认会以virtual-kubelet-
为开头。
ACK使用ACS算力示例
ACK Virtual Node组件安装或升级到前提条件中的指定版本后,将同时支持ACS和ECI两种算力。
在Pod调度到虚拟节点的场景中,如果没有指定为ACS的算力类型,则默认会优先使用ECI弹性实例。
ACK使用ACS算力可以通过以下步骤实现:
通过NodeSelector、亲和性和反亲和性、ResourcePolicy等调度方式将Pod调度到虚拟节点。具体步骤,请参见节点亲和性调度。
通过Label(alibabacloud.com/compute-class:计算类型)指定创建ACS Pod的实例类型。关于ACS实例类型的介绍,请参见ACS Pod实例概述。
具体操作步骤如下:
执行以下命令,查看虚拟节点的Label。命令中的
virtual-kubelet-cn-hangzhou-k
请按实际内容修改。kubectl get node virtual-kubelet-cn-hangzhou-k -oyaml
预期输出(仅展示Label相关关键内容):
apiVersion: v1 kind: Node metadata: labels: kubernetes.io/arch: amd64 kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k kubernetes.io/os: linux kubernetes.io/role: agent service.alibabacloud.com/exclude-node: "true" topology.diskplugin.csi.alibabacloud.com/zone: cn-hangzhou-k topology.kubernetes.io/region: cn-hangzhou topology.kubernetes.io/zone: cn-hangzhou-k type: virtual-kubelet # 所有虚拟节点都存在该标签,可以使用该标签实现Pod定向调度到虚拟节点。 name: virtual-kubelet-cn-hangzhou-k spec: taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud
使用以下YAML内容创建Deployment,部署2个Pod。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力类型,未配置默认general-purpose alibabacloud.com/compute-qos: default # 配置ACS Pod的算力质量,未配置默认default spec: nodeSelector: type: virtual-kubelet #定向调度到虚拟节点 tolerations: - key: "virtual-kubelet.io/provider" # 容忍虚拟节点的污点 operator: "Exists" effect: "NoSchedule" containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2
创建应用Nginx并查看部署结果。
执行以下命令,创建应用Nginx。
kubectl apply -f nginx.yaml
预期输出:
deployment.apps/nginx created
执行以下命令,查看部署结果。
kubectl get pods -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-s**** 1/1 Running 0 36s 10.0.6.68 virtual-kubelet-cn-hangzhou-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Running 0 36s 10.0.6.67 virtual-kubelet-cn-hangzhou-k <none> <none>
由预期输出得到,这两个Pod通过
nodeSelector
被调度到label
为type=virtual-kubelet
的节点上。
查看应用Nginx的Pod详情,确认Pod为ACS Pod实例。
执行以下命令,查看应用Nginx的Pod详情。
kubectl describe pod nginx-9cdf7bbf9-s****
预期输出(关键信息):
Annotations: ProviderCreate: done alibabacloud.com/client-token: edf29202-54ac-438e-9626-a1ca007xxxxx alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx alibabacloud.com/pod-ephemeral-storage: 30Gi alibabacloud.com/pod-use-spec: 2-4Gi alibabacloud.com/request-id: A0EF3BF3-37E7-5A07-AC2D-68A0CFCxxxxx alibabacloud.com/schedule-result: finished alibabacloud.com/user-id: 14889995898xxxxx kubernetes.io/pod-stream-port: 10250 kubernetes.io/preferred-scheduling-node: virtual-kubelet-cn-hangzhou-j/1 kubernetes.io/resource-type: serverless
输出的Pod内容中存在注解
alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx
则可确认该Pod为ACS Pod实例。