ノードリソースを気にせずに数秒以内にポッドを起動する場合は、ack-autoscaling-placeholderコンポーネントを使用できます。 ack-autoscaling-placeholderは、Container Service for Kubernetes (ACK) クラスター内のポッドの自動スケーリング用のバッファーを提供します。 非常に低い優先度 (負の値) を持つプレースホルダーポッドは、より高い優先度を持つ他のポッドのために一定量のコンピューティングリソースを占有するように作成されます。 コンピューティングリソースが不十分である場合、プレースホルダポッドは、占有されているコンピューティングリソースをワークロードに対して解放するように追い出される。 このように、ポッドは数秒以内に起動できます。 cluster-autoscalerは、クラスター内のノードをスケールするためにも使用されます。 このトピックでは、ack-autosaling-placeholderを使用して数秒以内にポッドをスケーリングする方法について説明します。
前提条件
ACKクラスターでAuto Scalingが有効になっています。 自動スケーリングを有効にする方法の詳細については、「ノード自動スケーリングの有効化」をご参照ください。
手順
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
On theアプリカタログタブ、検索してクリックack-autoscaling-placeholder.
On theack-autoscaling-placeholderページをクリックします。デプロイ.
[基本情報] ウィザードページで、[クラスター] ドロップダウンリストからクラスターを選択し、[名前空間] ドロップダウンリストから名前空間を選択し、[次へ] をクリックします。 [チャートバージョン] ドロップダウンリストからチャートバージョンを選択し、パラメーターを設定し、[OK] をクリックします。
ack-autoscaling-placeholderのデプロイ後、クラスターの詳細ページに移動します。 左側のナビゲーションで、
を選択します。 アプリケーションの状態が [デプロイ済み] であることがわかります。詳細ページの左側のナビゲーションウィンドウで、 を選択します。
Helmページで、ack-autoscaling-placeholderを見つけ、[操作] 列の [更新] をクリックします。 [リリースの更新] パネルで、要件に基づいてYAMLテンプレートを変更し、[OK] をクリックします。
nameOverride: "" fullnameOverride: "" ## priorityClassDefault: enabled: true name: default-priority-class value: -1 ## deployments: - name: ack-place-holder replicaCount: 1 containers: - name: placeholder image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause:3.1 pullPolicy: IfNotPresent resources: requests: cpu: 4 # Occupy 4 vCPUs and 8 GiB of memory. memory: 8 imagePullSecrets: {} annotations: {} nodeSelector: # Specify rules that are used to select nodes. demo: "yes" tolerations: [] affinity: {} labels: {}
ワークロードのPriorityClassを作成します。
この例では、高い優先度を付与するPriorityClassが作成されます。
kubectl apply -f priorityClass.yaml
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 # Specify the priority. globalDefault: false description: "This priority class should be used for XYZ service pods only."
ワークロードをデプロイします。
kubectl apply -f workload.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: placeholder-test labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: # Specify rules that are used to select nodes. demo: "yes" priorityClassName: high-priority # Specify the name of the PriorityClass that you created in Step 8. containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 resources: requests: cpu: 3 # Specify the resource request of the workload. memory: 5
次の図に示すように、ワークロードのポッドに対して、他のポッドよりも高い優先度を付与するPriorityClassが作成されます。 ノードリソースが不十分な場合、placeholderという名前のプレースホルダポッドが削除され、Pending状態に変わります。 プレースホルダーポッドがPending状態に変更されると、クラスターでAuto Scalingが有効になっているため、クラスターでスケールアウトアクティビティがトリガーされます。 その結果、ワークロード用の新しいポッドが数秒で作成されます。
関連ドキュメント
マルチゾーン負荷分散は、データサービスの高可用性シナリオで一般的に使用される展開ソリューションです。 ゾーンをまたいでデプロイされたアプリケーションに、重いワークロードを処理するのに十分なリソースがない場合は、アプリケーションの各ゾーンに特定の数のノードをACKで作成することができます。 詳細については、「クロスゾーンデプロイの自動スケーリングの設定」をご参照ください。