Menggunakan Config Sync di beberapa lingkungan dengan rendering otomatis


Tutorial ini menunjukkan kepada Anda cara menyiapkan Sinkronisasi Konfigurasi untuk Edisi Google Kubernetes Engine (GKE) Enterprise di dua lingkungan, satu untuk pengembangan dan satu lagi untuk produksi, menggunakan praktik terbaik untuk Config Sync.

Dalam skenario ini, Anda adalah bagian dari tim admin platform di Foo Corp. The Foo Corp aplikasi di-deploy ke GKE Enterprise, dengan resource yang dibagi di dua project, dev dan prod. Project dev berisi pengembangan Cluster GKE Enterprise, dan project prod berisi lingkungan production GKE Enterprise. Tujuan Anda sebagai admin platform adalah untuk memastikan bahwa kedua lingkungan tersebut tetap mematuhi kebijakan Foo Corp, dan mendasari level resource, seperti namespace Kubernetes dan akun layanan, tetap konsisten di kedua lingkungan.

Diagram berikut menampilkan ringkasan tentang lingkungan yang Anda atur dalam tutorial ini:

Ringkasan lingkungan yang Anda siapkan dalam tutorial ini.

Tutorial ini memanfaatkan fitur rendering otomatis di Config Sync untuk merender resource di cluster. Setiap cluster dikonfigurasi untuk menyinkronkan dari direktori yang berisi file konfigurasi Kustomization, yang memicu proses rendering secara otomatis di Config Sync. Untuk selengkapnya detail, lihat Gunakan repositori dengan konfigurasi Kustomize dan chart Helm.

Seperti ditunjukkan dalam diagram sebelumnya, dalam tutorial ini Anda akan membuat referensi:

  • Dua project Google Cloud yang mewakili pengembangan dan produksi lingkungan fleksibel App Engine.
  • Dua cluster GKE Enterprise, dev dan prod, dalam project terpisah, dengan Config Sync yang terinstal.

Arsitektur repositori

Dalam tutorial ini, Anda mengonfigurasi Config Sync untuk disinkronkan dengan konfigurasi di Direktori config-source/ dari repositori sampel. Direktori ini berisi direktori dan file berikut:

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

Direktori config-source mencakup manifes base/, dev/, dan prod/ Kustomize overlay. Setiap direktori berisi satu file kustomization.yaml, yang berisi daftar file yang harus dikelola dan diterapkan oleh Kustomize. Di dev/kustomization.yaml dan prod/kustomization.yaml serangkaian patch ditentukan. Patch ini memanipulasi resource base/ untuk lingkungan fleksibel App Engine.

Misalnya, RoleBinding dev memungkinkan semua developer Foo Corp men-deploy Pod ke cluster dev, sedangkan RoleBinding produksi hanya mengizinkan Agen deployment, deploy-bot@foo-corp.com, untuk men-deploy Pod ke dalam produksi:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

Tujuan

  • Menyiapkan Config Sync agar otomatis merender dan menyinkronkan konfigurasi untuk dua lingkungan terpisah.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Sebelum memulai tutorial ini, pastikan Anda telah menyelesaikan langkah-langkah berikut:

  1. Di Konsol Google Cloud, pada halaman pemilih project, pilih atau buat dua project Google Cloud.

    Buka pemilih project

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Upgrade Google Cloud CLI Anda ke versi terbaru.

  4. Instal atau upgrade perintah nomos

Membuat dan mendaftarkan cluster

Agar Anda dapat berfokus pada alur kerja yang perlu digunakan saat mengonfigurasi Config Sync untuk beberapa lingkungan, multi-environments-kustomize berisi skrip yang dapat Anda gunakan untuk mengotomatisasi konfigurasi Sinkronisasi Konfigurasi.

  1. Gandakan repositori sampel

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Buka folder yang berisi resource yang Anda perlukan untuk tutorial:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Untuk menjalankan skrip yang digunakan dalam tutorial ini, tetapkan variabel berikut:

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    Ganti kode berikut:

    • DEV_PROJECT_ID: project ID dari Project Google Cloud yang ingin Anda gunakan sebagai project pengembangan
    • PROD_PROJECT_ID: project ID dari Project Google Cloud yang ingin Anda gunakan sebagai project produk
    • DEV_CLUSTER_ZONE: zona Compute Engine tempat Anda ingin membuat cluster dev. Misalnya, us-central1-c.
    • PROD_CLUSTER_ZONE: zona Compute Engine tempat Anda ingin membuat cluster produk
  4. Untuk membuat dua cluster, jalankan skrip ./create-clusters.sh:

    ./create-clusters.sh
    

    Skrip ini membuat satu cluster GKE Enterprise bernama dev di instance dan satu cluster GKE Enterprise bernama prod dalam project produksi. Skrip ini juga mengaktifkan GKE Enterprise API dan terhubung ke cluster dev dan prod sehingga Anda dapat mengakses API-nya dengan kubectl.

    Contoh output:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. Untuk mendaftarkan cluster Anda ke dua fleet yang berbeda, jalankan skrip register-clusters.sh:

    ./register-clusters.sh
    

    Skrip ini menghasilkan kunci dan akun layanan Google Cloud untuk pendaftaran cluster GKE Enterprise, lalu menggunakan Perintah gcloud container fleet memberships register untuk mendaftarkan dev dan prod cluster ke GKE Enterprise dalam project mereka sendiri.

    Contoh output:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Menyiapkan Config Sync

Setelah membuat dan mendaftarkan cluster, Anda dapat menginstal Config Sync dan verifikasi penginstalan.

Menginstal Config Sync

Untuk menginstal Config Sync, di cluster dev dan prod, jalankan Skrip install-config-sync.sh:

./install-config-sync.sh

Output yang diharapkan:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

Config Sync kini disinkronkan ke konfigurasi di repositori Anda.

Verifikasi konfigurasi Anda

Di bagian ini, Anda akan memeriksa untuk memastikan bahwa cluster disinkronkan ke konfigurasi di repositori Anda:

  1. Untuk memeriksa status penginstalan Config Sync Anda, jalankan Perintah nomos status:

    nomos status
    

    Anda akan melihat bahwa cluster pengembangan dan produksi sekarang disinkronkan ke repo masing-masing:

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. Gunakan kubectl untuk beralih ke cluster dev:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Dapatkan namespace untuk memastikan bahwa resource sudah disinkronkan. Anda akan melihat namespace foo akan muncul.

    kubectl get namespace
    

    Contoh output:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    Sekarang Anda telah menyiapkan rendering konfigurasi otomatis untuk lingkungan pengembangan dan produksi, di berbagai project dan lingkungan Google Cloud.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Hapus semua resource

Untuk menghapus resource yang Anda buat dalam tutorial ini, tetapi untuk mempertahankan kedua dev dan prod tetap utuh, jalankan skrip pembersihan:

./cleanup.sh

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya