全部產品
Search
文件中心

Container Service for Kubernetes:基於ack-autoscaling-placeholder實現容器秒級伸縮

更新時間:Dec 25, 2025

如果您的業務需要快速啟動而無需考慮節點資源問題,你可以考慮使用ack-autoscaling-placeholder組件。ack-autoscaling-placeholder為叢集的自動擴充提供緩衝區,當節點資源不足時,實際的工作負載會將提前預留的資源搶佔,實現快速啟動,然後結合使用節點自動調整功能,迫使叢集進行節點維度擴充。本文介紹如何使用ack-autoscaling-placeholder實現容器秒級伸縮。

操作流程

image

前提條件

  • 為ACK叢集開通自動調整並配置了開啟彈性的節點池,請參見啟用節點自動調整

  • 通過節點標籤(Labels)配置項為開啟彈性的節點池設定節點標籤,用於將工作負載調度到指定的節點池,便於驗證結果,請參見建立和管理節點池

    本文操作以設定demo=yes標籤為例。

步驟一:部署ack-autoscaling-placeholder組件並建立佔位工作負載

ack-autoscaling-placeholder能夠為叢集的自動擴充提供一個緩衝區,使得叢集的節點能夠超量配置,提前預熱。保證了工作負載能夠快速擴充,無需等待節點建立並加入叢集。

  1. 登入Container Service管理主控台,在左側導覽列選擇市場 > 應用市場

  2. 應用目錄頁簽,搜尋ack-autoscaling-placeholder,然後單擊ack-autoscaling-placeholder

  3. ack-autoscaling-placeholder頁面,單擊一鍵部署

  4. 在建立面板,按照提示完成配置,然後單擊確定

    參數配置頁簽中的參數內容替換為如下YAML樣本。

    查看YAML樣本

    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            #資源佔位4C8G。
                 memory: 8Gi
         imagePullSecrets: {}
         annotations: {}
         nodeSelector:        #節點選擇,和開啟了彈性的節點池的標籤一致。
           demo: "yes"  
         tolerations: []
         affinity: {}
         labels: {}

    建立成功後,在應用 > Helm頁面,可查看到該應用狀態為已部署

步驟二:建立實際負載的PriorityClass

  1. 使用以下YAML樣本,建立名為priorityClass.yaml的檔案。

    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: high-priority
    value: 1000000       #配置優先順序,比上一步驟佔位Pod的預設優先順序要高。
    globalDefault: false
    description: "This priority class should be used for XYZ service pods only."
  2. 執行以下命令部署實際工作負載的PriorityClass。

    kubectl apply -f priorityClass.yaml

    預期輸出如下:

    priorityclass.scheduling.k8s.io/high-priority created

步驟三:建立實際工作負載

  1. 使用以下YAML樣本,建立名為workload.yaml的檔案。

    查看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:    #節點選擇,和開啟了彈性的節點池的標籤一致。
            demo: "yes"
          priorityClassName: high-priority     # 需要設定為上一步驟配置的PriorityClass名稱。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 
            ports:
            - containerPort: 80
            resources:       
              requests:      
                cpu: 3         #實際負載的資源需求。
                memory: 5Gi
  2. 執行以下命令部署實際的工作負載。

    kubectl apply -f workload.yaml

    預期輸出如下:

    deployment.apps/placeholder-test created

結果驗證

  1. 佔位工作負載ack-place-holder建立成功後,Pod狀態為Running。

    image

  2. 實際工作負載部署時,由於配置了高優先順序的PriorityClass,會將佔位工作負載資源搶佔過來實現快速啟動,同時佔位工作負載的Pod被驅逐,且因節點資源不足處於Pending狀態。

    • 實際工作負載placeholder-test快速部署在佔位工作負載所在的節點

      image

    • 佔位工作負載被驅逐,且處於Pending狀態

      image

  3. 由於節點池開啟了自動彈性功能,節點資源不足觸發了節點擴容,佔位工作負載被調度到新彈出來的節點上,狀態為Running。

    image

相關文檔

高可用情境下,實現多可用性區域部署的彈性擴容,請參見實現多可用性區域同時快速彈性擴容