Elastic Container Instance ベースのスケジューリングは、Alibaba Cloud がエラスティックリソーススケジューリングに提供するスケジューリングポリシーです。 アプリケーションをデプロイするときに、アノテーションを追加して使用するリソースを指定できます。 Elastic Compute Service (ECS) インスタンスまたは Elastic Container Instance のみを使用するように指定したり、ECS リソースが不足している場合にシステムが Elastic Container Instance をリクエストできるようにしたりできます。 Elastic Container Instance ベースのスケジューリングは、さまざまなワークロードシナリオでのリソース要件を満たすことができます。 このトピックでは、Elastic Container Instance ベースのスケジューリングを使用する方法について説明します。
Kubernetes バージョン 1.18 ~ 1.24 は、Elastic Container Instance のエラスティックスケジューリング機能を保持しています。 2023 年 5 月以降、Container Service for Kubernetes (ACK) は、Kubernetes v1.24 以降を実行するクラスタに対するこの機能のメンテナンスを廃止しました。 次のいずれかのソリューションを使用することをお勧めします。
ECS インスタンスと Elastic Container Instance に基づいてリソース割り当てを構成する: 汚染、許容、ノードアフィニティなどの Kubernetes ネイティブのスケジューリング機能を使用することで、ポッドに対して Elastic Container Instance のみ、ECS のみ、または ECS 優先などのスケジューリングポリシーを適用できます。
優先順位ベースのリソーススケジューリングを構成する: ネイティブの Kubernetes スケジューリングと比較して、ResourcePolicy はより高度で柔軟な戦略を可能にします。 例としては、次のものがあります。
サブスクリプションベースの ECS インスタンス、次に従量課金制の ECS インスタンス、最後に Elastic Container Instance への優先スケジューリング。
リソース削減中の逆順スケールダウン。
実行中のポッドの非侵入型移行機能。
仮想ノードスケジューリングソリューションの詳細な比較と推奨事項については、「仮想ノードにポッドをスケジュールする」をご参照ください。
前提条件
クラスタタイプは ACK マネージド Pro クラスタ です。
クラスタの Kubernetes バージョンに基づいて、次のバージョンのスケジューラを使用しています。 さまざまなバージョンのスケジューラの機能の詳細については、「kube-scheduler」をご参照ください。
Kubernetes バージョン
スケジューラバージョン
1.18
v1.18-ack-3.0 以降
1.20
v1.20.4-ack-4.0 以降
1.22
v1.22.3-ack-1.0 以降
1.24
v1.24.3-ack-2.0 以降
[ack-virtual-node] コンポーネントがクラスタにデプロイされています。 詳細については、「仮想ノードを介して Elastic Container Instance にポッドをスケジュールする」をご参照ください。
構成
ポッドのエラスティックリソースのタイプを宣言するには、ポッドのメタデータに alibabacloud.com/burst-resource アノテーションを追加します。 有効な値と使用規則は次のとおりです。
アノテーションは、ポッドの metadata セクションに追加されます。 たとえば、Deployment を作成するときは、spec.template.metadata の下にアノテーションを追加します。
値を空のままにすると、クラスタ内の既存の ECS リソースのみが使用されます。 これはデフォルト設定です。
eci_only: Elastic Container Instance のみを使用します。 クラスタ内の ECS リソースは使用されません。eci: クラスタ内の ECS リソースが不足している場合に、Elastic Container Instance が使用されます。重要alibabacloud.com/burst-resource: eciは、alibabacloud.com/fluid-sidecar-target: eciと競合します。alibabacloud.com/fluid-sidecar-targetの使用例については、「サーバーレスクラウドコンピューティングでのデータアクセスを高速化する」および関連トピックをご参照ください。
ポッドのスケジューリングは、次の場合に失敗します。
アノテーション値が
eciまたはeci_onlyではありません。値は
eci_onlyですが、クラスタに仮想ノードが存在しません。
Kubernetes v1.22.15 および v1.24.6 では、ポッドスケジューリングの失敗と PodStatus メッセージの関係は次のとおりです。
値が eci または eci_only ではありません:
requesttypemustbeeci,eci_onlyorecs。値は eci_only ですが、仮想ノードが存在しません:
doesn'tfitecitype:eci_only。
例
nginx-deployment.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: name: nginx annotations: alibabacloud.com/burst-resource: eci # エラスティックスケジューリングに使用するリソースのタイプを指定します。 labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2次のコマンドを実行して、Elastic Container Instance ベースのスケジューリングを使用するポッドを作成します。
kubectl apply -f nginx-deployment.yaml