Penskalaan dengan Kustomize

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

  1. Buka editor Cloud Shell dengan mengunjungi URL berikut

https://ide.cloud.google.com

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

mkdir kustomize-lab

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

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

mkdir -p chat-app/base

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

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

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

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

  1. Mulai dengan membuat folder untuk lingkungan yang berbeda

mkdir -p chat-app/dev

mkdir -p chat-app/prod

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

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

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

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

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

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

  1. Membuat folder shared-kustomize

mkdir shared-kustomize

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

  1. Buat kustomization.yaml di folder bersama

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

bases:

- deployment.yaml

EOF

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

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