すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:KnativeでのECSインスタンスとelasticコンテナインスタンスのコロケート

最終更新日:Oct 21, 2024

Knativeを使用してアプリケーションをデプロイする場合、オフピーク時に既存のElastic Compute Service (ECS) インスタンスにポッドをデプロイするようにKnativeを設定し、トラフィックスパイクを処理するエラスティックコンテナインスタンスを自動的に作成できます。 これを行うには、ResourcePolicyを作成して、スケールアウトアクティビティのECSインスタンスとエラスティックコンテナインスタンスの優先順位を指定します。 スケールインアクティビティが実行されると、ResourcePolicyで指定された優先順位に基づいて、ECSインスタンスまたはエラスティックコンテナインスタンスが逆の順序でリリースされます。 この場合、弾性容器インスタンスは、好ましくは解放される。

制限事項

  • 優先度ベースのリソーススケジューリングは、ポッド削除コスト機能と相互に排他的です。 ポッド削除コスト機能の詳細については、「ポッド削除コスト」をご参照ください。

  • 優先度ベースのリソーススケジューリングとElastic Container Instanceベースのスケジューリングを同時に使用することはできません。 Elastic Container Instanceベースのスケジューリングの詳細については、「Elastic Container Instanceベースのスケジューリングの使用」をご参照ください。

  • この機能はBestEffortポリシーを使用しており、システムがアプリケーションのポッドでスケーリングするときに、ノードの優先順位に基づいてポッドがノードから昇順に削除されることを保証しません。

  • maxパラメーターは、クラスターがKubernetes 1.22以降を実行し、クラスターにインストールされているスケジューラのバージョンが5.0以降の場合にのみ使用できます。

  • この機能をエラスティックノードプールと一緒に使用すると、エラスティックノードプールに無効なノードが追加される可能性があります。 エラスティックノードプールがユニットに含まれていることを確認します。 単位にmaxパラメーターを指定しないでください。

  • 5.0以前のスケジューラーバージョンを使用している場合、またはクラスターのKubernetesバージョンが1.20以前の場合、ResourcePolicyが作成される前にすでに存在しているポッドは、スケールインアクティビティ中に優先順位が付けられます。

  • 6.1以前のスケジューラーバージョンを使用している場合、またはクラスターのKubernetesバージョンが1.20以前の場合は、ResourcePolicyによって選択されたすべてのポッドが削除される前に、ResourcePolicyを変更しないでください。

手順

ResourcePolicyを作成して、さまざまなエラスティックリソースの優先順位を指定します。 この例では、ECSインスタンスはelastic containerインスタンスよりも優先度が高くなっています。 ECSインスタンスが不足しているか、ECSインスタンスにデプロイされたポッドの数が上限に達した場合、ポッドをホストするためのエラスティックコンテナインスタンスが作成されます。 アプリケーションがスケールインされると、好ましくは弾性コンテナインスタンスが解放される。

  1. Knativeサービスを作成します。

    次のサンプルコードを例として使用します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        spec:
          containers:
          - image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"
  2. ResourcePolicyを作成し、各ノードリソースのmaxパラメーターとnodeSelectorパラメーターを指定します。 maxパラメーターは、現在のエラスティックリソースにデプロイできるポッドの最大数を指定します。

    次のサンプルコードを例として使用します。 次のサンプルでは、ポッドスケジューリングのECSインスタンスの優先順位を説明します。 ECSインスタンスにデプロイされたポッドの数がmaxで指定された上限に達するか、ECSインスタンスが不足すると、ポッドをホストするためのエラスティックコンテナインスタンスが自動的に作成されます。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: xxx
      namespace: xxx
    spec:
      selector:
        serving.knative.dev/service: helloworld-go # Specify the name of the Knative Service.
      strategy: prefer
      units: 
      - resource: ecs
        max: 10
        nodeSelector:
          key2: value2
      - resource: ecs
        nodeSelector:
          key3: value3
      - resource: eci

関連ドキュメント

エラスティックリソースの優先度を指定する方法の詳細については、「Configure priority-based resource scheduling」をご参照ください。