ApplicationSet menyederhanakan orkestrasi aplikasi multi-kluster: dari satu templat dan generator, secara otomatis membuat satu atau lebih Argo CD Applications. Topik ini menjelaskan cara menggunakan ApplicationSet untuk membuat beberapa aplikasi.
Gunakan pendekatan ini ketika:
-
Penerapan multi-lingkungan: Terapkan aplikasi yang sama di lingkungan production dan staging dengan konfigurasi khusus lingkungan.
-
Add-on kluster: Instal alat bersama (monitoring, logging, ingress) di seluruh armada kluster.
-
Penerapan mandiri (self-service): Izinkan tim menerapkan ke kluster yang mereka miliki tanpa mengubah konfigurasi bersama.
Cara kerja
Kontroler ApplicationSet memproses manifes Anda dalam empat langkah:
-
Generator menghasilkan parameter berupa pasangan kunci-nilai — pada generator List, setiap elemen menjadi satu set parameter.
-
Parameter tersebut disubstitusikan ke dalam templat, sekali untuk setiap set parameter.
-
Setiap templat yang telah dirender menjadi sebuah resource Argo CD Application.
-
Kontroler Argo CD mengambil resource Application baru tersebut dan mengelola siklus hidup sinkronisasinya.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Menginstal kubectl dengan kubeconfig untuk instans ACK One Fleet target. Jalur default:
~/.kube/config.
Terapkan ApplicationSet
Contoh ini menerapkan echo-server ke dua kluster (production dan staging), masing-masing dengan subdirektori manifes tersendiri untuk konfigurasi khusus lingkungan.
Struktur repositori:
.
├── Dockerfile
├── go.mod
├── go.sum
├── main.go
└── manifests
└── directory
├── production
│ ├── deployment.yaml
│ └── service.yaml
└── staging
├── deployment.yaml
└── service.yaml
Buat manifes ApplicationSet
Buat applicationset.yaml dengan konten berikut.
Generator List menentukan dua set parameter — satu untuk setiap kluster. {{cluster}} dan {{url}} disubstitusikan ke dalam templat, menghasilkan dua Application: production-echo-server dan staging-echo-server. Masing-masing mengarah ke subdirektori manifes lingkungannya.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: echo-server
spec:
generators:
- list:
elements:
- cluster: production
url: https://47.91.XX.XX:6443
- cluster: staging
url: https://47.111.XX.XX:6443
# Untuk menambahkan lebih banyak kluster, tambahkan elemen lain di sini:
# - cluster: <cluster-name>
# url: <cluster-api-server-url>
template:
metadata:
name: '{{cluster}}-echo-server'
spec:
project: default
source:
repoURL: https://code.aliyun.com/shuwei.hsw/echo-server.git
targetRevision: main
path: manifests/directory/{{cluster}}
destination:
server: '{{url}}'
namespace: multi-echo-server
Terapkan ApplicationSet
kubectl -n argocd apply -f applicationset.yaml
Verifikasi pembuatan aplikasi
kubectl -n argocd get application
Output yang diharapkan:
NAME SYNC STATUS HEALTH STATUS
production-echo-server OutOfSync Missing
staging-echo-server OutOfSync Missing
OutOfSync menunjukkan bahwa Application sudah ada tetapi belum diterapkan.
Sinkronkan aplikasi
argocd app sync production-echo-server staging-echo-server
Verifikasi akses
Uji akses ke masing-masing lingkungan setelah proses sinkronisasi selesai.
Cluster Production (echo-server v1.0):
curl XX.XX.XX.XX:8080/version
Output yang diharapkan:
"Hello Echo Server v1.0"
Cluster Staging (echo-server v2.0):
curl XX.XX.XX.XX:8080/version
Output yang diharapkan:
"Hello Echo Server v2.0"
Ganti XX.XX.XX.XX dengan IP eksternal Service echo-server di masing-masing kluster.
Langkah berikutnya
-
Argo CD mendukung generator ApplicationSet tambahan (Cluster, Git, Matrix, dan lainnya). Mulailah dengan generator List dan Cluster.
-
Lihat spesifikasi lengkap ApplicationSet.