全部產品
Search
文件中心

Container Service for Kubernetes:指定ECS和ECI的資源分派

更新時間:Jun 11, 2025

在ACK叢集中部署服務時,您可以使用容忍度和節點親和性來聲明只使用ECS或ECI資源,或者在ECS資源不足時自動申請ECI資源。通過配置調度策略,您可以在不同工作負載情境下實現對彈性資源的不同需求。

相關概念

  • 汙點(Taints):節點上設定的規則,用於排斥某些Pod被調度到該節點上。

  • 容忍度(Tolerations):應用於Pod,允許該Pod調度時忽略節點上的汙點。

  • 節點親和性(Node affinity):Pod的屬性,用於將Pod調度到特定標籤的節點。包括以下兩類:

    • requiredDuringSchedulingIgnoredDuringExecution:硬性要求,調度時必須滿足的規則。調度器只有在規則被滿足的時候才能執行調度。

    • preferredDuringSchedulingIgnoredDuringExecution:優先偏好,調度時優先考慮的規則。調度器會嘗試尋找滿足對應規則的節點。如果找不到匹配的節點,調度器仍然會調度該Pod。

更多資訊,請參見Taints and TolerationsNode affinity

前提條件

  • 叢集類型為ACK託管叢集Pro版,且版本為v1.22版本及以上。

  • 叢集中已部署ack-virtual-node組件,且版本為v2.10.0及以上。關於如何安裝和升級ack-virtual-node組件,請參見虛擬節點

  • 叢集中的kube-scheduler組件的版本為5.9及以上,並且已開啟虛擬節點調度策略。

    組件管理頁面找到Kube Scheduler,單擊配置,然後確認已選中開啟虛擬節點調度

配置樣本

在ACK叢集中部署的虛擬節點預設帶有汙點:virtual-kubelet.io/provider=alibabacloud:NoSchedule,以避免在您不知情的情況下使用ECI資源。因此,您需要配置對該汙點的容忍度,才能將Pod調度到虛擬節點,使用ECI資源。

      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule

結合使用容忍度和節點親和性,可以實現優先順序與強制性的混合調度策略,滿足不同業務對於資源的不同需求。

  • 優先使用ECS:優先使用ECS資源,當叢集內ECS資源不足時,使用ECI資源。

  • 只使用ECI:只使用ECI資源,不使用叢集的ECS資源。

  • 只使用ECS:只使用叢集現有的ECS資源。

優先使用ECS

由於虛擬節點預設帶有汙點,您需要配置對於該汙點的容忍度,才能將Pod調度到虛擬節點。同時,配置節點親和性,通過preferredDuringSchedulingIgnoredDuringExecution可以指定Pod調度的偏好:優先調度到未帶有type: virtual-kubelet標籤的節點(即ECS節點)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
說明

配置節點親和性時,請注意以下資訊:

  • 如果在nodeSelectorTerms中配置多個條件(即多個matchExpressions),則只要其中一個條件滿足(各個條件按邏輯或操作組合)時,Pod就可以被調度到對應節點上。如果在單個matchExpressions中配置多個運算式,則只有當所有運算式都滿足(各運算式按邏輯與操作組合)時,Pod才能被調度到對應節點上。

  • 使用preferredDuringSchedulingIgnoredDuringExecution實現優先ECS調度時,不能保證僅在ECS資源不足時才調度到ECI上,也會存在ECS資源充足時但Pod被調度到ECI上的情況。如果您有更高的需求,建議結合requiredDuringSchedulingIgnoredDuringExecution配置更細緻的強制規則。

如果希望將Pod優先部署在帶有指定標籤(如label_1=key_1)的ECS節點上,在該類節點資源不足時,使用虛擬節點進行Auto Scaling,您可以通過以下YAML配置。

展開查看YAML詳情

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
    # 指定Pod必須調度到帶有label_1:key_1或type:virtual-kubelet標籤的節點上。
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
    # 指定Pod優先調度到帶有label_1:key_1標籤的節點上,其次調度到帶有type:virtual-kubelet標籤的節點上。
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

只使用ECI

由於虛擬節點預設帶有汙點,您需要配置對於該汙點的容忍度,才能將Pod調度到虛擬節點。同時,配置節點親和性,通過requiredDuringSchedulingIgnoredDuringExecution可以指定Pod必須調度到帶有type: virtual-kubelet標籤的節點(即虛擬節點)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            

只使用ECS

由於虛擬節點預設帶有汙點,因此只要您未配置對於該汙點的容忍度,Pod將只會調度到ECS節點。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6