全部产品
Search
文档中心

Container Service for Kubernetes:Jadwalkan aplikasi ke kelompok node tertentu

更新时间:Sep 19, 2025

Untuk menjadwalkan aplikasi tertentu ke node dengan konfigurasi khusus, tambahkan label ke kelompok node, lalu konfigurasikan spesifikasi pod aplikasi tersebut dengan nodeSelector atau nodeAffinity yang sesuai.

Cara kerjanya

Penjadwalan pod ke kelompok node tertentu menggunakan mekanisme penjadwalan Kubernetes asli. Dengan mencocokkan aturan penjadwalan pod dengan label pada node dalam sebuah pool, Anda dapat mengontrol penempatan. Alur kerjanya adalah sebagai berikut:

  1. Beri label kelompok node: Kelompok node mengelola sekelompok node dengan konfigurasi identik. Setelah Anda mengonfigurasi Node Labels untuk kelompok node, Container Service for Kubernetes (ACK) secara otomatis menyebarkan label ini ke semua node saat ini dan masa depan dalam pool tersebut.

    Untuk memastikan bahwa label diterapkan ke node yang ada, pilih opsi Update Labels and Taints of Existing Nodes di pengaturan kelompok node.
  2. Tentukan aturan penjadwalan Pod: Dalam manifes YAML Pod, gunakan <a href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector" id="09ff6ac5341l1">nodeSelector</a> atau <a href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity" id="95866abd0a387">nodeAffinity</a> untuk menentukan label dari node target.

  3. (Opsional) Konfigurasikan akses eksklusif: Untuk memastikan bahwa kelompok node disediakan untuk beban kerja tertentu, tambahkan Taint ke kelompok node. Ini mencegah pod tanpa Toleration yang sesuai dijadwalkan ke node dalam pool tersebut.

  4. Penjadwalan otomatis: Penjadwal kemudian secara otomatis menempatkan pod ke node yang memenuhi semua aturan yang telah ditentukan.

Langkah 1: Tetapkan label untuk kelompok node

Tambahkan label kustom ke kelompok node untuk mengidentifikasi atribut bisnis, lingkungan, atau metadata lainnya untuk tujuan penjadwalan.

ACK secara otomatis membuat label unik global untuk setiap kelompok node: alibabacloud.com/nodepool-id. Anda dapat menggunakan label ini untuk mencocokkan tepat dengan kelompok node.
  1. Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi di sebelah kiri, pilih Nodes > Node Pools.

  3. Temukan kelompok node target dan klik Edit di kolom Actions. Buka bagian Advanced Options (Optional) dan konfigurasikan Node Labels.

    • Key: Harus dalam format prefix/name.

      • Nama (Wajib): Harus 1 hingga 63 karakter panjangnya dan harus dimulai dan diakhiri dengan karakter alfanumerik ([a-z0-9A-Z]). Bisa berisi tanda hubung (-), garis bawah (_), titik (.), dan alfanumerik.

      • Awalan (Opsional): Harus berupa subdomain DNS, yaitu serangkaian label DNS yang dipisahkan oleh titik (.). Panjang total awalan tidak boleh lebih dari 253 karakter, dan harus diakhiri dengan garis miring (/).

        Catatan

        Awalan kubernetes.io/ dicadangkan untuk komponen inti Kubernetes. Jika Anda menggunakan namespace ini, kunci label Anda harus dimulai dengan salah satu dari berikut ini: kubelet.kubernetes.io/ atau node.kubernetes.io/.

    • Value (Opsional): Bisa 1 hingga 63 karakter panjangnya dan harus dimulai dan diakhiri dengan karakter alfanumerik ([a-z0-9A-Z]). Bisa berisi tanda hubung (-), garis bawah (_), titik (.), dan alfanumerik.

  4. (Opsional) Pilih Update Labels and Taints of Existing Nodes jika diperlukan.

  5. Simpan perubahan Anda. Verifikasi bahwa label telah diterapkan dengan menavigasi ke halaman Nodes. Lalu, klik Manage Labels And Taints, dan periksa label pada setiap node.

Langkah 2: Konfigurasikan kebijakan penjadwalan aplikasi

Setelah kelompok node diberi label, Anda dapat mengonfigurasi YAML deployment aplikasi Anda untuk menargetkannya menggunakan nodeSelector atau nodeAffinity.

  • nodeSelector: Menyediakan cara sederhana dan langsung untuk memilih node dengan memerlukan kecocokan persis untuk satu atau lebih label.

  • nodeAffinity: Menawarkan aturan penjadwalan yang lebih ekspresif dan fleksibel, termasuk:

    • Operator seperti In, NotIn, dan Exists.

    • Afinitas keras (requiredDuringSchedulingIgnoredDuringExecution): Pod harus dijadwalkan pada node yang memenuhi kriteria, dan tetap dalam status pending jika tidak ada node yang cocok tersedia.

    • Afinitas lunak (preferredDuringSchedulingIgnoredDuringExecution): Penjadwal akan mencoba menempatkan pod pada node yang cocok, tetapi akan menjadwalkannya di tempat lain jika tidak ada node yang cocok tersedia.

Contoh Deployment

  1. Buat file bernama deployment.yaml. Contoh berikut menunjukkan cara menjadwalkan deployment Nginx ke node dengan label pod: nginx.

    nodeAffinity

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-with-affinity
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          affinity:
            nodeAffinity:
              # Persyaratan keras: Pod harus dijadwalkan ke node yang memenuhi kondisi.
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: pod         # Kunci label node
                    operator: In
                    values:
                    - nginx        # Nilai label node
          containers:
          - name: nginx-with-affinity
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            # Dalam lingkungan produksi, nyatakan persyaratan sumber daya untuk kontainer untuk memastikan Quality of Service (QoS).
            resources:
              requests:
                cpu: "100m"
                memory: "128Mi"
              limits:
                cpu: "200m"
                memory: "256Mi"

    nodeSelector

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            pod: nginx      # Memastikan pod hanya dijadwalkan pada node yang memiliki label spesifik ini. 
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            # Dalam lingkungan produksi, nyatakan persyaratan sumber daya untuk kontainer untuk memastikan QoS.
            resources:
              requests:
                cpu: "100m"
                memory: "128Mi"
              limits:
                cpu: "200m"
                memory: "256Mi"
  2. Deploy aplikasi.

    kubectl apply -f deployment.yaml
  3. Verifikasi bahwa pod telah dijadwalkan ke node yang benar.

    Tambahkan flag -o wide ke perintah untuk melihat node spesifik tempat setiap pod dijadwalkan.
    kubectl get pods -l app=nginx -o wide

    Periksa output untuk memastikan bahwa pod sedang berjalan di node dari kelompok node target Anda.

Referensi

  • Selain mengelola label melalui kelompok node, Anda juga dapat menetapkannya ke node individu untuk kontrol penjadwalan detail halus. Untuk instruksi, lihat Kelola label node.

  • Jika pod Anda mengalami masalah, seperti terjebak dalam status pending selama periode waktu yang lama, lihat Pemecahan masalah pod.

  • ACK menawarkan berbagai kebijakan penjadwalan tingkat lanjut, termasuk skala instans berbasis prioritas (mendefinisikan urutan untuk penskalaan naik dan turun dari berbagai tipe instans) dan penjadwalan berbasis beban berdasarkan utilisasi sumber daya node real-time. Untuk informasi lebih lanjut, lihat Kebijakan penjadwalan yang disediakan oleh ACK.

  • Jika Anda menggunakan afinitas keras untuk penjadwalan dan tidak ada node dalam kluster yang memenuhi persyaratan, ACK secara otomatis menyediakan node baru dari kelompok node apa pun yang diaktifkan auto scaling yang memiliki label yang diperlukan.

  • Kluster yang dibuat sebelum fitur kelompok node diperkenalkan mungkin berisi node pekerja yang tidak dikelola. Kami merekomendasikan memigrasikan node ini ke kelompok node untuk memastikan pengelolaan yang konsisten.