ACK マネージドクラスターで Elastic Container Instance (ECI) 上に Pod を実行することで、ECS インスタンスを管理することなくトラフィックスパイクに対応できます。
注意事項
kube-scheduler v6.11.0 以降で、ラベルを追加して 1,000 を超える ACS または ECI ポッドが同時に作成される場合は、最新バージョンにアップグレードして SchedulerBatchMoveEvents=true フィーチャーゲートを有効にしてください。
ユースケース
ECI Pod はトラフィックスパイクに対応し、コンピューティングコストを削減します。
-
トラフィックパターンが変動するオンラインサービス
トラフィックスパイクへの対応を高速化し、リソースプールのメンテナンスを削減し、コンピューティングコストを削減します。
-
短期間のタスクやバッチコンピューティングタスク
専用ノードのメンテナンスは不要です。実行中に使用したコンピューティングリソースのみに対して料金が発生するため、Spark や AI ジョブなどのワークロードのコストを削減できます。
前提条件
ACK クラスターが、ECI をサポートするリージョンで Kubernetes 1.16 以降を実行している必要があります。
サポートされているリージョンについては、「ECI がサポートするリージョンとゾーン」をご参照ください。その後、Elastic Container Instance コンソールにログオンして ECI をアクティブ化してください。
操作手順
ステップ 1: ack-virtual-node コンポーネントをデプロイする
ACK マネージドクラスターを例に説明します。ACK 専用クラスターの場合は、Marketplace ページから ack-virtual-node をデプロイしてください。詳細については、「ack-virtual-node コンポーネントのデプロイ」をご参照ください。
Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
アドオン ページで、コアコンポーネント タブをクリックし、「ACK Virtual Node」を見つけ、インストール をクリックします。画面の指示に従って、インストールを完了します。
インストール中、クラスターのデフォルト vSwitch およびセキュリティグループが、初期 ECI 構成パラメーターとして使用されます。これらのパラメーターを変更するには、「eci-profile の設定」を実行してください。
ステップ 2: Pod を ECI にスケジュールする
以下の例では、Pod または Namespace に Label を追加することで Pod を ECI にスケジュールします。その他の方法については、「仮想ノードへの Pod のスケジュール」をご参照ください。
Pod
Pod を ECI Pod として x86 アーキテクチャの仮想ノードにスケジュールするには、その Pod にラベル alibabacloud.com/eci: "true" を追加します。
-
以下の YAML ファイルから Deployment を作成します。
kubectl create -f eci-pod.yamleci-pod.yamlの例:説明k8s.aliyun.com/eci-use-specsアノテーションは、ECI Pod のコンピューティング仕様を指定します。詳細については、「ECI Pod のコンピューティング仕様を指定する」をご参照ください。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" # このラベルにより、Pod を ECI にスケジュールします。 annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # ECI Pod に 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 -
Pod が仮想ノードで実行されていることを確認します。
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> -
ECI Pod の詳細を確認します。
kubectl get pod <pod-name> -o yamlECI インスタンス ID は
k8s.aliyun.com/eci-instance-idアノテーションで、課金用のコンピューティング仕様はk8s.aliyun.com/eci-instance-specアノテーションで確認できます。
Namespace
ECI であるカテゴリの Pod を実行するには、名前空間を作成し、ラベル alibabacloud.com/eci: "true" を追加します。この名前空間のすべての Pod は、ECI Pod として x86 アーキテクチャの仮想ノードにスケジューリングされます。
-
名前空間
vkを作成し、必要なラベルを追加します。kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true -
vk名前空間に Deployment を作成します。kubectl create -f eci-namespace.yamleci-namespace.yamlの例:説明k8s.aliyun.com/eci-use-specsアノテーションは、ECI Pod のコンピューティング仕様を指定します。詳細については、「ECI Pod のコンピューティング仕様を指定する」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # Label が付与された Namespace を指定して Pod を ECI にスケジュールします。 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" # ECI Pod に 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 -
Pod が仮想ノードで実行されていることを確認します。
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> -
ECI Pod の詳細を確認します。
kubectl get pod <pod-name> -o yaml -n vkk8s.aliyun.com/eci-instance-idアノテーションで ECI インスタンス ID を確認し、k8s.aliyun.com/eci-instance-specアノテーションで課金に使用されるコンピューティング仕様を確認します。