Container Compute Service (ACS) は、分散型クラウドコンテナー プラットフォーム for Kubernetes (ACK One) 登録済みクラスター に統合されています。 ACK One 登録済みクラスター を使用して、ACS によって提供される計算能力を迅速に使用できます。このトピックでは、ACK One の登録済みクラスター で ACS の計算能力を使用する方法について説明します。
ACS の計算能力を ACK One 登録済みクラスターで使用する方法
Container Compute Service (ACS) は、Kubernetes のコンテナー仕様に準拠したコンテナーコンピューティングリソースを提供するクラウドコンピューティングサービスです。ACS は、階層型アーキテクチャを採用して Kubernetes の制御と計算能力を実装しています。コンピューティングリソース層は、Pod にリソースをスケジュールおよび割り当てます。Kubernetes 制御層は、デプロイメント、サービス、ステートフルセット、CronJob などのワークロードを管理します。
ACS の計算能力は、仮想ノードを使用して Kubernetes クラスターに実装できます。このようにして、Kubernetes クラスターは高い弾力性を備え、クラスターノードの計算能力によって制限されなくなります。ACS を使用して Pod のインフラストラクチャ管理を引き継いだ後、Kubernetes クラスターは個々の Pod をスケジュールまたは起動する必要がなくなります。さらに、Kubernetes クラスターは基盤となる VM のリソースを気にする必要がなくなります。ACS はいつでも Pod のリソース要件を満たすことができます。
ACK One 登録済みクラスター では、ack-virtual-node コンポーネントをインストールして仮想ノードをデプロイし、ACS Pod を作成する必要があります。クラスターをスケールアウトする必要がある場合は、ノードのリソース容量を計画することなく、仮想ノードに ACS Pod を作成できます。ACS Pod は、クラスター内の物理ノード上の Pod と通信できます。リソースを効率的に使用し、スケーリング時間を短縮し、コストを削減するには、長期間実行され、仮想ノードへの弾力的なトラフィックを持つ特定のワークロードをスケジュールすることをお勧めします。ビジネストラフィックの数が減少すると、仮想ノード上の Pod を迅速に解放して使用コストを削減できます。仮想ノード上の Pod は、ACS 上に構築された安全で隔離された環境で実行されます。この場合、Pod は ACS Pod と呼ばれます。詳細については、「登録済みクラスターの概要」をご参照ください。
前提条件
ACK One 登録済みクラスター を作成し、クラスターをデータセンターまたは別のクラウド サービス プロバイダーの Kubernetes クラスターに接続します。Kubernetes 1.24 以降を選択することをお勧めします。詳細については、「登録済みクラスターを作成する」をご参照ください。
ACK 仮想ノードコンポーネントがインストールされており、コンポーネントのバージョンが 2.13.0 以降であること。詳細については、「手順 1: ack-virtual-node に RAM 権限を付与する」および「手順 2: ack-virtual-node をインストールする」をご参照ください。
ACK One 登録済みクラスターで ACS の CPU 計算能力を使用する方法
必要なバージョンの [ACK 仮想ノード] をインストールするか、コンポーネントをバージョン 2.13.0 以降に更新すると、ACS Pod とエラスティックコンテナーインスタンスを作成できます。
Pod を仮想ノードにスケジュールするときに、Pod のコンピューティングクラスを指定しないと、デフォルトで Pod のスケジューリングにエラスティックコンテナーインスタンスが優先されます。
ACK クラスターで ACS の計算能力を使用するには、次の手順を実行します。
ノードセレクター、アフィニティとアンチアフィニティルール、ResourcePolicy、および
alibabacloud.com/acs: trueラベルを構成して、Pod を仮想ノードにスケジュールします。詳細については、「ノードアフィニティスケジューリング」をご参照ください。ACS Pod を作成するときに、Pod に alibabacloud.com/compute-class:コンピューティングクラス ラベルを追加して、Pod のコンピューティングクラスを指定します。ACS Pod のコンピューティングクラスの詳細については、「ACS Pod の概要」をご参照ください。
次の手順を実行します。
デプロイメントを作成します。
NodeSelector
次のコマンドを実行して、仮想ノードのラベルをクエリします。次のコマンドの
virtual-kubelet-cn-shanghai-lを実際の仮想ノード名に置き換えます。kubectl get node virtual-kubelet-cn-shanghai-l -oyaml予期される出力:
apiVersion: v1 kind: Node metadata: labels: beta.kubernetes.io/arch: amd64 beta.kubernetes.io/os: linux kubernetes.io/arch: amd64 kubernetes.io/hostname: virtual-kubelet-cn-shanghai-l kubernetes.io/os: linux kubernetes.io/role: agent service.alibabacloud.com/exclude-node: "true" topology.diskplugin.csi.alibabacloud.com/zone: cn-shanghai-l topology.kubernetes.io/region: cn-shanghai topology.kubernetes.io/zone: cn-shanghai-l type: virtual-kubelet # 各仮想ノードにはこのラベルが付いています。Pod を仮想ノードにスケジュールする場合、このラベルを Pod のノードセレクターとして構成できます。 name: virtual-kubelet-cn-shanghai-l 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: mirrors-ssl.aliyuncs.com/nginx:stable-alpine ports: - containerPort: 80 protocol: TCP 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-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ラベルを持つノードにデプロイされていることを示しています。これは、デプロイメント構成のnodeSelectorパラメーターで指定されています。
ラベルスケジューリング
次のコンテンツを含む 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: 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次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。
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ラベルを持つノードにデプロイされていることを示しています。これは、デプロイメント構成のnodeSelectorパラメーターで指定されています。
次のコマンドを実行して、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 GPU 計算能力を使用する手順は、ACS CPU 計算能力を使用する手順と似ています。ただし、スケジューリングコンポーネントがバージョン要件を満たしていることを確認し、追加の構成を追加する必要もあります。
アクティベーション
ACK クラスターで ACS GPU 計算能力を使用する機能は、招待プレビュー中です。この機能を使用するには、チケットを送信 してください。
ACK One の登録済みクラスターで ACS の計算能力を使用する方法
...
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 モデルの詳細については、「GPU モデル」をご参照ください。
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"次のコマンドを実行して、GPU アクセラレーションワークロードのステータスをクエリします。
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml予期される出力:
phase: Running resources: limits: #その他のリソース nvidia.com/gpu: "1" requests: #その他のリソース nvidia.com/gpu: "1"
ラベルスケジューリング
次のコンテンツを使用して 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"