Container Compute Service (ACS) は、仮想ノードを介して ACK Pro マネージドクラスターにサーバーレスなコンテナー計算能力を提供します。仮想ノードにスケジュールされた Pod は、基盤となるインフラストラクチャやノード容量の計画を管理することなく、安全で分離された ACS 環境で実行されます。
仕組み
ACS はレイヤー化されたアーキテクチャを採用しています。
計算リソースレイヤー:Pod へのリソースのスケジュールと割り当てを実行します。
Kubernetes コントロールレイヤー:Deployment、Service、StatefulSet、CronJob などのワークロードを管理します。
仮想ノードは、ACS の計算能力を ACK クラスターに統合するブリッジとして機能します。ACK Virtual Node コンポーネントをインストールすると、これらの仮想ノードにスケジュールされた Pod は ACS Pod になります。ACS Pod は、同一クラスター内の物理ノード上の Pod と通信できます。
仮想ノードの利用タイミング
仮想ノードは、ワークロードが周期的に変動する長期間稼働型アプリケーションに推奨されます。主なメリットは以下のとおりです。
リソース利用率の向上とコスト削減。
ノード容量の事前プロビジョニング不要で、高速なスケーリングが可能。
ワークロードが減少した際に、仮想ノードから Pod を削除することでコストを節約。
制限事項
| 制限事項 | 説明 |
|---|---|
| StorageClass 制限 | WaitForFirstConsumer StorageClass は、Pod ラベル alibabacloud.com/acs: "true" を使用する場合にサポートされません。ACK クラスター内で ACS Pod にディスクをマウントするには、nodeSelector または ResourcePolicy を使用してください。詳細については、「ACK Pro クラスターにおける ECS インスタンスと ACS 計算能力のコロケートスケジューリング」をご参照ください。 |
acs: "true" ラベルのクラスタータイプ制限 | ACK マネージドクラスター、ACK 専有クラスター、ACK One 登録済みクラスター、および ACK Edge クラスターに適用されます。ACK Serverless クラスターには適用されません。 |
| デフォルトのスケジューリング動作 | 計算クラスを指定しない場合、Pod スケジューリングにはデフォルトでエラスティックコンテナインスタンスが使用されます。 |
| GPU 計算能力(招待プレビュー) | GPU 計算能力を有効にするには、チケットを送信してください。 |
| GPU-HPN 計算能力(招待プレビュー) | 分散 Argo ワークフロー向けの ACK マネージドクラスター、ACK One 登録済みクラスター、および ACK One Kubernetes クラスターでのみ利用可能です。コンポーネントバージョンは招待プレビュー段階であり、必要なバージョンについてはサポートチケットを送信してください。 |
前提条件
作業を開始する前に、以下の準備が完了していることを確認してください。
Container Service for Kubernetes (ACK) を有効化し、ACS にデフォルトロールを割り当て、その他の必要なクラウドサービスを有効化済みであること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
ACSコンソールにログインし、画面の指示に従ってACSをアクティブ化しました。
Kubernetes 1.26 以降を実行している ACK Pro マネージドクラスターがあること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。既存のクラスターをアップグレードする場合は、「ACK クラスターの手動アップグレード」をご参照ください。
ACK Virtual Node バージョン v2.13.0 以降がインストール済みであること(Kubernetes 1.26+ で必須)。
ACK Virtual Node のインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオン をクリックします。
コアコンポーネント タブで、ACK Virtual Node を見つけ、インストール をクリックします。すでにインストール済みの場合は、更新 をクリックして、必要なバージョンにアップグレードします。

ACS の有効化および権限付与を求められた場合は、画面の指示に従って、OK をクリックします。
インストールの確認
インストール後、仮想ノードが利用可能かどうかを確認します。
クラスター詳細ページの左側ナビゲーションウィンドウで、ノード > ノード を選択します。
ノードリストに、
virtual-kubelet-で始まるノードが表示されていることを確認します。
CPU Pod を仮想ノードにスケジュール
以下の 3 つのスケジューリング方法を利用できます。ディスクおよびスケジューリング要件に応じて選択してください。ノードアフィニティスケジューリングの詳細については、「ノードアフィニティスケジューリング」をご参照ください。
| 方法 | 最適な用途 | ディスクサポート |
|---|---|---|
| nodeSelector | どの仮想ノードで Pod を実行するかを直接制御したい場合 | 完全対応(WaitForFirstConsumer StorageClass を含む) |
Pod ラベル (alibabacloud.com/acs: "true") | Toleration やセレクターの設定なしでシンプルな構成を実現したい場合 | WaitForFirstConsumer StorageClass は非対応 |
| ResourcePolicy | ECS および ACS リソースを横断する優先度ベースのスケジューリング | 完全対応(WaitForFirstConsumer StorageClass を含む) |
方法 1:nodeSelector
この方法では、仮想ノードに付与されている type: virtual-kubelet ラベルと、仮想ノードの Taint に対する Toleration を使用します。
利用可能なノードを特定するために、仮想ノードのラベルを照会します。出力内の主要ラベルは以下のとおりです。
kubectl get node virtual-kubelet-cn-hangzhou-k -oyamllabels: type: virtual-kubelet # これを nodeSelector として使用 kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k topology.kubernetes.io/zone: cn-hangzhou-k taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud # この Taint を許容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/compute-class: general-purpose # 計算クラス。デフォルト:general-purpose。 alibabacloud.com/compute-qos: default # QoS クラス。デフォルト:default。 spec: nodeSelector: type: virtual-kubelet # 仮想ノードを対象とする。 tolerations: - key: "virtual-kubelet.io/provider" # 仮想ノードの Taint を許容。 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デプロイして確認します。期待される出力:両方の Pod が
virtual-kubelet-*ノードにスケジュールされています。kubectl apply -f nginx.yaml kubectl get pods -o wideNAME 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 ラベル
nodeSelector や Toleration を構成せずに、Pod を仮想ノードにスケジュールするには、alibabacloud.com/acs: "true" ラベルを追加します。
このラベルは ACK Serverless クラスターには適用されません。ACK マネージドクラスター、ACK 専有クラスター、ACK One 登録済みクラスター、および ACK Edge クラスターに適用されます。
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
alibabacloud.com/compute-qos: default
spec:
containers:
- name: nginx
image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
resources:
limits:
cpu: 2
requests:
cpu: 2デプロイおよび確認は、方法 1 と同様に行います。
Pod が ACS Pod であることを確認
デプロイ後、Pod が ACS Pod として実行されていることを確認します。
kubectl describe pod nginx-9cdf7bbf9-s****出力内の alibabacloud.com/instance-id アノテーションを確認します。
Annotations:
alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx
alibabacloud.com/pod-use-spec: 2-4Giacs-* 形式のインスタンス ID により、Pod が ACS 計算能力上で実行されていることが確認できます。
GPU Pod を仮想ノードにスケジュール
ACS GPU 計算能力は CPU Pod と同じスケジューリング方法を採用しますが、追加のコンポーネント要件およびラベルが必要です。
ACS GPU 計算能力は招待プレビュー段階です。有効化するには、チケットを送信してください。
コンポーネント要件
ご利用のクラスターの Kubernetes バージョンに応じて、必要な kube-scheduler バージョンをインストールします。
| Kubernetes バージョン | 最低限必要な kube-scheduler バージョン |
|---|---|
| 1.31 | v1.31.0-aliyun.6.8.4.8f585f26 |
| 1.30 | v1.30.3-aliyun.6.8.4.946f90e8 |
| 1.28 | v1.28.12-aliyun-6.8.4.b27c0009 |
| 1.26 | v1.26.3-aliyun-6.8.4.4b180111 |
kube-scheduler コンポーネントの詳細については、「kube-scheduler」をご参照ください。
GPU Pod のラベル
すべての GPU スケジューリング方法において、Pod に以下のラベルが必要です。
labels:
alibabacloud.com/compute-class: gpu # 計算クラスを gpu に設定。
alibabacloud.com/compute-qos: default # QoS クラス。
alibabacloud.com/gpu-model-series: <gpu-model> # GPU モデル(例:T4 または GN8IS)。計算クラスと QoS クラスのマッピングについては、「計算クラスと QoS クラスの関係」をご参照ください。
サポートされている GPU モデルについては、「ACS GPU アクセラレーション Pod の GPU モデルおよびドライバーバージョンの指定」をご参照ください。
例:nodeSelector を使用した GPU Pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-demo
labels:
app: gpu-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-demo
template:
metadata:
labels:
app: gpu-demo
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # ご利用の GPU モデル(例:T4)に置き換え。
spec:
nodeSelector:
type: virtual-kubelet
tolerations:
- key: "virtual-kubelet.io/provider"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: gpu-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 Pod
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: gpu-rp-demo
namespace: default
spec:
selector:
app: gpu-rp-demo
units:
- resource: acs
podLabels:
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # ご利用の GPU モデル(例:T4)に置き換え。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-rp-demo
labels:
app: gpu-rp-demo
annotations:
resourcePolicy: "gpu-rp-demo" # ResourcePolicy を参照。
spec:
replicas: 1
selector:
matchLabels:
app: gpu-rp-demo
template:
metadata:
labels:
app: gpu-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 スケジューリングの詳細については、「カスタム優先度に基づくリソーススケジューリング」をご参照ください。
例:Pod ラベルを使用した GPU Pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-demo
labels:
app: gpu-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-demo
template:
metadata:
labels:
app: gpu-demo
alibabacloud.com/acs: "true" # ACS 仮想ノードにスケジュール。
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: <gpu-model> # ご利用の GPU モデル(例:T4)に置き換え。
spec:
containers:
- name: gpu-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 Pod のステータス確認
kubectl get pod gpu-demo-9cdf7bbf9-s**** -oyamlPod が実行中であり、GPU リソースが割り当てられていることを確認します。
phase: Running
resources:
limits:
nvidia.com/gpu: "1"
requests:
nvidia.com/gpu: "1"GPU-HPN Pod を仮想ノードにスケジュール
ACS GPU-HPN(ハイパフォーマンスネットワーキング)Pod は、キャパシティリザベーションが必要であり、予約済みノードを使用してスケジュールされます。
GPU-HPN の前提条件
作業を開始する前に、以下の準備が完了していることを確認してください。
分散 Argo ワークフロー向けの ACK マネージドクラスター、ACK One 登録済みクラスター、または ACK One Kubernetes クラスターがあること。
GPU-HPN キャパシティリザベーションを購入済みであり、ご利用のクラスターに関連付け済みであること。
kube-scheduler および ACK Virtual Node コンポーネントを GPU-HPN 対応バージョンに更新済みであること(招待プレビュー段階。必要なバージョンについてはチケットを送信してください)。
GPU-HPN Pod のラベル
labels:
alibabacloud.com/compute-class: gpu-hpn # 計算クラスを gpu-hpn に設定。
alibabacloud.com/compute-qos: default # QoS クラス。計算クラスと QoS クラスのマッピングについては、「計算クラスと計算能力 QoS クラスのマッピング」をご参照ください。
その他の ACS Pod パラメーターについては、「ACS Pod」をご参照ください。
例:nodeSelector を使用した GPU-HPN Pod
ACS GPU-HPN Pod を構成する際は、以下の点にご注意ください。
alibabacloud.com/compute-classをgpu-hpnに設定します。nodeSelector
alibabacloud.com/node-typeをreservedに設定します。requestsおよびlimitsは、ご利用の GPU モデルに基づいて設定します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpu-hpn-demo
labels:
app: gpu-hpn-demo
spec:
replicas: 1
selector:
matchLabels:
app: gpu-hpn-demo
template:
metadata:
labels:
app: gpu-hpn-demo
alibabacloud.com/compute-class: gpu-hpn
alibabacloud.com/compute-qos: default
spec:
nodeSelector:
alibabacloud.com/node-type: reserved # GPU-HPN 予約済みノードを対象とする。
containers:
- name: gpu-hpn-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" # ご利用の GPU モデルに基づいて調整。
requests:
cpu: 1
memory: 1Gi
nvidia.com/gpu: "1" # ご利用の GPU モデルに基づいて調整。GPU-HPN Pod のステータス確認
kubectl get pod gpu-hpn-demo-9cdf7bbf9-s**** -oyamlPod が実行中であり、GPU リソースが割り当てられていることを確認します。
phase: Running
resources:
limits:
nvidia.com/gpu: "1"
requests:
nvidia.com/gpu: "1"