全部產品
Search
文件中心

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

更新時間:Jun 19, 2024

當您需要工作負載快速啟動而無需考慮節點資源問題時,可以考慮使用ack-autoscaling-placeholder組件。ack-autoscaling-placeholder為叢集的自動擴充提供了緩衝區,使用優先順序非常低(負數)的佔位容器來超額配置,以保留其他Pod可以使用的資源。如果叢集沒有可用的資源,真正的工作負載也會將佔位容器所佔用的資源搶佔,實現快速啟動,然後結合使用Cluster-Autoscaler,迫使叢集進行節點維度擴充。本文介紹如何使用ack-autoscaling-placeholder實現容器秒級伸縮。

前提條件

您已為ACK叢集開通自動調整。關於開通自動調整的操作步驟,請參見節點自動調整

操作步驟

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

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

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

  4. 建立面板,選擇叢集命名空間,然後單擊下一步。選擇Chart版本,編輯參數,然後單擊確定

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

  5. 在叢集管理頁左側導覽列,選擇應用 > Helm

  6. Helm頁面,單擊ack-autoscaling-placeholder操作列的更新。然後在更新發布面板中,更新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: 8               
         imagePullSecrets: {}
         annotations: {}
         nodeSelector:                   #節點選擇。
           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              #配置優先順序。
    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:                        #節點選擇。
            demo: "yes"
          priorityClassName: high-priority     #這裡寫入第8步配置的PriorityClass名稱。
          containers:
          - name: nginx
            image: nginx:1.7.9 
            ports:
            - containerPort: 80
            resources:       
              requests:      
                cpu: 3                         #實際負載的資源需求。
                memory: 5

    從下圖可以看到,實際工作負載由於Pod配置了高優先順序的PriorityClass。當節點資源不足時,會將佔位容器placeHolder進行驅逐,此時佔位容器placeHolder處於Pending狀態。由於叢集開通了自動調整,此狀態會觸發ACK叢集進行擴容。實現了工作負載的秒級彈出pendingrun

相關文檔

多可用性區域均衡是資料類型業務在高可用情境下常用的部署方式。當業務壓力增大時,有多可用性區域均衡調度策略的應用希望可以自動擴容出多個可用性區域的執行個體來滿足叢集的調度水位。詳細資料,請參見多可用性區域同時快速彈性擴容