Alibaba Cloud Container Compute Service (ACS) は Container Service for Kubernetes と統合されています。ACK Pro クラスターを使用して、ACS が提供するコンテナコンピューティングパワーに素早くアクセスできます。本トピックでは、ACK クラスターで ACS コンピューティングパワーを使用する方法について説明します。
仕組み
Container Compute Service (ACS) は、Kubernetes をユーザーインターフェイスとして使用し、コンテナ仕様に準拠したコンピューティングリソースを提供するコンテナサービスです。ACS は、Kubernetes コントロールプレーンを基盤となるコンテナコンピューティングパワーから分離する階層型アーキテクチャを使用しています。ACS コンピューティングリソース層は Pod のリソースのスケジューリングと割り当てを担当し、Kubernetes はこの層の上で Deployment、Service、StatefulSet、CronJob などのアプリケーションワークロードを管理します。
ACS コンテナのコンピューティングパワーを仮想ノードとして Kubernetes クラスターに接続できます。これにより、クラスターはノードのコンピューティング容量に制約されない強力な弾力性を得られます。ACS が Pod の基盤となるインフラストラクチャの管理を引き継ぐと、Kubernetes は個々の Pod の配置と起動を直接処理したり、基盤となる仮想マシンのリソースステータスを監視したりする必要がなくなります。ACS は、必要な Pod リソースが常に利用可能であることを保証します。
Container Service for Kubernetes (ACK) は、世界で初めて認定された Kubernetes プラットフォームの 1 つであり、コンテナ化されたアプリケーションのための高性能な管理サービスを提供します。Alibaba Cloud の仮想化、ストレージ、ネットワーキング、およびセキュリティ機能と統合して、クラスターの作成とスケーリングを簡素化し、コンテナ化されたアプリケーションの開発と管理に集中できるようにします。
ACK Pro クラスターでは、ACS Pod を作成する前に、手動で仮想ノードをデプロイする必要があります。クラスターをスケールアウトする必要がある場合、ノード容量を計画することなく、オンデマンドで仮想ノード上に ACS Pod を作成できます。ACS Pod は、通常のクラスターノード上の Pod と通信できます。長時間実行され、トラフィックが変動するワークロードについては、仮想ノードにスケジューリングすることを推奨します。このアプローチは、リソース使用率を最大化し、スケールアウト時間を短縮し、コストを削減します。トラフィックが減少した場合は、これらの Pod を迅速に解放してコストを削減できます。仮想ノード上の各 Pod は、安全で隔離されたコンテナ環境内で ACS インスタンスとして実行されます。詳細については、「ACK の概要」をご参照ください。
前提条件
初めてサービスを使用する場合は、必要なサービスを有効化し、必要な権限を付与してください:
Container Service for Kubernetes を有効化し、デフォルトロールに権限を付与し、必要なクラウドサービスを有効化してください。詳細については、「ACK Pro クラスターの作成」をご参照ください。
Container Compute Service コンソールにログインし、画面の指示に従って ACS を有効化してください。
Kubernetes 1.26 以降のACK Pro クラスターが必要です。詳細については、「ACK Pro クラスターの作成」をご参照ください。クラスターのアップグレード方法については、「ACK クラスターのアップグレード」をご参照ください。
ACK Pro クラスターの場合、仮想ノードコンポーネント (ACK 仮想ノード) は、Kubernetes バージョンに対応するバージョン要件を満たす必要があります。
Kubernetes バージョン
ACK 仮想ノードコンポーネントバージョン
1.26 以降
v2.13.0 以降
ACK 仮想ノードコンポーネントのインストール
次の手順を実行します:
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
コアコンポーネント タブで、[ACK 仮想ノード] コンポーネントを見つけ、インストール または アップグレード をクリックして必要なバージョンにします。
クラスター詳細ページの左側メニューで [Operations] > [Component Management] を選択して、コンポーネント管理ページに移動することもできます。
[ACK 仮想ノード] をインストールする前に [Activate and Authorize ACS] のプロンプトが表示された場合は、画面の指示に従ってください。ACS を有効化して必要な権限を付与した後、OK をクリックしてインストールを続行してください。
インストールが完了したら、左側メニューで を選択します。新しい仮想ノードの名前は、デフォルトで
virtual-kubelet-で始まります。
例:ACS CPU コンピューティングパワーの使用
[ACK 仮想ノード] コンポーネントが前提条件で指定されたバージョンにインストールまたはアップグレードされると、ACS と ECI の両方のコンピューティングパワーをサポートします。
Pod を仮想ノードにスケジューリングする場合、ACS を指定しない限り、デフォルトでElastic Container Instance (ECI) のコンピューティングパワーが使用されます。
ACK で ACS CPU コンピューティングパワーを使用するには、次の手順を実行します:
nodeSelector、ノードアフィニティ、ResourcePolicy などの方法を使用するか、
alibabacloud.com/acs: "true"ラベルを追加して、Pod を仮想ノードにスケジューリングします。詳細については、「ノードアフィニティ」をご参照ください。説明alibabacloud.com/acs: "true"ラベルを使用したスケジューリングは、ACK Serverless クラスターではサポートされていません。現在、ACK Pro クラスター、ACK 専用クラスター、ACK One 登録済みクラスター、およびACK Edge クラスターでサポートされています。ラベル
alibabacloud.com/compute-class:<compute-type>を使用して、ACS Pod のインスタンスタイプを指定します。ACS インスタンスタイプの詳細については、「ACS Pod インスタンス」をご参照ください。
次の手順で詳細な例を示します:
Deployment をデプロイします。
重要alibabacloud.com/acs: "true"ラベルを追加して Pod をスケジューリングする場合、WaitForFirstConsumerタイプの StorageClass はサポートされません。したがって、ACK クラスターで ACS コンピューティングパワーを使用し、ACS Pod がクラウドディスクをマウントする必要がある場合は、nodeSelector または ResourcePolicy を使用して Pod を仮想ノードにスケジューリングしてください。ResourcePolicy の設定方法の詳細については、「ACK Pro クラスターは ECS と ACS のコンピューティングパワーのハイブリッドスケジューリングをサポート」をご参照ください。NodeSelector
次のコマンドを実行して、仮想ノードのラベルを表示します。
virtual-kubelet-cn-hangzhou-kを実際の仮想ノード名に置き換えてください。kubectl get node virtual-kubelet-cn-hangzhou-k -oyaml次の出力は、
labelsセクションのスニペットです: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次の内容で 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 の QoS クラスを指定します。デフォルト:default。 spec: nodeSelector: type: virtual-kubelet # Pod を仮想ノードにスケジューリングします。 tolerations: - key: "virtual-kubelet.io/provider" # 仮想ノードの Taint を許容 (Tolerate) します。 operator: "Exists" effect: "NoSchedule" containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2NGINX アプリケーションを作成し、デプロイ結果を確認します。
次のコマンドを実行して、NGINX アプリケーションを作成します。
kubectl apply -f nginx.yaml次のコマンドを実行して、デプロイ結果を確認します。
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>出力は、
nodeSelectorが 2 つの Pod をラベルtype=virtual-kubeletを持つノードにスケジューリングしたことを示しています。
Pod ラベルスケジューリング
次の内容で 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 コンピューティングパワーを使用するように Pod を設定します。 alibabacloud.com/compute-class: general-purpose # ACS Pod のコンピューティングクラスを指定します。デフォルト:general-purpose。 alibabacloud.com/compute-qos: default # ACS Pod の QoS クラスを指定します。デフォルト:default。 spec: containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2NGINX アプリケーションを作成し、デプロイ結果を確認します。
次のコマンドを実行して、NGINX アプリケーションを作成します。
kubectl apply -f nginx.yaml次のコマンドを実行して、デプロイ結果を確認します。
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 が
alibabacloud.com/acs: "true"ラベルで指定されたとおりに仮想ノードにスケジューリングされていることを示しています。
NGINX 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: serverlessalibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxxアノテーションは、Pod が ACS Pod インスタンスであることを確認します。
例:ACS GPU コンピューティングパワーの使用
ACS GPU コンピューティングパワーを使用する手順は、ACS CPU コンピューティングパワーの場合と似ていますが、特定のコンポーネントバージョンといくつかの追加設定が必要です。
コンポーネント設定
異なる Kubernetes バージョンのACK Pro クラスターでは、kube-scheduler コンポーネントが次のバージョン要件を満たす必要があります。
Kubernetes バージョン | kube-scheduler バージョン |
1.26 以降 |
|
使用方法
...
labels:
# ラベルで 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 コンピューティングクラスと QoS クラスの詳細については、「コンピューティングクラスと QoS クラスの関係」をご参照ください。
gpu-model-seriesで利用可能な GPU モデルについては、「ACS GPU アクセラレーション Pod の GPU モデルとドライバーバージョンの指定」をご参照ください。alibabacloud.com/acs: "true"ラベルを使用したスケジューリングは、ACK Serverless クラスターではサポートされていません。現在、ACK Pro クラスター、ACK 専用クラスター、ACK One 登録済みクラスター、およびACK Edge クラスターでサポートされています。
以下の例は、GPU コンピューティングパワーを設定する 3 つの異なる方法を示しています。
NodeSelector
次の YAML を使用して 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: # 仮想ノードのラベルを指定します。 nodeSelector: type: virtual-kubelet # 仮想ノードの Taint を許容 (Tolerate) します。 tolerations: - key: "virtual-kubelet.io/provider" # 仮想ノードの Taint を許容 (Tolerate) します。 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"ResourcePolicy
次の YAML を使用して GPU ワークロードを作成します。
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: dep-rp-demo namespace: default spec: selector: app: dep-rp-demo units: - resource: acs podLabels: alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # GPU モデルシリーズ。T4 など、実際のモデルに置き換えてください。 --- apiVersion: apps/v1 kind: Deployment metadata: name: dep-rp-demo labels: app: dep-rp-demo annotations: resourcePolicy: "dep-rp-demo" # ResourcePolicyの名前を参照します。 spec: replicas: 1 selector: matchLabels: app: dep-rp-demo template: metadata: labels: app: dep-rp-demo alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # GPU モデルシリーズ。T4 など、実際のモデルに置き換えてください。 spec: containers: - name: 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"ResourcePolicy を使用したリソーススケジューリングの詳細については、「カスタムリソースの優先度スケジューリング」をご参照ください。
Pod ラベルスケジューリング
次の YAML を使用して 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 コンピューティングパワーを使用するように Pod を設定します。 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"
Example: Use ACS GPU HPN computing power
The process for using ACS GPU HPN computing power is similar to that for ACS CPU computing power, but with the following requirements:
This feature is supported only in ACK Pro clusters, ACK One registered clusters, and ACK One distributed workflow Argo clusters.
You must purchase GPU-HPN capacity reservations in advance and associate them with your cluster.
The kube-scheduler version must meet the following requirements:
Kubernetes version
kube-scheduler version
1.28
v1.28.12-aliyun-6.9.3.cd73f3fe or later.
1.30
v1.30.3-aliyun.6.9.3.ce7e2faf or later.
1.31
v1.31.0-aliyun.6.9.3.051bb0e8 or later.
1.32
v1.32.0-aliyun.6.9.3.515ac311 or later.
1.33
v1.33.0-aliyun.6.9.4.8b58e6b4 or later.
The ACK Virtual Node component must be v2.15.0 or later.
Usage
...
labels:
# Declare the ACS GPU resource requirement in the labels.
alibabacloud.com/compute-class: gpu-hpn # Must be set to gpu-hpn.
alibabacloud.com/compute-qos: default # The QoS class. This has the same meaning as for regular ACS computing power.
...For more information about ACS compute classes and QoS classes, see Relationship between compute classes and QoS classes.
For information about other parameters for ACS Pods, see Configure an ACS Pod.
An ACS GPU HPN node can only schedule Pods of the
gpu-hpncompute class. You do not need to specify GPU resource requirements in the Pod resource declaration for these Pods. The node cannot schedule Pods of other compute classes or Pods for which no compute class is declared.
You can use a Kubernetes nodeSelector to schedule Pods to GPU HPN nodes.
重要When you configure an ACS GPU HPN Pod, note the following fields:
Specify the compute class:
alibabacloud.com/compute-class: gpu-hpn.Specify the reserved node label:
alibabacloud.com/node-type: reserved.For the device resource name in the
requestsandlimitsfields of a resource specification, specify the name based on the actual device card type, such as NVIDIA or others.
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 attributes alibabacloud.com/compute-class: gpu-hpn alibabacloud.com/compute-qos: default spec: # Specify the label for GPU HPN reserved nodes. 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" # Use the resource name that matches your actual GPU model. requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" # Use the resource name that matches your actual GPU model.Check the running status of the GPU workload.
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlExpected output (key information):
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"