Container Service for Kubernetes (ACK) クラスタを使用する場合、短期間で多数のポッドを作成する必要がある場合があります。 ポッド用に Elastic Compute Service (ECS) インスタンスを作成することを選択した場合、スケーリングプロセスは時間がかかります。 ECS インスタンスを予約することを選択した場合は、リソースが無駄になります。 ACK 仮想ノードを使用すると、ECS インスタンスを購入または管理することなく、ポッドを Elastic Container Instance にすばやくスケジュールできます。 このトピックでは、ACK マネージドクラスター で Elastic Container Instance にポッドをスケジュールする方法について説明します。
シナリオ
Elastic Container Instance を使用してトラフィックの急増を処理し、コンピューティングコストを削減できます。 Elastic Container Instance は、次のシナリオに適しています。
トラフィックの変動が大きいオンラインサービス
オンライン教育、e コマース、その他のサービスのトラフィックは、通常、変動が大きくなります。 Elastic Container Instance ベースのポッドを使用すると、トラフィックの急増に迅速に対応し、固定リソースプールのメンテナンスを削減できます。 これにより、コンピューティングコストを削減できます。
非連続コンピューティングタスク
Elastic Container Instance ベースのポッドを使用してコンピューティングタスクを実行します。 この方法では、ノードを保持する必要はありません。 タスク実行中に使用されたコンピューティングリソースに対してのみ料金を支払います。 これにより、コンピューティングコストが削減されます。 タスクには、Spark タスクと AI タスクが含まれます。
前提条件
ACK クラスタの Kubernetes バージョンは 1.16 以降であり、クラスタが配置されているリージョンで Elastic Container Instance がサポートされています。
クラスタのリージョンがサポートされているかどうかを確認します。 詳細については、「リージョンとゾーン」をご参照ください。 Elastic Container Instance コンソール にログオンして、Elastic Container Instance サービスをアクティブ化します。
手順
ステップ 1: ack-virtual-node コンポーネントをデプロイする
次の操作では、ACK マネージドクラスター を例として使用します。 ACK 専用クラスター の場合は、[マーケットプレイス] ページで ack-virtual-node コンポーネントをデプロイする必要があります。 詳細については、「ack-virtual-node コンポーネントをデプロイする」をご参照ください。
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[アドオン] ページの [コアコンポーネント] タブで、[ACK Virtual Node] を見つけて、[インストール] をクリックします。 ページに表示される手順に従います。
インストール中に、クラスターのデフォルトの vSwitch とセキュリティグループを Elastic Container Instance のデフォルト構成として使用します。 構成の変更方法の詳細については、「eci-profile を構成する」をご参照ください。
ステップ 2: Elastic Container Instance にポッドをスケジュールする
次の操作では、ポッドまたは名前空間にラベルを追加する方法を例として使用して、Elastic Container Instance で実行するために仮想ノードにポッドをスケジュールする方法を示します。 スケジューリングソリューションの詳細については、「仮想ノードにポッドをスケジュールする」をご参照ください。
ポッドにラベルを追加する
特定のポッドを Elastic Container Instance で実行するようにスケジュールする必要がある場合は、alibabacloud.com/eci: "true"
などの特定のラベルをポッドに追加できます。 ポッドは、Elastic Container Instance として実行するために、x86 アーキテクチャの仮想ノードにスケジュールされます。
次の YAML ファイルを使用してデプロイメントを作成します。
kubectl create -f eci-pod.yaml
eci-pod.yaml ファイルの例を次に示します。
説明次の YAML ファイルでは、
k8s.aliyun.com/eci-use-specs
アノテーションを使用して、Elastic Container Instance ベースのポッドの仕様を指定しています。 Elastic Container Instance ベースのポッドの仕様の構成方法の詳細については、「Elastic Container Instance のコンピューティング仕様を指定する」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx alibabacloud.com/eci: "true" # ポッドを Elastic Container Instance にスケジュールするための特定のラベルを追加します annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Elastic Container Instance ベースのポッドに 2 個の vCPU と 4 GiB のメモリを指定します spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
ポッドが仮想ノードで実行されているかどうかを確認します。
kubectl get pod -o wide -l app=nginx
想定される出力は次のとおりです。
NODE
フィールドに、ポッドが仮想ノードにスケジュールされていることが示されます。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-86f7fbc94f-g5m22 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-86f7fbc94f-r4wcn 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>
Elastic Container Instance ベースのポッドの詳細を表示します。
kubectl get pod <pod-name> -o yaml
返された YAML ファイルで、
k8s.aliyun.com/eci-instance-id
フィールドに基づいて対応する Elastic Container Instance の ID を取得し、k8s.aliyun.com/eci-instance-spec
フィールドに基づいて Elastic Container Instance ベースのポッドの実際の課金仕様を確認できます。
名前空間にラベルを追加する
あるカテゴリのポッドを Elastic Container Instance で実行するようにスケジュールする必要がある場合は、名前空間を作成し、alibabacloud.com/eci: "true"
などの特定のラベルを追加できます。 この名前空間のすべてのポッドは、Elastic Container Instance として実行するために x86 アーキテクチャの仮想ノードにスケジュールされます。
vk
という名前の名前空間を作成し、名前空間に特定のラベルを追加します。kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true
次の YAML ファイルを使用して、
vk
名前空間にデプロイメントを作成します。kubectl create -f eci-namespace.yaml
eci-namespace.yaml ファイルの例を次に示します。
説明次の YAML ファイルでは、
k8s.aliyun.com/eci-use-specs
アノテーションを使用して、Elastic Container Instance ベースのポッドの仕様を指定しています。 Elastic Container Instance ベースのポッドの仕様の構成方法の詳細については、「Elastic Container Instance のコンピューティング仕様を指定する」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # 特定のラベルを持つ名前空間を指定して、ポッドを Elastic Container Instance にスケジュールします labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # Elastic Container Instance ベースのポッドに 2 個の vCPU と 4 GiB のメモリを指定します spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
ポッドが仮想ノードで実行されているかどうかを確認します。
kubectl get pod -o wide -l app=nginx -n vk
想定される出力は次のとおりです。
NODE
フィールドに、ポッドが仮想ノードにスケジュールされていることが示されます。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-8f54bcfb5-86pvc 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-8f54bcfb5-skvkg 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>
Elastic Container Instance ベースのポッドの詳細を表示します。
kubectl get pod <pod-name> -o yaml -n vk
返された YAML ファイルで、
k8s.aliyun.com/eci-instance-id
フィールドに基づいて対応する Elastic Container Instance の ID を取得し、k8s.aliyun.com/eci-instance-spec
フィールドに基づいて Elastic Container Instance ベースのポッドの実際の課金仕様を確認できます。