1. Tujuan
Kustomize adalah alat yang memperkenalkan cara tanpa template untuk menyesuaikan konfigurasi aplikasi, sehingga menyederhanakan penggunaan aplikasi siap pakai. Fitur ini tersedia sebagai utilitas mandiri dan di-build ke dalam kubectl melalui kubectl apply -k atau dapat digunakan sebagai CLI mandiri. Untuk mengetahui detail tambahan, baca selengkapnya di kustomize.io.
Dalam tutorial ini, Anda akan mempelajari beberapa konsep inti Kustomize dan menggunakannya untuk mengelola variasi dalam aplikasi dan lingkungan.
Anda akan:
- Menggunakan klien command line kustomize
- Mengganti elemen umum
- Membuat patch struktur yaml yang lebih besar
- Memanfaatkan beberapa lapisan overlay
2. Menyiapkan ruang kerja Anda
- Buka editor Cloud Shell dengan membuka URL berikut
https://ide.cloud.google.com
- Di jendela terminal, buat direktori kerja untuk tutorial ini
mkdir kustomize-lab
- Ubah ke direktori dan tetapkan ruang kerja IDE
cd kustomize-lab && cloudshell workspace .
3. Menggunakan klien command line kustomize
Kemampuan kustomisasi berasal dari kemampuan untuk menempatkan dan mengubah YAML Kubernetes dasar dengan nilai kustom. Untuk melakukannya, kustomize memerlukan file dasar dengan petunjuk tentang lokasi file dan apa yang akan diganti. Kustomize disertakan dalam ekosistem Kubernetes dan dapat dieksekusi melalui berbagai metode.
Di bagian ini, Anda akan membuat konfigurasi kustomisasi dasar dan memproses file dengan klien command line kustomisasi mandiri.
- Untuk memulai, Anda akan membuat folder untuk menyimpan file konfigurasi dasar
mkdir -p chat-app/base
- Buat
deployment.yamlkubernetes sederhana di folder dasar
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- Buat
kustomization.yamldasar
Kustomize mencari file bernama kustomization.yaml sebagai titik entri. File ini berisi referensi ke berbagai file dasar dan penggantian, serta nilai penggantian tertentu.
Buat file kustomization.yaml yang mereferensikan deployment.yaml sebagai resource dasar.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Jalankan perintah kustomize di folder dasar. Dengan melakukannya, file YAML deployment akan ditampilkan tanpa perubahan, yang diharapkan karena Anda belum menyertakan variasi apa pun.
kustomize build chat-app/base
Klien mandiri ini dapat digabungkan dengan klien kubectl untuk menerapkan output secara langsung seperti pada contoh berikut. Dengan demikian, output perintah build akan langsung di-streaming ke perintah kubectl apply.
(Jangan Jalankan - Hanya disertakan untuk referensi)
kustomize build chat-app/base | kubectl apply -f -
Teknik ini berguna jika versi tertentu dari klien kustomisasi diperlukan.
Atau, kustomize dapat dieksekusi dengan alat yang terintegrasi dalam kubectl itu sendiri. Seperti dalam contoh berikut.
(Jangan Jalankan - Hanya disertakan untuk referensi)
kubectl apply -k chat-app/base
4. Mengganti elemen umum
Setelah ruang kerja Anda dikonfigurasi dan Anda memverifikasi bahwa kustomize berfungsi, saatnya mengganti beberapa nilai dasar.
Gambar, namespace, dan label sangat umum disesuaikan untuk setiap aplikasi dan lingkungan. Karena sering diubah, Kustomize memungkinkan Anda mendeklarasikannya langsung di kustomize.yaml, sehingga tidak perlu membuat banyak patch untuk skenario umum ini.
Teknik ini sering digunakan untuk membuat instance template tertentu. Satu set dasar resource kini dapat digunakan untuk beberapa penerapan hanya dengan mengubah nama dan namespace-nya.
Dalam contoh ini, Anda akan menambahkan namespace, awalan nama, dan beberapa label ke kustomization.yaml.
- Perbarui file
kustomization.yamluntuk menyertakan label dan namespace umum.
Salin dan jalankan perintah berikut di terminal Anda
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- Jalankan perintah build
Menjalankan build pada tahap ini menunjukkan bahwa file YAML yang dihasilkan kini berisi namespace, label, dan nama berawalan dalam definisi layanan dan deployment.
kustomize build chat-app/base
Perhatikan bagaimana output berisi label dan namespace yang tidak ada dalam file YAML deployment. Perhatikan juga bagaimana nama diubah dari chat-app menjadi my-chat-app
(Output jangan disalin)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Membuat patch pada struktur yaml yang lebih besar
Kustomize juga memberikan kemampuan untuk menerapkan patch yang menimpa resource dasar. Teknik ini sering digunakan untuk memberikan variabilitas antara aplikasi dan lingkungan.
Pada langkah ini, Anda akan membuat variasi lingkungan untuk satu aplikasi yang menggunakan resource dasar yang sama.
- Mulailah dengan membuat folder untuk lingkungan yang berbeda
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Tulis patch tahap dengan perintah berikut
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- Sekarang, tulis patch produksi dengan perintah berikut
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
Perhatikan bahwa patch di atas tidak berisi nama image container. Nilai tersebut diberikan di base/deployment.yaml yang Anda buat di langkah sebelumnya. Namun, patch ini berisi variabel lingkungan unik untuk pengembangan dan produksi.
- Terapkan file YAML kustomize untuk direktori dasar
Tulis ulang base kustomization.yaml, hapus namespace dan awalan nama karena ini hanya konfigurasi dasar tanpa variasi. Kolom tersebut akan dipindahkan ke file lingkungan sebentar lagi.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- Terapkan file YAML kustomize untuk direktori dev
Sekarang terapkan variasi untuk dev dan prod dengan menjalankan perintah berikut di terminal Anda.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Perhatikan penambahan bagian patches: pada file. Hal ini menunjukkan bahwa kustomize harus menempatkan file tersebut di atas resource dasar.
- Terapkan file YAML kustomize untuk direktori prod
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Jalankan kustomize untuk menggabungkan file
Setelah file dasar dan lingkungan dibuat, Anda dapat menjalankan proses kustomisasi untuk menambal file dasar.
Jalankan perintah berikut untuk melihat hasil gabungan bagi dev.
kustomize build chat-app/dev
Perhatikan bahwa output berisi hasil gabungan seperti label dari konfigurasi dasar dan pengembangan serta nama image container dari konfigurasi dasar dan variabel lingkungan dari folder pengembangan.
6. Memanfaatkan beberapa lapisan overlay
Banyak organisasi memiliki tim yang membantu mendukung tim aplikasi dan mengelola platform. Sering kali tim ini ingin menyertakan detail spesifik yang akan disertakan di semua aplikasi di semua lingkungan, seperti agen logging.
Dalam contoh ini, Anda akan membuat folder dan resource shared-kustomize yang akan disertakan oleh semua aplikasi dan terlepas dari lingkungan tempat aplikasi tersebut di-deploy.
- Buat folder shared-kustomize
mkdir shared-kustomize
- Buat
deployment.yamlsederhana di folder bersama
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- Buat kustomisasi.yaml di folder bersama
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Merujuk folder shared-kustomize dari aplikasi Anda
Karena Anda ingin folder shared-kustomize menjadi dasar untuk semua aplikasi, Anda harus mengupdate chat-app/base/kustomization.yaml untuk menggunakan shared-kustomize sebagai dasar. Kemudian, tambahkan patch deployment.yaml-nya sendiri di atasnya. Folder lingkungan kemudian akan di-patch lagi di atasnya.
Salin dan jalankan perintah berikut di terminal Anda
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- Jalankan kustomisasi dan lihat hasil gabungan untuk dev
kustomize build chat-app/dev
Perhatikan bahwa output berisi hasil gabungan dari dasar aplikasi, lingkungan aplikasi, dan folder shared-kustomize. Secara khusus, Anda dapat melihat nilai dari ketiga lokasi di bagian penampung.
(output jangan disalin)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>