1. Tujuan
Kustomize adalah alat yang memperkenalkan cara bebas template untuk menyesuaikan konfigurasi aplikasi, sehingga menyederhanakan penggunaan aplikasi siap pakai. TEE tersedia sebagai utilitas mandiri dan di-build ke dalam kubectl hingga kubectl apply -k
dapat digunakan sebagai CLI mandiri. Untuk mengetahui detail selengkapnya, baca selengkapnya di kustomize.io.
Dalam tutorial ini, Anda akan mempelajari beberapa konsep inti Kustomize dan menggunakannya untuk mengelola variasi di aplikasi dan lingkungan.
Anda akan:
- Memanfaatkan klien command line kustomisasi
- Mengganti elemen umum
- Menambahkan patch pada struktur yaml yang lebih besar
- Menggunakan beberapa lapisan overlay
2. Menyiapkan ruang kerja Anda
- Buka editor Cloud Shell dengan mengunjungi URL berikut
https://ide.cloud.google.com
- Di jendela terminal, buat direktori kerja untuk tutorial ini
mkdir kustomize-lab
- Beralihlah ke direktori dan setel ruang kerja IDE
cd kustomize-lab && cloudshell workspace .
3. Menggunakan klien command line kustom
Keunggulan kustomisasi berasal dari kemampuan untuk menempatkan dan memodifikasi yaml Kubernetes dasar dengan nilai kustom. Untuk melakukan kustomisasi ini, diperlukan file dasar dengan petunjuk lokasi file dan apa yang harus diganti. Kustomize disertakan dalam ekosistem Kubernetes dan dapat dijalankan melalui berbagai metode.
Di bagian ini, Anda akan membuat konfigurasi base kustomize dan memproses file dengan klien command line mandiri.
- Untuk memulai, Anda akan membuat folder untuk menyimpan file konfigurasi dasar Anda
mkdir -p chat-app/base
- Membuat
deployment.yaml
kubernetes 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
- Membuat
kustomization.yaml
dasar
Kustomize akan mencari file bernama kustomization.yaml sebagai titik entri. File ini berisi referensi ke berbagai file dasar dan pengganti 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. Tindakan tersebut akan menghasilkan file YAML deployment tanpa perubahan, yang sudah diperkirakan 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 dalam contoh berikut. Dengan begitu, output perintah build akan di-stream secara langsung ke perintah kubectl apply.
(Do Not Execute - Hanya disertakan untuk referensi)
kustomize build chat-app/base | kubectl apply -f -
Teknik ini berguna jika versi klien kustomisasi tertentu diperlukan.
Selain itu, kustomisasi dapat dijalankan dengan alat yang terintegrasi dalam kubectl itu sendiri. Seperti dalam contoh berikut.
(Do Not Execute - Hanya disertakan untuk referensi)
kubectl apply -k chat-app/base
4. Mengganti elemen umum
Setelah ruang kerja Anda dikonfigurasi dan Anda telah memverifikasi bahwa kustomisasi berfungsi, saatnya untuk mengganti beberapa nilai dasar.
Gambar, namespace, dan label sangat umum disesuaikan untuk setiap aplikasi dan lingkungan. Karena biasanya 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 kumpulan resource dasar kini dapat digunakan untuk beberapa implementasi hanya dengan mengubah nama dan namespace-nya.
Dalam contoh ini, Anda akan menambahkan namespace, awalan nama, dan menambahkan beberapa label ke kustomization.yaml
.
- Perbarui file
kustomization.yaml
untuk 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
- Menjalankan perintah build
Saat build dijalankan pada tahap ini, 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 tidak disalin)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Mem-patch struktur yaml yang lebih besar
Kustomize juga memberikan kemampuan untuk menerapkan patch yang menempatkan 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.
- Mulai dengan membuat folder untuk lingkungan yang berbeda
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Tulis patch stage 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 prod 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.
- Mengimplementasikan file YAML kustom untuk direktori dasar
Tulis ulang base kustomization.yaml, hapus namespace dan awalan nama karena ini hanyalah 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
- Mengimplementasikan file YAML kustom 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
: dari file. Ini menunjukkan bahwa kustomize harus menempatkan file-file tersebut di atas resource dasar.
- Mengimplementasikan file YAML kustom untuk direktori produk
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 mem-patch file dasar.
Jalankan perintah berikut untuk dev guna melihat hasil gabungan.
kustomize build chat-app/dev
Perlu diperhatikan bahwa output berisi hasil gabungan seperti label dari konfigurasi dasar dan dev, serta nama image container dari folder dasar dan variabel lingkungan dari folder dev.
6. Menggunakan 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 dalam 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 yang di-deploy.
- Membuat folder shared-kustomize
mkdir shared-kustomize
- Membuat
deployment.yaml
sederhana 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 kustomization.yaml di folder bersama
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Mereferensikan 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 lakukan patch deployment.yaml-nya sendiri di bagian atas. Kemudian, folder lingkungan akan di-patch lagi.
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 kustomize dan lihat hasil gabungan untuk developer
kustomize build chat-app/dev
Perhatikan bahwa output berisi hasil gabungan dari basis aplikasi, lingkungan aplikasi, dan folder shared-kustomize
. Secara khusus, Anda dapat melihat nilai bagian container dari ketiga lokasi.
(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>