All Products
Search
Document Center

Container Service for Kubernetes:Alokasikan resource antara ECS dan ECI

Last Updated:Jun 19, 2026

Gunakan toleransi dan afinitas node untuk menjadwalkan Pod pada Elastic Compute Service (ECS), ECI, atau keduanya dengan fallback berbasis prioritas.

Konsep utama

  • Taint: Aturan pada node yang mencegah penjadwalan Pod tertentu ke node tersebut.

  • Toleransi: Pengaturan pada Pod yang memungkinkannya mengabaikan taint pada node.

  • Afinitas node: Properti Pod yang menariknya ke node dengan label tertentu. Terdapat dua jenis:

    • requiredDuringSchedulingIgnoredDuringExecution: Persyaratan wajib. Pod hanya dijadwalkan pada node yang sesuai.

    • preferredDuringSchedulingIgnoredDuringExecution: Preferensi opsional. Penjadwal berusaha memenuhi aturan ini, tetapi akan menjadwalkan Pod di tempat lain jika tidak ditemukan kecocokan.

Lihat Taints and Tolerations dan Node affinity.

Prasyarat

  • Sebuah kluster Pro terkelola ACK yang menjalankan Kubernetes v1.22 atau lebih baru.

  • Add-on ack-virtual-node versi 2.10.0 atau lebih baru (lihat Virtual nodes).

  • Komponen kube-scheduler versi 5.9 atau lebih baru, dengan kebijakan penjadwalan node virtual diaktifkan.

    Pada halaman Add-ons, temukan Kube Scheduler, klik Configuration, lalu pastikan bahwa Enable Virtual Node-based Pod Scheduling telah dipilih.

Contoh konfigurasi

Node virtual di kluster ACK memiliki taint virtual-kubelet.io/provider=alibabacloud:NoSchedule secara default. Untuk menjadwalkan Pod pada node virtual (ECI), tambahkan toleransi terhadap taint ini.

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

Gabungkan toleransi dan afinitas node untuk membuat kebijakan penjadwalan sesuai kebutuhan resource yang berbeda.

  • Lebih memilih ECS: Gunakan ECS secara default; beralih ke ECI ketika kapasitas ECS tidak mencukupi.

  • Hanya gunakan ECI: Gunakan hanya resource ECI.

  • Hanya gunakan ECS: Gunakan hanya resource ECS yang tersedia.

Lebih memilih ECS

Tambahkan toleransi terhadap taint default, lalu gunakan preferredDuringSchedulingIgnoredDuringExecution untuk lebih memilih node tanpa label type: virtual-kubelet (node 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
Catatan

Mengenai afinitas node:

  • Beberapa nodeSelectorTerms digabungkan dengan logika OR — Pod dijadwalkan jika salah satu matchExpressions cocok. Beberapa ekspresi dalam satu matchExpressions digabungkan dengan logika AND — semua harus cocok.

  • preferredDuringSchedulingIgnoredDuringExecution tidak menjamin fallback eksklusif ke ECI — Pod tetap dapat ditempatkan di ECI meskipun kapasitas ECS tersedia. Untuk kontrol yang lebih ketat, kombinasikan dengan requiredDuringSchedulingIgnoredDuringExecution.

YAML berikut lebih memilih node ECS dengan label tertentu (misalnya label_1=key_1) dan beralih ke node virtual saat diperlukan kapasitas tambahan.

Lihat detail 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 harus dijadwalkan ke node dengan label label_1:key_1 atau type:virtual-kubelet.
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
    # Pod lebih diutamakan dijadwalkan ke node dengan label label_1:key_1, dan sebagai pilihan kedua ke node dengan label 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

Hanya gunakan ECI

Tambahkan toleransi terhadap taint default node virtual, lalu gunakan requiredDuringSchedulingIgnoredDuringExecution untuk mewajibkan penempatan pada node dengan label 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
            

Hanya gunakan ECS

Secara default, Pod hanya dijadwalkan pada node ECS karena node virtual memiliki taint. Tidak diperlukan konfigurasi tambahan.

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