阿里云容器計算服務 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實例。