このトピックでは、仮想ノードを使用して、ACK One 登録済みクラスターから Alibaba Cloud Serverless (ACS) の計算能力に Pod をスケジュールする方法について説明します。仮想ノードを使用すると、物理ノードをプロビジョニングまたは管理することなく、ACS 上でワークロードを実行できます。
仕組み
仮想ノードは、ACS の計算能力をお客様の ACK One 登録済みクラスターに統合します。`ack-virtual-node` コンポーネントをインストールすると、お客様のクラスターに仮想ノードが作成されます。Pod を仮想ノードにスケジュールすると、ACS はその Pod 用にサーバーレス計算リソースを自動的にプロビジョニングします。Pod は ACS 上の分離された環境で実行され、クラスター内の他の Pod と通信できます。仮想ノードは、物理ノードのプロビジョニングや管理を必要とせずにオンデマンドでスケールするため、トラフィックパターンが変動的または予測不能なワークロードに最適です。
仮想ノードの詳細については、「登録済みクラスターの概要」をご参照ください。
前提条件
ACK One 登録済みクラスターを作成し、Kubernetes クラスターに接続済みであること。Kubernetes 1.24 以降が必要です。詳細については、「ACK One 登録済みクラスターの作成」をご参照ください。
登録済みクラスターに、バージョン 2.13.0 以降の
ack-virtual-nodeコンポーネントがインストールされている必要があります。 詳細については、「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.
コンソール
コンポーネントをインストールする前に、RAM ユーザーを作成し、必要な権限を付与し、その AccessKey を作成します。この AccessKey を使用して、コンポーネントがクラウドサービスにアクセスできるようにする Secret を作成します。
RAM コンソールに移動します。
(オプション) カスタムポリシーを作成します。次のポリシー内容を使用します。
RAM ユーザーに権限を付与する。システムポリシーの
AliyunECIFullAccess、AliyunVPCReadOnlyAccess、およびAliyunAccFullAccessをアタッチするか、作成したカスタムポリシーをアタッチできます。RAM ユーザーの AccessKey を作成します。
警告「AccessKey のネットワークアクセス制御ポリシー」で説明されているように、ネットワークアクセス制御ポリシーを設定して、AccessKey の呼び出しを信頼できるネットワーク環境に制限します。これにより、AccessKey のセキュリティが強化されます。
AccessKey を使用して、登録済みクラスターに
alibaba-addon-secretという名前のシークレットを作成します。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-virtual-nodeコンポーネントをインストールすると、この AccessKey を使用して、対応するクラウドサービスに自動的にアクセスします。
例:ACS CPU 計算能力の使用
ack-virtual-node コンポーネントをバージョン 2.13.0 以降にインストールまたはアップグレードすると、ACS と Elastic Container Instance (ECI) の両方の計算能力がサポートされます。
Pod が仮想ノードにスケジュールされるシナリオでは、計算能力タイプとして ACS を指定しない場合、デフォルトで ECI が使用されます。
ACK One 登録済みクラスターで 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)。
サーバーレス kubelet サービスがリッスンするポート。
ACS 計算能力を使用する Deployment を作成します。
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>出力から、2つの Pod が
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出力に
Annotation alibabacloud.com/instance-id: acs-uf6008giwgjxlvn*****が含まれている場合、その Pod は ACS Pod インスタンスです。
例:ACS GPU 計算能力の使用
ACK One 登録済みクラスター向けの ACS GPU 計算能力は招待プレビュー中です。この機能を有効にするには、チケットを送信してください。
GPU ワークロードの設定
機能が有効になったら、GPU ワークロードを設定できます。次の例は、Pod を 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 クラスの詳細については、「コンピューティングタイプと計算能力品質のマッピング」をご参照ください。
gpu-model-seriesラベルで利用可能な GPU モデルについては、「ACS GPU Pod の GPU モデルとドライバーバージョンを指定する」をご参照ください。
次のサンプル 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 計算能力を使用するように設定します。 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"
例:ACS GPU HPN 計算能力の使用
ACS GPU HPN 計算能力を使用するプロセスは、ACS CPU 計算能力を使用する場合と似ていますが、次の要件があります。
事前に GPU-HPN キャパシティ予約を購入し、クラスターに関連付ける必要があります。
ACS GPU HPN の計算能力には、
ack-virtual-nodeコンポーネントのアップグレードが必要です。必要なコンポーネントのバージョンは現在、招待プレビュー中です。この機能を有効にするには、チケットを送信してください。
GPU HPN ワークロードの設定
ACS GPU HPN 計算能力を使用するには、Pod 仕様で次のラベルを設定します。
...
labels:
# ラベルで 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 タイプのノードは、
gpu-hpnコンピュートクラスの Pod のみをスケジュールできます。GPU リソース要件は、Pod のリソース宣言から省略できます。これらのノードは、他のコンピュートクラスの Pod、またはコンピュートクラスが宣言されていない Pod をスケジュールできません。
Pod を GPU HPN ノードにスケジュールするには、Kubernetes の
nodeSelectorを使用します。例: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" # 実際のカードモデルに基づいて対応するリソース名を入力します。重要ACS GPU HPN タイプの Pod については、次のフィールド設定に注意してください。
コンピューティングクラスに
alibabacloud.com/compute-class: gpu-hpnを指定します。予約済みノードラベルには、
alibabacloud.com/node-type: reservedを指定します。リソース仕様の
requestsおよびlimitsフィールドにあるデバイスリソース名には、NVIDIA などの実際のデバイスモデルを使用します。
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"