Penskalaan dengan Kustomize

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

  1. Buka editor Cloud Shell dengan membuka URL berikut

https://ide.cloud.google.com

  1. Di jendela terminal, buat direktori kerja untuk tutorial ini

mkdir kustomize-lab

  1. 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.

  1. Untuk memulai, Anda akan membuat folder untuk menyimpan file konfigurasi dasar

mkdir -p chat-app/base

  1. Buat 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

  1. Buat kustomization.yaml dasar

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

  1. 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.

  1. 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

  1. 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.

  1. Mulailah dengan membuat folder untuk lingkungan yang berbeda

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. 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

  1. 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.

  1. 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

  1. 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.

  1. 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

  1. 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.

  1. Buat folder shared-kustomize

mkdir shared-kustomize

  1. Buat 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

  1. Buat kustomisasi.yaml di folder bersama

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. 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

  1. 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>