Container Compute Service (ACS) は Container Service for Kubernetes に統合されています。これにより、ACK Pro クラスター で ACS のコンピューティング能力を使用できます。このトピックでは、ACK Pro クラスターで ACS のコンピューティング能力を使用する方法について説明します。
ACK Pro クラスターで ACS のコンピューティング能力を使用する方法
Container Compute Service (ACS) は、Kubernetes のコンテナ仕様に準拠したコンテナコンピューティングリソースを提供するクラウドコンピューティングサービスです。ACS は、階層型アーキテクチャを採用して Kubernetes の制御とコンピューティング能力を実装しています。コンピューティングリソース層は、Pod にリソースをスケジュールおよび割り当てます。Kubernetes 制御層は、デプロイメント、サービス、ステートフルセット、CronJob などのワークロードを管理します。
ACS のコンピューティング能力は、仮想ノードを使用して Kubernetes クラスターに実装できます。このように、Kubernetes クラスターは高い弾力性を備え、クラスターノードのコンピューティング容量に制限されなくなります。ACS を使用して Pod のインフラストラクチャ管理を引き継いだ後、Kubernetes クラスターは個々の Pod をスケジュールまたは起動する必要がなくなります。さらに、Kubernetes クラスターは基盤となる VM のリソースを気にする必要がなくなります。ACS はいつでも Pod のリソース要件を満たすことができます。
Container Service for Kubernetes (ACK) は、世界で初めて Certified Kubernetes Conformance Program に参加したサービスの 1 つです。ACK は、高性能なコンテナ化アプリケーション管理サービスを提供します。ACK は、Alibaba Cloud によって提供される仮想化、ストレージ、ネットワーク、およびセキュリティ機能と統合されています。ACK は、クラスターのセットアップとスケーリングを簡素化し、コンテナ化アプリケーションの開発と管理に集中できるようにします。
ACK Pro クラスター に ACS Pod を作成する前に、クラスターに仮想ノードをデプロイする必要があります。ACK Pro クラスターをスケールアウトする必要がある場合は、仮想ノードのリソース容量を計画することなく、仮想ノードに ACS Pod を作成できます。ACS Pod は、クラスター内の物理ノード上の Pod と通信できます。ワークロードが定期的に変動する長期アプリケーションを仮想ノードにデプロイすることをお勧めします。これにより、リソース使用率が向上し、リソースコストが削減され、スケーリングプロセスが高速化されます。アプリケーションのワークロードが減少した場合は、仮想ノードから Pod を削除してリソースコストを削減できます。仮想ノード上の Pod は、ACS 上に構築された安全で隔離された環境で実行されます。この場合、Pod は ACS Pod と呼ばれます。詳細については、「ACK クラスターの概要」をご参照ください。
前提条件
ACK Pro クラスターで ACS のコンピューティング能力を使用するには、最初に必要なクラウドサービスをアクティブ化し、必要な権限を付与する必要があります。
Container Service for Kubernetes をアクティブ化し、ACS にデフォルトのロールを割り当て、その他の必要なクラウドサービスをアクティブ化します。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
ACS コンソール にログオンします。画面の指示に従って ACS をアクティブ化します。
Kubernetes 1.26 以降を実行する ACK Pro クラスター が作成されます。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。クラスターを更新する方法の詳細については、「ACK クラスターを手動でアップグレードする」をご参照ください。
ACK Pro クラスター の Kubernetes バージョンに基づいて、特定のバージョンの ACK Virtual Node コンポーネントをインストールする必要があります。次の表に、バージョンのマッピングの詳細を示します。
Kubernetes バージョン
ACK Virtual Node バージョン
≥ 1.26
≥ v2.13.0
ACK Virtual Node をインストールして ACS のコンピューティング能力を実装する
ACS のコンピューティング能力は、仮想ノードを使用して ACK クラスターに実装できます。このように、Kubernetes クラスターは高い弾力性を備え、クラスターノードのコンピューティング容量に制限されなくなります。次のセクションでは、SFTP を使用してファイルを転送する方法について説明します。
ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[コアコンポーネント] タブで、[ACK 仮想ノード] を選択し、[インストール] をクリックしてコンポーネントをインストールするか、[更新] をクリックしてコンポーネントを必要なバージョンに更新します。

[ACK Virtual Node] をインストールするときに、コンソールから [ACS をアクティブ化して権限を付与する] よう求められた場合は、画面の指示に従って ACS をアクティブ化して権限を付与します。[OK] をクリックします。
コンポーネントをインストールした後、クラスタ詳細ページの左側のナビゲーションウィンドウで を選択します。デフォルトでは、仮想ノードの名前には
virtual-kubelet-というプレフィックスが付いています。
例
前提条件 セクションの説明に従って、必要なバージョンの ACK Virtual Node をインストールするか、コンポーネントを必要なバージョンに更新した後、ACS Pod と Elastic Container Instance を作成できます。
仮想ノードに Pod をスケジュールするときに、Pod のコンピューティングクラスを指定しないと、デフォルトで Elastic Container Instance が Pod スケジューリングの優先順位付けられます。
ACK クラスターで ACS のコンピューティング能力を実装するには、次の手順を実行します。
ノードセレクター、affinity および anti-affinity ルール、ResourcePolicy、および
alibabacloud.com/acs: "true"ラベルを構成して、Pod を仮想ノードにスケジュールします。詳細については、「ノード affinity スケジューリング」をご参照ください。説明alibabacloud.com/acs: "true"ラベルは、サーバーレス Kubernetes クラスター には適用されません。これは、ACK マネージドクラスター、専用クラスター、ACK One 登録済みクラスター、および ACK Edge クラスター に適用されます。ACS Pod を作成するときは、Pod に alibabacloud.com/compute-class:Compute class ラベルを追加して、Pod のコンピューティングクラスを指定します。ACS Pod のコンピューティングクラスの詳細については、「ACS Pod の概要」をご参照ください。
次のセクションでは、SFTP を使用してファイルを転送する方法について説明します。
デプロイメントを作成します。
重要alibabacloud.com/acs: "true"Pod ラベルを使用して Pod を仮想ノードにスケジュールする場合、WaitForFirstConsumerStorageClass はサポートされていません。したがって、ACK クラスターでディスクがマウントされている 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 を仮想ノードにスケジュールする場合は、このラベルを Pod のノードセレクターとして構成できます。 name: virtual-kubelet-cn-hangzhou-k spec: taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud次のコンテンツに基づいて nginx.yaml という名前の 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 # 仮想ノードを選択するために使用されるノードセレクター。 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: 2NGINX アプリケーションをデプロイし、Pod をクエリします。
次のコマンドを実行して、NGINX アプリケーションをデプロイします。
kubectl apply -f nginx.yaml次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。
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>この結果から、2 つの Pod が
type=virtual-kubeletラベルを持つノードにデプロイされていることがわかります。これは、デプロイメント構成のnodeSelectorパラメーターで指定されています。
Pod ラベルに基づいて 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 のコンピューティング能力を使用します。 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 アプリケーションをデプロイし、Pod をクエリします。
次のコマンドを実行して、NGINX アプリケーションをデプロイします。
kubectl apply -f nginx.yaml次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。
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>この結果から、2 つの Pod が
type=virtual-kubeletラベルを持つノードにデプロイされていることがわかります。これは、デプロイメント構成のnodeSelectorパラメーターで指定されています。
NGINX アプリケーション用に 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 であることを示しています。
例
ACS GPU コンピューティング能力を使用する手順は、ACS CPU コンピューティング能力を使用する手順と似ています。ただし、スケジューリングコンポーネントがバージョン要件を満たしていることを確認し、追加の構成を追加する必要もあります。
コンポーネントを構成する
ACK Pro クラスター の Kubernetes バージョンに基づいて、特定のバージョンの kube-scheduler コンポーネントをインストールする必要があります。次の表に、バージョンのマッピングの詳細を示します。
Kubernetes バージョン | スケジューラーバージョン |
≥ 1.26 | Kubernetes のさまざまなバージョンに対応するスケジューラーバージョン:
|
アクティブ化する方法
ACK クラスターで ACS GPU コンピューティング能力を使用する機能は、招待プレビューです。この機能を使用するには、チケットを提出 して機能をアクティブ化する必要があります。
この機能の使用方法
...
labels:
# ACS GPU リソースをリクエストするためのラベルを追加します。
alibabacloud.com/compute-class: gpu #GPU 処理能力を使用する場合は gpu に設定します。
alibabacloud.com/compute-qos: default #QoS クラス。通常の ACS 処理能力と同じです。
alibabacloud.com/gpu-model-series: GN8IS # GPU モデル。実際に使用するモデルを指定します。
...ACS コンピュートクラスと QoS クラスの関係の詳細については、「コンピューティングクラスと QoS クラスの関係」をご参照ください。
gpu-model-seriesでサポートされている GPU モデルの詳細については、「ACS GPU アクセラレーション ポッドの GPU モデルとドライバーバージョンを指定する」をご参照ください。alibabacloud.com/acs: "true"ラベルは、Serverless Kubernetes クラスターには適用されません。 ACK マネージドクラスター、専用クラスター、ACK One 登録済みクラスター、および ACK Edge クラスターに適用されます。
次のセクションでは、GPU コンピューティングパワーの使用例を 3 つ示します。
NodeSelector
以下の内容に基づいて、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 # 許容される汚染。 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"ResourcePolicy
以下の内容に基づいて、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 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 を使用してリソースをスケジュールする方法の詳細については、「カスタムの優先順位に基づくリソーススケジューリング」をご参照ください。
ポッドラベルに基づいてポッドをスケジュールする
以下の内容に基づいて、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: #その他のリソース nvidia.com/gpu: "1" requests: #その他のリソース nvidia.com/gpu: "1"
ACK での ACS GPU-HPN ポッドの使用例
ACS GPU-HPN ポッドは、ACS CPU アクセラレーテッドポッドと同じ方法で使用できます。以下の要件が満たされていることを確認してください。
ACS GPU-HPN ポッドは、ACK マネージドクラスター、ACK One 登録済みクラスター、および分散 Argo ワークフロー用の ACK One Kubernetes クラスターでのみ使用できます。
最初に GPU-HPN キャパシティ予約 を購入し、クラスターに関連付ける必要があります。
kube-scheduler および ACK Virtual Node コンポーネントを更新および構成する必要があります。コンポーネントのバージョンは招待プレビュー中です。[チケットの送信] してこれらのバージョンに更新してください。
手順
...
labels:
# ACS GPU リソースをリクエストするためのラベルを追加します。
alibabacloud.com/compute-class: gpu-hpn #gpu-hpn に設定します。
alibabacloud.com/compute-qos: default #QoS クラス。
...コンピューティングクラスと QoS クラスの詳細については、「コンピューティングクラスとコンピューティングパワー QoS クラスのマッピング」をご参照ください。
その他の ACS ポッドパラメーターの詳細については、「ACS Pod」をご参照ください。
Kubernetes NodeSelector を構成して、ポッドを GPU-HPN ノードにスケジュールできます。
重要ACS GPU-HPN ポッドを構成する際は、次のパラメーターに注意してください。
alibabacloud.com/compute-class: gpu-hpn: コンピューティングクラスを指定します。alibabacloud.com/node-type: reserved: 予約ノードを指定します。実際のモデルに基づいて
requestsとlimitsを構成します。
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 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: #その他のリソース nvidia.com/gpu: "1" requests: #その他のリソース nvidia.com/gpu: "1"