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

Container Service for Kubernetes:ack-autoscaling-placeholderを使用して数秒以内にポッドをスケーリングする

最終更新日:Dec 14, 2024

ノードリソースを気にせずに数秒以内にポッドを起動する場合は、ack-autoscaling-placeholderコンポーネントを使用できます。 ack-autoscaling-placeholderは、Container Service for Kubernetes (ACK) クラスター内のポッドの自動スケーリング用のバッファーを提供します。 非常に低い優先度 (負の値) を持つプレースホルダーポッドは、より高い優先度を持つ他のポッドのために一定量のコンピューティングリソースを占有するように作成されます。 コンピューティングリソースが不十分である場合、プレースホルダポッドは、占有されているコンピューティングリソースをワークロードに対して解放するように追い出される。 このように、ポッドは数秒以内に起動できます。 cluster-autoscalerは、クラスター内のノードをスケールするためにも使用されます。 このトピックでは、ack-autosaling-placeholderを使用して数秒以内にポッドをスケーリングする方法について説明します。

前提条件

ACKクラスターでAuto Scalingが有効になっています。 自動スケーリングを有効にする方法の詳細については、「ノード自動スケーリングの有効化」をご参照ください。

手順

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[Marketplace] > [Marketplace] を選択します。

  2. On theアプリカタログタブ、検索してクリックack-autoscaling-placeholder.

  3. On theack-autoscaling-placeholderページをクリックします。デプロイ.

  4. [基本情報] ウィザードページで、[クラスター] ドロップダウンリストからクラスターを選択し、[名前空間] ドロップダウンリストから名前空間を選択し、[次へ] をクリックします。 [チャートバージョン] ドロップダウンリストからチャートバージョンを選択し、パラメーターを設定し、[OK] をクリックします。

    ack-autoscaling-placeholderのデプロイ後、クラスターの詳細ページに移動します。 左側のナビゲーションで、[アプリケーション] > [ヘルム] を選択します。 アプリケーションの状態が [デプロイ済み] であることがわかります。

  5. 詳細ページの左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  6. 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: {}
  7. ワークロードの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."
  8. ワークロードをデプロイします。

    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が有効になっているため、クラスターでスケールアウトアクティビティがトリガーされます。 その結果、ワークロード用の新しいポッドが数秒で作成されます。 pendingrun

関連ドキュメント

マルチゾーン負荷分散は、データサービスの高可用性シナリオで一般的に使用される展開ソリューションです。 ゾーンをまたいでデプロイされたアプリケーションに、重いワークロードを処理するのに十分なリソースがない場合は、アプリケーションの各ゾーンに特定の数のノードをACKで作成することができます。 詳細については、「クロスゾーンデプロイの自動スケーリングの設定」をご参照ください。