Elastic Container Instanceはプリエンプティブルインスタンスをサポートしています。 拡張性の高いWebサイトサービスなど、高いスケーラビリティとフォールトトレランスを備えた短期間のジョブやステートレスアプリケーションをエラスティックコンテナインスタンスで実行して、インスタンスの使用コストを削減できます。 このトピックでは、ジョブを実行するプリエンプティブルElastic Container Instanceベースのポッドを作成する方法について説明します。
背景情報
プリエンプティブルelasticコンテナインスタンスを使用する前に、次の項目に注意してください。
課金ルール
プリエンプティブルインスタンスの市場価格は、そのインスタンス仕様の需要と供給に基づいて変動します。 プリエンプティブルインスタンスを作成するときは、インスタンスの入札ポリシーを指定する必要があります。 入札価格がリアルタイム市場価格より高く、インスタンス仕様のリソースインベントリが十分である場合、プリエンプティブルインスタンスが作成されます。 プリエンプティブルインスタンスが作成された後、保護期間に入り、購入時の市場価格に基づいてインスタンスが課金されます。 デフォルトでは、保護期間は1時間です。 保護期間が終了すると、インスタンスはリアルタイムの市場価格に基づいて課金されます。
再生メカニズム
プリエンプティブルインスタンスの保護期間が終了すると、システムは5分ごとにインスタンス仕様の市場価格とリソースインベントリをチェックします。 リアルタイムの市場価格が入札価格を超える場合、またはリソースインベントリが不十分な場合、プリエンプティブルインスタンスはリリースされます。 Elastic Container Instanceは、プリエンプティブルインスタンスがリリースされる約5分前にKubernetesイベントのリストにイベントを送信します。 5分間の期間中に、特定の操作を実行して、ビジネスが中断されないようにすることができます。 たとえば、インスタンスへのインバウンドトラフィックを拒否するように設定できます。
作成方法
ECSインスタンスタイプまたはvCPUの数とメモリサイズを指定して、プリエンプティブルelastic containerインスタンスを作成できます。
設定方法
k8s.aliyun.com/eci-spot-strategy
注釈をポッドの構成ファイルのメタデータに追加して、プリエンプティブルインスタンスを作成できます。 アノテーションは、プリエンプティブルインスタンスの入札ポリシーを指定します。有効な値:
SpotAsPriceGo: インスタンスは、購入時の市場価格が自動的に入札価格として使用されるプリエンプティブルインスタンスとして作成されます。
SpotWithPriceLimit: インスタンスはプリエンプティブルインスタンスとして作成され、そのインスタンスの最大時間料金を指定します。この値を使用する場合、インスタンスに
k8s.aliyun.com/eci-spot-price-limit
注釈を追加して、インスタンスの最大時間料金を指定する必要があります。
詳細については、「プリエンプティブエラスティックコンテナインスタンスの作成」をご参照ください。
手順
Kubernetesでは、ジョブを使用して、一時的なタスクと一時的なタスクを一度にバッチ処理します。 このセクションでは、プリエンプティブルインスタンスでジョブを実行する方法の例を示します。
ジョブの構成ファイルを準備し、spot_job.yamlという名前を付けます。
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: annotations: k8s.aliyun.com/eci-use-specs: ecs.c5.large,2-4Gi # Specifies multiple instance specifications to improve the success rate of instance creation. k8s.aliyun.com/eci-spot-strategy: SpotAsPriceGo # The current market price is automatically used as the bid price. spec: containers: - name: pi image: registry-vpc.cn-beijing.aliyuncs.com/ostest/perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never
ジョブの作成
kubectl create -f spot_job.yaml
ポッドの状態を確認します。
kubectl get pod
ジョブが実行中の場合、ポッドのステータスは実行中です。
NAME READY STATUS RESTARTS AGE pi-frmr8 1/1 Running 0 35s
ジョブが期待どおりに実行を完了すると、ポッドのステータスが [完了] に変わります。
NAME READY STATUS RESTARTS AGE pi-frmr8 0/1 Completed 0 2h
プリエンプティブルインスタンスの再要求メカニズムにより、ジョブの実行が完了する前にポッドが解放された場合、Kubernetesのjob Controllerが自動的に新しいポッドを作成してジョブの実行を継続します。
この場合、元のポッドの情報は保持され、ポッドのステータスはBidFailedに変わります。
説明プリエンプティブルインスタンスが作成された後、保護期間中に期待どおりに実行されます。 保護期間が終了すると、市場価格が入札価格よりも高い場合、またはインベントリリソースが不足している場合、プリエンプティブルインスタンスはリリースされます。 プリエンプティブルインスタンスがリリースされる約5分前に、プレリリースイベント (SpotToBeReleased) が生成されます。 イベント情報を表示できます。 詳細については、「プリエンプティブルインスタンスのリリース」をご参照ください。
NAME READY STATUS RESTARTS AGE pi-frmr8 1/1 BidFailed 0 4h53m pi-kp5zx 1/1 Running 0 3h45m