全部产品
Search
文档中心

Container Service for Kubernetes:Distribusi Dinamis dan Penjadwalan Ulang

更新时间:Jul 02, 2025

ACK One Fleet dapat mendistribusikan replika beban kerja secara dinamis, seperti Deployments, StatefulSets, dan Jobs, di seluruh kluster terkait berdasarkan sumber daya yang tersedia melalui PropagationPolicy. Secara default, instance ACK One Fleet mengaktifkan penjadwalan ulang. Karena ketersediaan sumber daya kluster berfluktuasi seiring waktu, beberapa replika di kluster terkait mungkin menjadi tidak dapat dijadwalkan. Instance Fleet secara otomatis memeriksa replika yang tidak dapat dijadwalkan setiap dua menit dan memicu penjadwalan ulang jika mereka tetap dalam keadaan ini selama lebih dari 30 detik.

Prasyarat

Prosedur

Langkah 1: Buat aplikasi di Fleet

  1. Buat file bernama web-demo.yaml dan tambahkan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. Jalankan perintah berikut untuk menerapkan aplikasi:

    kubectl apply -f web-demo.yaml

Langkah 2: Buat kebijakan distribusi

  1. Buat kebijakan distribusi berbasis bobot dinamis distribution policy yang secara otomatis menyesuaikan rasio alokasi replika sesuai dengan sumber daya yang tersedia di semua node di kluster terkait.

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
    spec:
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # ID kluster Anda.
          - ${cluster2-id} 
        replicaScheduling:
          replicaSchedulingType: Divided
          replicaDivisionPreference: Weighted
          weightPreference:
            dynamicWeight: AvailableReplicas
  2. Jalankan perintah berikut untuk memeriksa status distribusi aplikasi:

    kubectl amc get deploy web-demo -M

    Output yang diharapkan (hasil dapat bervariasi berdasarkan rasio sumber daya yang tersedia di kluster terkait):

    NAME       CLUSTER      READY   UP-TO-DATE   AVAILABLE   AGE   ADOPTION
    web-demo   cxxxxxxxx1   2/2     2            2           11s   Y
    web-demo   cxxxxxxxx2   3/3     3            3           11s   Y

Langkah 3: Verifikasi kemampuan penjadwalan ulang

Anda dapat mensimulasikan skenario di mana beban kerja berada dalam keadaan Pending karena sumber daya tidak mencukupi dengan memberi tanda pada node dan memulai ulang deployment yang ada.

  1. Jalankan perintah berikut untuk memberi tanda pada semua node dengan NoSchedule:

    kubectl --kubeconfig=<cluster1.config> taint nodes foo=bar:NoSchedule --all=true
  2. Jalankan perintah berikut untuk memulai ulang beban kerja yang ada. Beban kerja tersebut diharapkan gagal.

    kubectl --kubeconfig=<cluster1.config> rollout restart deploy web-demo
  3. Setelah menunggu sekitar 3 menit, jalankan perintah berikut untuk memeriksa hasil penjadwalan:

    kubectl amc get deploy web-demo -M

    Output yang diharapkan:

    NAME       CLUSTER      READY   UP-TO-DATE   AVAILABLE   AGE   ADOPTION
    web-demo   cxxxxxxxx2   5/5     5            5           11s   Y

    Output yang diharapkan menunjukkan bahwa replika beban kerja di Cluster1 telah dijadwalkan ulang ke Cluster2.