Dalam kluster ACK Edge, gunakan application set (YurtAppSet) untuk mendistribusikan aplikasi ke beberapa node pool. YurtAppSet menyediakan mekanisme responsif yang mendeteksi perubahan pada label node pool, memungkinkan pengelolaan terpadu konfigurasi workload—seperti jumlah instans dan versi perangkat lunak—di berbagai node pool. Topik ini menjelaskan cara mengelola dan menerapkan aplikasi secara efisien dalam kluster ACK Edge menggunakan YurtAppSet.
Informasi Latar Belakang
Solusi Tradisional
Dalam skenario komputasi tepi, node komputasi sering kali memiliki karakteristik distribusi regional yang berbeda. Aplikasi yang sama mungkin perlu diterapkan pada node komputasi di wilayah yang berbeda. Misalnya, saat menggunakan Deployment, pendekatan tradisional adalah memberikan label identik pada node komputasi dalam satu wilayah yang sama, lalu membuat beberapa Deployment yang masing-masing menggunakan NodeSelector untuk menargetkan label berbeda. Pendekatan ini memungkinkan penerapan aplikasi yang sama di beberapa wilayah.
Seiring meluasnya distribusi regional dan meningkatnya variasi kebutuhan aplikasi antarwilayah, operasi dan pemeliharaan menjadi lebih kompleks. Kompleksitas ini terlihat dalam beberapa aspek:
-
Pembaruan yang membosankan: Saat versi aplikasi berubah, Anda harus memperbarui semua Deployment secara manual agar tetap konsisten di seluruh wilayah, sehingga mengurangi efisiensi pembaruan.
-
Pengelolaan yang rumit: Seiring bertambahnya jumlah wilayah yang dikelola, Anda harus membedakan dan memelihara Deployment untuk setiap wilayah secara manual, yang meningkatkan beban operasi dan pemeliharaan.
-
Konfigurasi redundan: Konfigurasi Deployment di berbagai wilayah sangat mirip, sehingga pengelolaannya menjadi rumit dan rentan terhadap kesalahan.
Solusi Manajemen Set Aplikasi
Application set (YurtAppSet) adalah fitur yang disediakan oleh Container Service for Edge. Fitur ini menyederhanakan penerapan terdistribusi dalam skenario komputasi tepi dengan menyediakan abstraksi tingkat lebih tinggi untuk pengelolaan terpadu beberapa workload—seperti sumber daya Deployment—termasuk pembuatan, pembaruan, dan penghapusan.
YurtAppSet mengatasi masalah umum dalam solusi tradisional—seperti efisiensi pembaruan rendah, pengelolaan rumit, dan konfigurasi redundan—serta meningkatkan efisiensi operasi dan pemeliharaan serta fleksibilitas penerapan aplikasi.
-
workloadTemplate: Definisi templat terpadu
YurtAppSet memungkinkan Anda mendefinisikan satu workloadTemplate untuk mengelola workload di berbagai wilayah. Hal ini mengurangi konfigurasi penerapan redundan dan membuat operasi batch—seperti pembuatan, pembaruan, dan penghapusan—lebih efisien dan konsisten.
-
nodepoolSelector: Penerapan otomatis
YurtAppSet menggunakan mekanisme nodepoolSelector untuk memilih node pool target secara fleksibel. Mekanisme ini tersinkronisasi dengan perubahan dinamis pada node pool. Saat node pool baru dibuat atau yang sudah ada dihapus, nodepoolSelector secara otomatis mendeteksi dan mencocokkan node pool yang paling sesuai untuk distribusi dan penerapan workload, sehingga mengurangi beban operasi dan pemeliharaan.
-
workloadTweaks: Konfigurasi kustom spesifik wilayah
Saat kebutuhan aplikasi berbeda antarwilayah, YurtAppSet menyediakan fitur workloadTweaks yang memungkinkan Anda menyesuaikan workload di wilayah tertentu agar memenuhi kebutuhan spesifik tanpa harus mengelola atau memperbarui setiap workload secara terpisah.
Buat Instans Application Set
-
Jika kluster ACK Edge menjalankan versi 1.26 atau lebih baru, terapkan aplikasi menggunakan YurtAppSet.
-
Jika kluster ACK Edge menjalankan versi sebelum 1.26, terapkan aplikasi menggunakan UnitedDeployment.
Versi 1.26 dan Lebih Baru
Buat instans application set YurtAppSet yang menggunakan templat workload Deployment.
Contoh templat YAML lengkap adalah sebagai berikut:
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 bidang-bidang terkait:
|
Bidang |
Deskripsi |
Wajib |
|
spec.pools |
Tentukan daftar nama node pool (tipe slice) tempat aplikasi perlu diterapkan. Lebih disarankan menggunakan nodepoolSelector untuk menentukan node pool. |
Tidak |
|
spec.nodepoolSelector |
Pilih node pool tempat aplikasi perlu diterapkan menggunakan labelSelector. Jika pools dan nodepoolSelector keduanya ditentukan, gabungan keduanya akan digunakan.
|
Tidak |
|
spec.workload.workloadTemplate |
Tentukan templat Workload yang akan dikelola. Saat ini, templat |
Ya |
|
spec.workload.workloadTweaks |
Tentukan modifikasi kustom untuk Workload. |
Tidak |
|
spec.workload.workloadTweaks[*].pools |
Tentukan node pool (tipe slice) tempat modifikasi ini berlaku. |
Tidak |
|
spec.workload.workloadTweaks[*].nodepoolSelector |
Pilih node pool yang akan dimodifikasi menggunakan labelSelector. |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.replicas |
Tentukan jumlah replika untuk Workload yang dimodifikasi. |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.containerImages |
Tentukan gambar kontainer untuk Workload yang dimodifikasi. |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.patches |
Ubah bidang apa pun dari workloadTemplate menggunakan bidang `patch`. |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.patches[*].path |
Tentukan jalur bidang yang akan diubah dalam workloadTemplate. |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.patches[*].operation |
Tentukan operasi yang akan dilakukan pada jalur tersebut (saat ini mendukung: add/remove/replace). |
Tidak |
|
spec.workload.workloadTweaks[*].tweaks.patches[*].value |
Tentukan nilai terbaru setelah modifikasi (hanya berlaku untuk operasi add/replace). |
Tidak |
|
status.conditions |
Menunjukkan status saat ini dari YurtAppSet, termasuk status pemilihan node pool dan status Workload. |
|
|
status.readyWorkloads |
Menunjukkan jumlah Workload yang dikelola oleh YurtAppSet di mana semua replika siap. |
|
|
status.updatedWorkloads |
Menunjukkan jumlah Workload yang dikelola oleh YurtAppSet di mana semua replika telah diperbarui ke versi terbaru. |
|
|
status.totalWorkloads |
Menunjukkan jumlah total Workload yang dikelola oleh YurtAppSet. |
Versi Sebelum 1.26
Buat instans UnitedDeployment yang menggunakan templat workload Deployment.
Contoh templat YAML lengkap adalah sebagai berikut:
apiVersion: apps.kruise.io/v1alpha1
kind: UnitedDeployment
metadata:
name: example
namespace: default
spec:
revisionHistoryLimit: 5
selector:
matchLabels:
app: example
template:
deploymentTemplate:
metadata:
creationTimestamp: null
labels:
app: example
spec:
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:
subsets:
- name: cloud
nodeSelectorTerm:
matchExpressions:
- key: alibabacloud.com/nodepool-id
operator: In
values:
- np4b9781c40f0e46c581b2cf2b6160****
replicas: 2
- name: edge
nodeSelectorTerm:
matchExpressions:
- key: alibabacloud.com/nodepool-id
operator: In
values:
- np47832359db2e4843aa13e8b76f83****
replicas: 2
tolerations:
- effect: NoSchedule
key: apps.openyurt.io/taints
operator: Exists
Tabel berikut menjelaskan bidang-bidang terkait:
|
Bidang |
Deskripsi |
|
spec.workloadTemplate |
Merupakan templat Workload yang didukung. Node pool saat ini mendukung templat |
|
spec.topology.subsets |
Tentukan beberapa node pool. |
|
spec.topology.subsets[*].name |
Nama node pool. |
|
spec.topology.pools[*].nodeSelectorTerm |
Untuk konfigurasi afinitas host node pool agar sesuai dengan NodePool, gunakan Catatan
Pada halaman Node Pools, lihat ID node pool di bawah Name node pool cloud dan edge yang sesuai. |
|
spec.topology.pools[*].tolerations |
Konfigurasi toleransi host untuk node pool. |
|
spec.topology.pools[*].replicas |
Jumlah instans Pod di setiap node pool. |
Kelola Aplikasi Edge Menggunakan Application Set
-
Tingkatkan versi aplikasi: Ubah bidang dalam
spec.workload.workloadTemplateuntuk memicu proses upgrade. Controller menerapkan templat yang diperbarui ke workload di setiap node pool, yang kemudian memicu controller node pool untuk melakukan upgrade pod. -
Lakukan pembaruan grayscale untuk aplikasi di suatu wilayah: Ubah konfigurasi
spec.workload.workloadTweak[*].containerImagesuntuk memicu pembaruan gambar pada pod aplikasi di node pool yang sesuai. -
Skalakan aplikasi di suatu wilayah: Ubah konfigurasi
spec.workload.workloadTweak[*].replicasuntuk memicu operasi penskalaan pada pod aplikasi di node pool yang sesuai. -
Terapkan aplikasi ke wilayah baru: Buat node pool baru yang cocok dengan label spec.nodepoolSelector. YurtAppSet mendeteksi perubahan pada sumber daya node pool dan secara otomatis membuat workload untuk node pool tersebut. Kemudian, tambahkan node dari wilayah tersebut ke node pool.
-
Hentikan aplikasi di suatu wilayah: Hapus node pool di wilayah yang sesuai. YurtAppSet secara otomatis menghapus workload yang terkait dengan wilayah tersebut.