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 の計算能力を使用するには、まず必要なクラウドサービスをアクティブ化し、必要な権限を付与する必要があります。
Kubernetes 1.26 以降を実行する ACK Pro マネージドクラスター が作成されます。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。クラスターを更新する方法の詳細については、「ACK クラスターを手動でアップグレードする」をご参照ください。
ACK Virtual Node をインストールして ACS の計算能力を実装する
ACS の計算能力は、仮想ノードを使用して ACK クラスターに実装できます。このように、Kubernetes クラスターは高い弾力性を備え、クラスターノードの計算能力によって制限されなくなります。次のセクションでは、SFTP を使用してファイルを転送する方法について説明します。
ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[コアコンポーネント] タブで、[ACK Virtual Node] を選択し、[インストール] をクリックしてコンポーネントをインストールするか、[更新] をクリックしてコンポーネントを必要なバージョンに更新します。

[ACK Virtual Node] をインストールするときに、コンソールから [ACS をアクティブ化して権限を付与する] よう求められた場合は、画面の指示に従って ACS をアクティブ化して権限を付与します。[OK] をクリックします。
コンポーネントをインストールした後、クラスター詳細ページの左側のナビゲーションウィンドウで を選択します。デフォルトでは、仮想ノードの名前にはプレフィックスとして virtual-kubelet-
が付いています。

例
前提条件 セクションの説明に従って、必要なバージョンの [ACK Virtual Node] をインストールするか、コンポーネントを必要なバージョンに更新した後、ACS Pod とエラスティックコンテナインスタンスを作成できます。
説明
仮想ノードに Pod をスケジュールするときに、Pod の計算クラスを指定しないと、デフォルトで Pod のスケジューリングにエラスティックコンテナインスタンスが優先されます。
ACK クラスターで ACS の計算能力を実装するには、次の手順を実行します。
ノードセレクター、アフィニティとアンチアフィニティルール、ResourcePolicy、および alibabacloud.com/acs: "true"
ラベルを構成して、Pod を仮想ノードにスケジュールします。詳細については、「ノードアフィニティスケジューリング」をご参照ください。
説明
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 を使用してファイルを転送する方法について説明します。
デプロイメントを作成します。
NodeSelector
Pod ラベルに基づいて Pod をスケジュールする
次のコマンドを実行して、仮想ノードのラベルをクエリします。次のコマンドの 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
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
alibabacloud.com/compute-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: 2
NGINX アプリケーションをデプロイし、Pod をクエリします。
次のコマンドを実行して、NGINX アプリケーションをデプロイします。
kubectl apply -f nginx.yaml
次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。
予期される結果:
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.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"
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
NGINX アプリケーションをデプロイし、Pod をクエリします。
次のコマンドを実行して、NGINX アプリケーションをデプロイします。
kubectl apply -f nginx.yaml
次のコマンドを実行して、NGINX アプリケーションがデプロイされているかどうかを確認します。
予期される結果:
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 バージョン | スケジューラバージョン |
Kubernetes バージョン | スケジューラバージョン |
≥ 1.26 | Kubernetes のさまざまなバージョンに対応するスケジューラバージョン: Kubernetes 1.31 のスケジューラバージョン: v1.31.0-aliyun.6.8.4.8f585f26 以降。 Kubernetes 1.30 のスケジューラバージョン: v1.30.3-aliyun.6.8.4.946f90e8 以降。 Kubernetes 1.28 のスケジューラバージョン: v1.28.12-aliyun-6.8.4.b27c0009 以降。 Kubernetes 1.26 のスケジューラバージョン: v1.26.3-aliyun-6.8.4.4b180111 以降。
|
アクティブ化する方法
ACK クラスターで ACS GPU 計算能力を使用する機能は、招待プレビューです。この機能を使用するには、チケットを送信 してください。
この機能の使用方法
...
labels:
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: example-model
...
次のセクションでは、GPU 計算能力を使用する 3 つの例を示します。
NodeSelector
ResourcePolicy
Pod ラベルに基づいて Pod をスケジュールする
次のコンテンツに基づいて、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
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: example-model
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 アクセラレーションワークロードを作成します。
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
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-rp-demo
labels:
app: dep-rp-demo
annotations:
resourcePolicy: "dep-rp-demo"
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
alibabacloud.com/acs: "true"
alibabacloud.com/compute-class: gpu
alibabacloud.com/compute-qos: default
alibabacloud.com/gpu-model-series: example-model
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"