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: testTabel 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 | 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: |
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 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.workloadTemplateuntuk 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[*].containerImagesuntuk memicu pembaruan gambar untuk pod di wilayah tertentu.Skala pod di wilayah tertentu: Modifikasi parameter
spec.workload.workloadTweak[*].replicasuntuk 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.