全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan YurtAppSets untuk mengelola aplikasi di kluster ACK Edge

更新时间:Jun 26, 2025

Anda dapat menggunakan YurtAppSet untuk mendistribusikan aplikasi ke beberapa node pool dalam kluster ACK Edge. YurtAppSet merespons dengan cepat terhadap perubahan label node pool, memungkinkan pengelolaan terpusat konfigurasi seperti jumlah pod dan versi aplikasi dari beban kerja yang didistribusikan ke berbagai node pool. Topik ini menjelaskan cara menggunakan YurtAppSet untuk mengelola aplikasi dalam kluster ACK Edge.

Informasi latar belakang

Penyebaran aplikasi tradisional

Dalam skenario komputasi edge, node komputasi mungkin tersebar di berbagai wilayah, dan sebuah aplikasi mungkin perlu berjalan pada node di wilayah yang berbeda. Misalnya, jika Anda ingin menggunakan Deployment untuk menyebarkan aplikasi di berbagai wilayah, secara tradisional Anda menambahkan label yang sama ke node di wilayah yang sama dan membuat Deployment duplikat dengan pemilih node yang berbeda. Dengan cara ini, sistem menjadwalkan Deployment ke node di wilayah yang sesuai dengan mencocokkan label node terhadap pemilih node.

Seiring meningkatnya jumlah wilayah dan persyaratan diferensiasi untuk aplikasi di wilayah yang berbeda, pengelolaan dan pemeliharaan aplikasi menjadi lebih kompleks. Berikut adalah tantangan utama:

  • Prosedur pembaruan yang rumit: Saat memperbarui aplikasi, Anda harus memperbarui semua Deployment di wilayah yang berbeda secara manual, sehingga mengurangi efisiensi pembaruan.

  • Pemeliharaan aplikasi yang kompleks: Anda harus membedakan dan memelihara Deployment di wilayah yang berbeda secara manual, meningkatkan beban operasional seiring bertambahnya jumlah wilayah.

  • Konfigurasi aplikasi yang redundan: Konfigurasi Deployment di wilayah yang berbeda sangat mirip, menyebabkan pengelolaan konfigurasi yang kompleks dan rentan terhadap kesalahan.

Penyebaran aplikasi berbasis YurtAppSets

YurtAppSet disediakan oleh ACK Edge untuk mengurangi kompleksitas penyebaran terdistribusi dalam skenario komputasi edge. YurtAppSet adalah abstraksi tingkat atas yang memungkinkan pengelolaan terpusat beberapa beban kerja. Sebagai contoh, Anda dapat menggunakan YurtAppSet untuk membuat, memperbarui, dan menghapus beberapa Deployment secara terpusat.

YurtAppSet mendukung fitur-fitur berikut untuk mengatasi kekurangan mode penyebaran tradisional, termasuk pembaruan aplikasi yang tidak efisien, pemeliharaan aplikasi yang kompleks, dan konfigurasi aplikasi yang redundan.

  • Definisi Template Terpadu (workloadTemplate)

    Parameter workloadTemplate dalam konfigurasi YurtAppSet digunakan untuk menentukan template yang digunakan untuk menyebarkan aplikasi yang sama di beberapa wilayah. Ini mencegah konfigurasi dan penyebaran aplikasi yang duplikat serta memastikan operasi batch yang efisien dan konsisten, seperti pembuatan, pembaruan, dan penghapusan.

  • Penyebaran Otomatis (nodepoolSelector)

    Parameter nodepoolSelector dalam konfigurasi YurtAppSet digunakan untuk menentukan label yang digunakan untuk memilih node pool. Ini menjaga sinkronisasi aplikasi dengan node pool. Saat membuat atau menghapus node pool, sistem secara otomatis memilih node pool yang cocok berdasarkan parameter nodepoolSelector untuk menyebarkan beban kerja, menyederhanakan pekerjaan O&M.

  • Penyebaran Diferensiasi Regional (workloadTweaks)

    Parameter workloadTweaks dalam konfigurasi YurtAppSet digunakan untuk menyesuaikan beban kerja di wilayah tertentu tanpa perlu mengelola atau memperbarui setiap beban kerja secara individual.

Buat YurtAppSet

  • Jika versi Kubernetes dari kluster ACK Edge Anda adalah 1.26 atau lebih baru, buat YurtAppSet.

  • Jika versi Kubernetes dari kluster ACK Edge Anda lebih lama dari 1.26, buat UnitedDeployment.

Kubernetes 1.26 atau lebih baru

Buat YurtAppSet yang mendefinisikan template Deployment.

Contoh berikut adalah template YAML:

apiVersion: apps.openyurt.io/v1beta1
kind: YurtAppSet
metadata:
  name: example
  namespace: default
spec:
  revisionHistoryLimit: 5
  pools:
  - np1xxxxxx
  - np2xxxxxx
  nodepoolSelector:
    matchLabels:
      yurtappset.openyurt.io/type: "nginx"
  workload:
    workloadTemplate:
      deploymentTemplate:
        metadata:
          labels:
            app: example
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: example
          template:
            metadata:
              labels:
                app: example
            spec:
              containers:
              - image: nginx:1.19.1
                imagePullPolicy: Always
                name: nginx
    workloadTweaks:
    - pools:
      - np2xxxxxx
      tweaks:
        replicas: 3
        containerImages:
        - name: nginx
          targetImage: nginx:1.20.1
        patches:
        - path: /metadata/labels/test
          operation: add
          value: test

Tabel berikut menjelaskan parameter dalam template YAML.

Parameter

Deskripsi

Diperlukan

spec.pools

Node pool tempat aplikasi diterapkan. Nilai harus bertipe slice. Kami merekomendasikan Anda menggunakan parameter nodepoolSelector untuk memilih node pool.

Tidak

spec.nodepoolSelector

Pemilih label yang digunakan untuk memilih node pool guna menyebarkan aplikasi. Jika Anda menentukan parameter ini dan parameter spec.pools secara bersamaan, node pool yang cocok dengan kedua parameter akan dipilih.

Tidak

spec.workload.workloadTemplate

Template beban kerja. Atur nilainya ke deploymentTemplate atau statefulSetTemplate.

Ya

spec.workload.workloadTweaks

Modifikasi kustom untuk beban kerja tertentu.

Tidak

spec.workload.workloadTweaks[*].pools

Node pool yang menampung aplikasi yang dimodifikasi kustom. Nilai harus bertipe slice.

Tidak

spec.workload.workloadTweaks[*].nodepoolSelector

Pemilih label yang digunakan untuk memilih node pool yang menampung aplikasi yang dimodifikasi kustom.

Tidak

spec.workload.workloadTweaks[*].tweaks.replicas

Jumlah pod replika yang dibuat untuk beban kerja setelah modifikasi.

Tidak

spec.workload.workloadTweaks[*].tweaks.containerImages

Gambar yang digunakan untuk menyebarkan beban kerja setelah modifikasi.

Tidak

spec.workload.workloadTweaks[*].tweaks.patches

Anda dapat menggunakan parameter ini untuk memodifikasi bidang dalam parameter workloadTemplate.

Tidak

spec.workload.workloadTweaks[*].tweaks.patches[*].path

Path dari bidang dalam parameter workloadTemplate.

Tidak

spec.workload.workloadTweaks[*].tweaks.patches[*].operation

Operasi yang dilakukan pada path. Nilai valid: add, remove, dan replace.

Tidak

spec.workload.workloadTweaks[*].tweaks.patches[*].value

Nilai setelah modifikasi. Parameter ini hanya berlaku pada operasi add atau replace.

Tidak

status.conditions

Informasi status YurtAppSet, termasuk apakah node pool dipilih dan status beban kerja.

status.readyWorkloads

Jumlah beban kerja yang semua pod replikanya dalam keadaan Ready.

status.updatedWorkloads

Jumlah beban kerja yang semua pod replikanya diperbarui ke versi terbaru.

status.totalWorkloads

Jumlah beban kerja yang dikelola oleh YurtAppSet.

Versi Kubernetes lebih lama dari 1.26

Buat UnitedDeployment yang mendefinisikan template Deployment.

Contoh berikut adalah template YAML:

apiVersion: apps.openyurt.io/v1alpha1
kind: UnitedDeployment
metadata:
  name: example 
  namespace: default
spec:
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      app: example 
  workloadTemplate:
    deploymentTemplate:
      metadata:
        creationTimestamp: null
        labels:
          app: example 
      spec:  
        replicas: 2
        selector:
          matchLabels:
            app: example 
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: example 
          spec:
            containers:
            - image: nginx:1.19.3
              imagePullPolicy: Always
              name: nginx
            dnsPolicy: ClusterFirst
            restartPolicy: Always
  topology:
    pools:
    - name: cloud
      nodeSelectorTerm:
        matchExpressions:
        - key: apps.openyurt.io/nodepool
          operator: In
          values:
          - np4b9781c40f0e46c581b2cf2b6160****
      replicas: 2
    - name: edge
      nodeSelectorTerm:
        matchExpressions:
        - key: apps.openyurt.io/nodepool
          operator: In
          values:
          - np47832359db2e4843aa13e8b76f83****
      replicas: 2
      tolerations:
      - effect: NoSchedule
        key: apps.openyurt.io/taints
        operator: Exists            

Tabel berikut menjelaskan parameter dalam template YAML.

Parameter

Deskripsi

spec.workloadTemplate

Template beban kerja. Nilai valid: deploymentTemplate and statefulSetTemplate.

spec.topology.pools

Konfigurasi beberapa node pool.

spec.topology.pools[*].name

Nama node pool.

spec.topology.pools[*].nodeSelectorTerm

Aturan afinitas node yang digunakan untuk memilih node pool. Atur key ke apps.openyurt.io/nodepool dan nilai ke ID node pool yang ingin Anda gunakan.

Catatan

Anda dapat melihat ID node pool di bawah name node pool pada halaman Node Pools di konsol ACK.

spec.topology.pools[*].tolerations

Toleransi untuk node pool.

spec.topology.pools[*].replicas

Jumlah pod yang akan dibuat di setiap node pool.

Gunakan YurtAppSets untuk mengelola aplikasi di edge

  • Perbarui versi aplikasi: Modifikasi bidang dalam parameter spec.workload.workloadTemplate untuk memicu pembaruan aplikasi. YurtAppSet memperbarui template dari semua beban kerja di semua node pool, kemudian pengontrol node pool memperbarui pod dari beban kerja tersebut.

  • Implementasikan rilis canary di wilayah tertentu: Modifikasi parameter spec.workload.workloadTweak[*].containerImages untuk memicu pembaruan gambar untuk pod di wilayah tertentu.

  • Skala pod di wilayah tertentu: Modifikasi parameter spec.workload.workloadTweak[*].replicas untuk memicu penskalaan pod di wilayah tertentu.

  • Sebarkan aplikasi di wilayah baru: Buat node pool baru dan tambahkan label yang cocok dengan parameter spec.nodepoolSelector dalam konfigurasi aplikasi ke node pool. YurtAppSet mendeteksi perubahan dan secara otomatis menyebarkan beban kerja di node pool baru. Kemudian, tambahkan node di wilayah tersebut ke node pool.

  • Turunkan aplikasi di wilayah tertentu: Hapus node pool tempat aplikasi diterapkan di wilayah tersebut. YurtAppSet mendeteksi perubahan dan secara otomatis menghapus beban kerja di wilayah tersebut.