容器计算服务 ACS(Container Compute Service)已集成至ACK One注册集群,您可以通过ACK One注册集群快速使用ACS提供的容器算力。本文介绍ACK One注册集群如何接入ACS算力。
ACK One注册集群对接方式
容器计算服务 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需要的资源随时可用。
在ACK One注册集群中,需要先通过组件中心安装ack-virtual-node组件,以便部署虚拟节点并创建ACS Pod。当集群需要扩容时,可以直接在虚拟节点下按需创建ACS Pod,无需规划节点的计算容量,且ACS Pod与集群中真实节点上的Pod之间网络互通。为了更有效地利用资源、缩短扩容时间并降低成本,建议将部分长时间运行且流量弹性变化的业务负载调度至虚拟节点。随着业务流量的减少,可以迅速释放虚拟节点上的Pod,以减少使用成本。虚拟节点上的Pod均基于ACS运行在安全隔离的容器运行环境中,每个Pod对应一个ACS实例。更多信息,请参见注册集群概述。
前提条件
创建ACK One注册集群并接入数据中心或者其他云厂商的Kubernetes集群(建议版本为1.24及以上)。具体操作,请参见创建注册集群。
已安装ACK Virtual Node组件,且组件版本为2.13.0及以上。具体操作,请参见为ack-virtual-node组件配置RAM权限及安装ack-virtual-node组件。
ACK One注册集群使用ACS CPU算力示例
ACK Virtual Node组件安装或升级到2.13.0及以上版本后,将同时支持ACS和ECI两种算力。
在Pod调度到虚拟节点的场景中,如果没有指定为ACS的算力类型,则默认会优先使用ECI弹性实例。
ACK使用ACS CPU算力可以通过以下步骤实现:
通过NodeSelector、亲和性和反亲和性、ResourcePolicy和配置标签
alibabacloud.com/acs: true
等调度方式将Pod调度到虚拟节点。具体步骤,请参见节点亲和性调度。通过标签(alibabacloud.com/compute-class:计算类型)指定创建ACS Pod的实例类型。关于ACS实例类型的介绍,请参见ACS Pod实例概述。
具体操作步骤如下:
部署Deployment。
NodeSelector标签调度执行以下命令,查看虚拟节点的标签。命令中的
virtual-kubelet-cn-shanghai-l
请按实际内容修改。kubectl get node virtual-kubelet-cn-shanghai-l -oyaml
预期输出:
apiVersion: v1 kind: Node metadata: labels: beta.kubernetes.io/arch: amd64 beta.kubernetes.io/os: linux kubernetes.io/arch: amd64 kubernetes.io/hostname: virtual-kubelet-cn-shanghai-l kubernetes.io/os: linux kubernetes.io/role: agent service.alibabacloud.com/exclude-node: "true" topology.diskplugin.csi.alibabacloud.com/zone: cn-shanghai-l topology.kubernetes.io/region: cn-shanghai topology.kubernetes.io/zone: cn-shanghai-l type: virtual-kubelet # 所有虚拟节点都存在该标签,可以使用该标签实现Pod定向调度到虚拟节点。 name: virtual-kubelet-cn-shanghai-l spec: taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud
使用以下YAML内容创建nginx.yaml,部署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: mirrors-ssl.aliyuncs.com/nginx:stable-alpine ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 2 requests: cpu: 2
创建应用Nginx并查看部署结果。
执行以下命令,创建Nginx应用。
kubectl apply -f nginx.yaml
执行以下命令,查看部署结果。
kubectl get pods -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-54bcbc9b66-**** 1/1 Running 0 3m29s 192.168.XX.XXX virtual-kubelet-cn-shanghai-l <none> <none> nginx-54bcbc9b66-**** 1/1 Running 0 3m29s 192.168.XX.XXX virtual-kubelet-cn-shanghai-l <none> <none>
可以看到,这两个Pod通过
nodeSelector
被调度到label
为type=virtual-kubelet
的节点上。
使用以下内容,创建nginx.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx alibabacloud.com/acs: "true" # 配置使用ACS算力 alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力类型,未配置默认general-purpose alibabacloud.com/compute-qos: default # 配置ACS Pod的算力质量,未配置默认default spec: containers: - name: nginx image: mirrors-ssl.aliyuncs.com/nginx:stable-alpine ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 2 requests: cpu: 2
执行以下命令,创建Nginx应用。
kubectl apply -f nginx.yaml
执行以下命令,查看部署结果。
kubectl get pods -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-54bcbc9b66-**** 1/1 Running 0 3m29s 192.168.XX.XXX virtual-kubelet-cn-shanghai-l <none> <none> nginx-54bcbc9b66-**** 1/1 Running 0 3m29s 192.168.XX.XXX virtual-kubelet-cn-shanghai-l <none> <none>
可以看到,这两个Pod通过
nodeSelector
被调度到label
为type=virtual-kubelet
的节点上。
执行以下命令,查看Nginx Pod详情。
kubectl describe pod nginx-54bcbc9b66-****
预期输出:
Annotations: ProviderCreate: done alibabacloud.com/instance-id: acs-uf6008giwgjxlvn***** alibabacloud.com/pod-ephemeral-storage: 30Gi alibabacloud.com/pod-use-spec: 2-2Gi kubernetes.io/pod-stream-port: 10250 network.alibabacloud.com/enable-dns-cache: false topology.kubernetes.io/region: cn-shanghai
输出的Pod内容中存在注解
alibabacloud.com/instance-id: acs-uf6008giwgjxlvn*****
则可确认该Pod为ACS Pod实例。
ACK One注册集群使用ACS GPU算力示例
与ACS CPU算力的主要链路和使用流程相同,但使用ACS GPU算力还需要确保调度相关的组件版本符合预期,并进行一些额外的配置。
开通方式
目前在ACK One注册集群使用ACS GPU算力处于邀测阶段,请提交工单申请。
使用方法
...
labels:
# label中声明acs GPU资源需求
alibabacloud.com/compute-class: gpu #如为GPU类型,固定gpu即可
alibabacloud.com/compute-qos: default #计算qos类型,含义与普通acs算力相同
alibabacloud.com/gpu-model-series: example-model # GPU卡型,请按照实际情况替换,例如T4
...
关于ACS的算力类型和算力质量,请参见计算类型与算力质量的对应关系。
关于
gpu-model-series
的可选卡型,请参见GPU型号说明。
使用以下示例内容,创建GPU负载。
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 1 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo # acs属性 alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # GPU卡型,请按照实际情况替换,例如T4 spec: # 指定vk的标签 nodeSelector: type: virtual-kubelet # 容忍vk的taint tolerations: - key: "virtual-kubelet.io/provider" # 容忍虚拟节点的污点 operator: "Exists" effect: "NoSchedule" containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1"
执行以下命令,查看GPU负载运行状态。
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml
预期输出:
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"
使用以下示例内容,创建GPU负载。
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 1 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo # acs属性 alibabacloud.com/acs: "true" # 配置使用ACS算力 alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # GPU卡型,请按照实际情况替换,例如T4 spec: containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1"
执行以下命令,查看GPU负载运行状态。
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml
预期输出:
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"
- 本页导读 (0)
- ACK One注册集群对接方式
- 前提条件
- ACK One注册集群使用ACS CPU算力示例
- ACK One注册集群使用ACS GPU算力示例
- 开通方式
- 使用方法