数秒で起動し、完了時に課金が停止する Elastic Container Instance (ECI) Pod でバッチワークロードを実行します。
Job が完了すると課金が停止するため、バッチワークロードでは事前プロビジョニングされたノードやアイドル状態のコンピュートリソースのコストを回避できます。これにより、ECI は需要が変動するワークロードに最適です。

前提条件
以下を確認してください。
Container Service for Kubernetes (ACK) 仮想ノード アドオンがインストールされていること。詳細については、「ack-virtual-node コンポーネントのデプロイ」をご参照ください。
スケジューリングの仕組み
Pod を ECI で実行するには、Pod またはその名前空間に alibabacloud.com/eci=true という label を付けます。仮想ノード (virtual-kubelet) は Pod をインターセプトし、通常のクラスターノードではなく ECI にスケジューリングします。
この例では、名前空間レベルの label を使用して、名前空間内のすべての Pod を仮想ノードにスケジューリングします。その他の方法については、「仮想ノードへの Pod のスケジューリング」をご参照ください。
手順
ステップ 1:名前空間の作成と ECI label の追加
kubectl create ns vk
kubectl label namespace vk alibabacloud.com/eci=truevk 名前空間内のすべての Pod は、仮想ノード上で ECI Pod として実行されます。
ステップ 2:Job の作成
以下の YAML を
job.yamlとして保存してください。この Job は 16 CPU コアと 32 GB のメモリを使用して、円周率を 2,000 桁まで計算します。apiVersion: batch/v1 kind: Job metadata: name: pi namespace: vk # この名前空間内の Pod は ECI にスケジューリングされます spec: template: spec: containers: - name: pi image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] resources: requests: cpu: 16 memory: 32Gi restartPolicy: Never backoffLimit: 4YAML ファイルを適用してください。
kubectl -n vk apply -f job.yaml
ステップ 3:Job 完了の確認
Pod のステータスを確認してください。
kubectl -n vk get pod -o wideCompleted ステータスと virtual-kubelet で始まるノード名により、Pod が仮想ノードで実行されたことが確認できます。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pi-zw2lc 0/1 Completed 0 15m 192.168.XX.XX virtual-kubelet-cn-shanghai-b <none> <none>ステップ 4:課金停止の確認
Pod イベントを確認してください。
kubectl -n vk describe pod <pod-name>Events セクションに StopCharge イベントがあることで、ECI Pod が完了し、課金が停止したことが確認できます。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ImageCacheMissed 16m EciService [eci.imagecache]Missed image cache.
Normal Pulling 16m kubelet Pulling image "registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32"
Normal Pulled 15m kubelet Successfully pulled image "registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32" in 12.951s (12.951s including waiting). Image size: 336066994 bytes.
Normal Created 15m kubelet Created container: pi
Normal Started 15m kubelet Started container pi
Normal StopCharge 15m EciService [eci.containergroup]The charge of current ECI instance has been stopped, but the related resources are still being cleaned.ECI Pod は実際のリソース使用量に基づいて課金され、完了時に課金が停止します。詳細については、「ECI の課金」および「ECI Pod のライフサイクル」をご参照ください。
次のステップ
コストをさらに削減するには、プリエンプティブル ECI Pod を使用できます。詳細については、「プリエンプティブル ECI を使用した Job の実行」をご参照ください。