Menggunakan Config Sync dengan Kustomize dan Helm

Dalam tutorial ini, Anda akan menambahkan konfigurasi Kustomize yang mereferensikan diagram Helm ke repositori, lalu menggunakan Config Sync untuk menyinkronkan cluster ke repositori.

Saat Anda menggunakan Config Sync, konfigurasi Kustomize dan diagram Helm yang Anda tempatkan di repositori Git akan dirender secara otomatis. Rendering otomatis memberikan manfaat berikut:

  • Anda tidak lagi memerlukan pipeline hidrasi eksternal. Tanpa rendering otomatis, Anda harus merender konfigurasi secara manual menggunakan Kustomize dan Helm di workstation, atau menyiapkan langkah untuk memicu proses hidrasi di sistem CI. Dengan rendering otomatis, Config Sync menangani eksekusi.

  • Biaya pemeliharaan Anda berkurang. Tanpa rendering otomatis, Anda harus mengelola satu repositori Git dengan konfigurasi Kustomize asli dan diagram Helm, serta repositori Git lain dengan output yang dihasilkan oleh penggabungan eksternal. Kemudian, Anda harus mengonfigurasi Config Sync untuk menyinkronkan dari repositori Git dengan output yang dirender. Dengan rendering otomatis, Anda hanya perlu mengelola satu repositori dengan konfigurasi asli.

  • Alur kerja pengembangan Anda disederhanakan. Tanpa rendering otomatis, perubahan yang dilakukan pada konfigurasi asli Anda perlu ditinjau dua kali sebelum digabungkan; sekali di repositori asli dan sekali lagi di repositori yang dirender. Dengan rendering otomatis, konfigurasi yang dirender dihasilkan oleh Config Sync, dan Anda hanya perlu meninjau perubahan pada konfigurasi asli.

Mengonfigurasi repositori Anda

Tugas berikut menunjukkan cara menyiapkan repositori Git dengan konfigurasi yang menggabungkan konfigurasi Kustomize dengan Helm chart:

  1. Buat, atau pastikan Anda memiliki akses ke, repositori Git. Karena repositori Anda menggunakan Kustomize dan Helm, repositori ini harus berupa repositori tidak terstruktur.

  2. Di root repositori Git Anda, buat file bernama kustomization.yaml dan tempelkan kode berikut ke dalamnya:

    # ./kustomization.yaml
    resources:
    - base
    
    patches:
    - path: ignore-deployment-mutation-patch.yaml
      target:
        kind: Deployment
    

    File ini adalah overlay Kustomize yang mengarah ke dasar Kustomize. Overlay ini mencakup patch untuk dasar diagram Helm yang menambahkan anotasi client.lifecycle.config.k8s.io/mutation: ignore ke semua objek Deployment. Anotasi menyebabkan Config Sync mengabaikan perubahan yang bertentangan pada objek ini di cluster setelah Anda membuatnya.

  3. Di repositori Git Anda, buat direktori bernama base:

    mkdir base
    
  4. Di direktori base, buat file lain bernama kustomization.yaml lalu tempelkan kode berikut ke dalamnya:

    # ./base/kustomization.yaml
    helmCharts:
    - name: cert-manager
      repo: https://charts.jetstack.io
      version: v1.5.3
      releaseName: my-cert-manager
      namespace: cert-manager
    

    File ini adalah dasar Kustomize, yang merender diagram Helm jarak jauh.

  5. Kembali ke root repositori Git Anda, buat file bernama ignore-deployment-mutation-patch.yaml, lalu tempelkan kode berikut ke dalamnya:

    # ./ignore-deployment-mutation-patch.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: any
     annotations:
       client.lifecycle.config.k8s.io/mutation: ignore
    

    File ini adalah patch yang diterapkan ke diagram Helm dasar. Tindakan ini menambahkan anotasi client.lifecycle.config.k8s.io/mutation: ignore ke semua Deployment di direktori dasar.

  6. Lakukan perubahan pada repositori Anda:

    git add .
    git commit -m 'Set up manifests.'
    git push
    

Repositori contoh memiliki contoh tampilan repositori tersebut.

Melihat pratinjau dan memvalidasi konfigurasi yang dirender

Sebelum Config Sync merender konfigurasi dan menyinkronkannya ke cluster, pastikan konfigurasi akurat dengan menjalankan nomos hydrate untuk melihat pratinjau konfigurasi yang dirender dan menjalankan nomos vet untuk memvalidasi bahwa formatnya sudah benar.

  1. Jalankan nomos hydrate berikut dengan flag berikut:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    Dalam perintah ini:

    • --source-format=unstructured memungkinkan nomos hydrate berfungsi di repositori tidak terstruktur. Karena Anda menggunakan konfigurasi Kustomize dan diagram Helm, Anda harus menggunakan repositori tidak terstruktur dan menambahkan tanda ini.
    • --output=OUTPUT_DIRECTORY memungkinkan Anda menentukan jalur ke konfigurasi yang dirender. Ganti OUTPUT_DIRECTORY dengan lokasi tempat Anda ingin menyimpan output.
  2. Periksa sintaksis dan validitas konfigurasi Anda dengan menjalankan nomos vet dengan flag berikut:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    Dalam perintah ini:

    • --source-format=unstructured memungkinkan nomos vet berfungsi di repositori tidak terstruktur.
    • --keep-output=true menyimpan konfigurasi yang dirender.
    • --output=OUTPUT_DIRECTORY adalah jalur ke konfigurasi yang dirender.

Mengonfigurasi sinkronisasi dari repositori Git

Setelah membuat repositori dengan konfigurasi yang ingin digunakan, Anda dapat mengonfigurasi sinkronisasi dari cluster ke repositori.

  1. Untuk mengonfigurasi objek RootSync, buat file root-sync.yaml:

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: YOUR_GIT_REPOSITORY
        branch: main
        auth: none
      override:
        enableShellInRendering: true
    

    Ganti YOUR_GIT_REPOSITORY dengan URL repositori Git Anda.

  2. Terapkan file root-sync.yaml ke cluster Anda:

    kubectl apply -f root-sync.yaml
    

Memverifikasi penginstalan

Setelah menginstal dan mengonfigurasi Config Sync, Anda dapat memverifikasi bahwa penginstalan berhasil diselesaikan.

  1. Verifikasi bahwa tidak ada error lain dengan menggunakan nomos status:

    nomos status
    

    Contoh output:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. Verifikasi apakah komponen Helm berhasil diinstal:

    kubectl get all -n cert-manager
    

    Contoh output:

    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/my-cert-manager-54f5ccf74-wfzs4               1/1     Running   0          10m
    pod/my-cert-manager-cainjector-574bc8678c-rh7mq   1/1     Running   0          10m
    pod/my-cert-manager-webhook-7454f4c77d-rkct8      1/1     Running   0          10m
    
    NAME                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/my-cert-manager           ClusterIP   10.76.9.35     <none>        9402/TCP   10m
    service/my-cert-manager-webhook   ClusterIP   10.76.11.205   <none>        443/TCP    10m
    
    NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/my-cert-manager              1/1     1            1           10m
    deployment.apps/my-cert-manager-cainjector   1/1     1            1           10m
    deployment.apps/my-cert-manager-webhook      1/1     1            1           10m
    
    NAME                                                    DESIRED   CURRENT   READY   AGE
    replicaset.apps/my-cert-manager-54f5ccf74               1         1         1       10m
    replicaset.apps/my-cert-manager-cainjector-574bc8678c   1         1         1       10m
    replicaset.apps/my-cert-manager-webhook-7454f4c77d      1         1         1       10m