Container Compute Service (ACS)已整合至ACK One註冊叢集,您可以通過ACK One註冊叢集快速使用ACS提供的容器算力。本文介紹ACK One註冊叢集如何接入ACS算力。
ACK One註冊叢集對接方式
Container Compute Service (ACS)是以Kubernetes為使用者介面的Container Service產品,提供符合容器規範的算力資源。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 One註冊叢集。
已安裝ACK Virtual Node組件,且組件版本為2.13.0及以上。具體操作,請參見安裝ack-virtual-node組件。
為ack-virtual-node組件配置RAM許可權
通過onectl配置
在本地安裝配置onectl。具體操作,請參見通過onectl管理註冊叢集。
執行以下命令,為ack-virtual-node組件配置RAM許可權。
onectl ram-user grant --addon ack-virtual-node預期輸出:
Ram policy ack-one-registered-cluster-policy-ack-virtual-node granted to ram user ack-one-user-ce313528c3 successfully.
通過控制台配置
在註冊叢集安裝組件之前,您需要在接入叢集中設定AccessKey用來訪問雲端服務的許可權。設定AccessKey之前,您需要建立RAM使用者並為其添加訪問相關雲資源的許可權。
可選:建立自訂權限原則,策略內容如下。
可選擇添加AliyunECIFullAccess、AliyunVPCReadOnlyAccess和AliyunAccFullAccess系統策略或自訂權限原則為RAM使用者授權。
為RAM使用者建立AccessKey。
警告建議您參見AccessKey網路訪問限制策略配置網路原則,將AccessKey調用來源控制在可信的網路環境內,提升AccessKey的安全性。
使用AccessKey在註冊叢集中建立名為alibaba-addon-secret的Secret資源。
安裝ack-virtual-node組件時將自動引用此AccessKey訪問對應的雲端服務資源。
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'說明<your access key id>及<your access key secret>為上一步擷取的AccessKey資訊。
ACK One註冊叢集使用ACS CPU算力樣本
ACK Virtual Node組件安裝或升級到2.13.0及以上版本後,將同時支援ACS和ECI兩種算力。
在Pod調度到虛擬節點的情境中,如果沒有指定為ACS的算力類型,則預設會優先使用ECI彈性執行個體。
ACK使用ACS CPU算力可以通過以下步驟實現:
更新註冊叢集安全性群組配置。
在叢集的基本資料頁面,單擊控制面安全性群組後方的安全性群組ID。
在安全性群組詳情頁,單擊添加規則。按照下表內容填寫。
規則類型
協議
連接埠範圍
源IP範圍
描述
入方向
TCP
80
IDC叢集CIDR,例如192.168.1.0/24。
用於配置ACS終端節點情境。
入方向
TCP
443
IDC叢集CIDR,例如192.168.1.0/24。
用於配置ACS終端節點情境。
入方向
TCP
10250
IDC叢集CIDR,例如192.168.1.0/24。
Serverless 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的算力類型。 alibabacloud.com/compute-qos: default # 配置ACS Pod的算力品質。 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: GN8IS # GPU卡型,請按照實際情況替換
...關於ACS的算力類型和算力品質,請參見計算類型與算力品質的對應關係。
關於
gpu-model-series的可選卡型,請參見為ACS GPU Pod指定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/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"
ACK One註冊叢集使用ACS GPU HPN算力樣本
ACS GPU HPN算力的使用與ACS CPU算力的主要鏈路和使用流程相同,但存在以下使用要求:
需提前購買GPU-HPN容量預留,並關聯到叢集。
若需使用ACS GPU HPN算力,需升級ACK Virtual Node組件版本。對應組件版本處於邀測階段,請提交工單申請。
使用方法
...
labels:
# label中聲明acs GPU資源需求
alibabacloud.com/compute-class: gpu-hpn #固定為gpu-hpn類型
alibabacloud.com/compute-qos: default #計算qos類型,含義與普通acs算力相同
alibabacloud.com/acs: "true" # 配置使用ACS算力標籤
...關於ACS的算力類型和算力品質,請參見計算類型與算力品質的對應關係。
關於ACS Pod的其他功能參數配置,請參見ACS Pod。
ACS GPU HPN類型Node僅能調度
gpu-hpn計算類的Pod(Pod資源聲明中可以不填寫GPU資源需求),不能調度其他計算類或者未聲明計算類的Pod。
您可以使用K8s的NodeSelector配置,將Pod指定調度到GPU HPN節點上。
重要ACS GPU HPN類型Pod請重點關注以下欄位配置:
指定計算類:
alibabacloud.com/compute-class: gpu-hpn。指定預留節點標籤:
alibabacloud.com/node-type: reserved。資源規格的
requests和limits欄位的裝置資源名稱,請參考實際的裝置卡型填寫,例如NVIDIA或其他。
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-hpn alibabacloud.com/compute-qos: default alibabacloud.com/acs: "true" spec: # 指定gpu-hpn預留節點標籤 nodeSelector: alibabacloud.com/node-type: reserved 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"