Knativeを使用してアプリケーションをデプロイする場合、オフピーク時に既存のElastic Compute Service (ECS) インスタンスにポッドをデプロイするようにKnativeを設定し、トラフィックスパイクを処理するエラスティックコンテナインスタンスを自動的に作成できます。 これを行うには、ResourcePolicyを作成して、スケールアウトアクティビティのECSインスタンスとエラスティックコンテナインスタンスの優先順位を指定します。 スケールインアクティビティが実行されると、ResourcePolicyで指定された優先順位に基づいて、ECSインスタンスまたはエラスティックコンテナインスタンスが逆の順序でリリースされます。 この場合、弾性容器インスタンスは、好ましくは解放される。
Knativeはクラスターにデプロイされています。 詳細については、「ACKクラスターへのKnativeのデプロイ」または「ACKサーバーレスクラスターへのKnativeのデプロイ」をご参照ください。
クラスター内のkube-schedulerコンポーネントのバージョンは、次のマッピングと一致します。
Kubernetesバージョン
kube-schedulerのバージョン
1.20
1.20.4-ack-7.0以降
1.22
1.22.15-ack-2.0以降
1.24
1.24.3-ack-2.0またはそれ以降
1.26
1.26.3-ack-4.0以降
1.26以降
すべてのバージョン
ack-virtual-nodeコンポーネントがデプロイされています。 このコンポーネントは、エラスティックコンテナインスタンスを使用する場合に必要です。 詳細については、「クラスターへのack-virtual-nodeのデプロイ」をご参照ください。
制限事項
優先度ベースのリソーススケジューリングは、ポッド削除コスト機能と相互に排他的です。 ポッド削除コスト機能の詳細については、「ポッド削除コスト」をご参照ください。
優先度ベースのリソーススケジューリングと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インスタンスにデプロイされたポッドの数が上限に達した場合、ポッドをホストするためのエラスティックコンテナインスタンスが作成されます。 アプリケーションがスケールインされると、好ましくは弾性コンテナインスタンスが解放される。
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"
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」をご参照ください。