Tutorial ini menunjukkan cara menyiapkan Config Sync untuk edisi Google Kubernetes Engine (GKE) Enterprise di dua lingkungan, satu untuk pengembangan dan satu untuk produksi, menggunakan praktik terbaik untuk Config Sync.
Dalam skenario ini, Anda adalah bagian dari tim admin platform di Foo Corp. Aplikasi Foo Corp di-deploy ke GKE Enterprise, dengan resource yang dibagi di dua project, yaitu dev
dan prod
. Project dev
berisi cluster GKE Enterprise pengembangan, dan project prod
berisi cluster GKE Enterprise produksi. Tujuan Anda sebagai admin platform adalah memastikan bahwa
kedua lingkungan tetap mematuhi kebijakan Foo Corp, dan resource tingkat
dasar, seperti namespace dan akun layanan Kubernetes, tetap konsisten di
kedua lingkungan.
Diagram berikut menunjukkan 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 Kustomisasi, yang memicu proses rendering secara otomatis di Config Sync. Untuk detail selengkapnya, lihat Menggunakan repo dengan konfigurasi Kustomize dan diagram Helm.
Seperti yang ditunjukkan dalam diagram sebelumnya, dalam tutorial ini, Anda akan membuat resource berikut:
- Dua Google Cloud project yang mewakili lingkungan pengembangan dan produksi.
- Dua cluster GKE Enterprise,
dev
danprod
, dalam project terpisah, dengan Config Sync terinstal.
Arsitektur repositori
Dalam tutorial ini, Anda akan mengonfigurasi Config Sync untuk menyinkronkan ke konfigurasi di
direktori config-source/
repositori contoh. 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/
dan overlay Kustomize dev/
dan prod/
. Setiap direktori berisi file kustomization.yaml
,
yang mencantumkan file yang harus dikelola dan diterapkan Kustomize ke cluster.
Di dev/kustomization.yaml
dan prod/kustomization.yaml
, serangkaian patch ditentukan. Patch ini memanipulasi resource base/
untuk lingkungan
tertentu tersebut.
Misalnya, RoleBinding dev memungkinkan semua developer Foo Corp men-deploy Pod ke cluster dev, sedangkan RoleBinding prod hanya mengizinkan agen Continuous Deployment, deploy-bot@foo-corp.com
, men-deploy Pod ke 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
- Siapkan Config Sync untuk merender dan menyinkronkan konfigurasi secara otomatis untuk dua lingkungan terpisah.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
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:
Di konsol Google Cloud , pada halaman pemilih project, pilih atau buat dua Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
Upgrade Google Cloud CLI ke versi terbaru.
Menginstal atau mengupgrade perintah
nomos
Membuat dan mendaftarkan cluster Anda
Agar Anda dapat berfokus pada alur kerja yang perlu digunakan saat mengonfigurasi
Config Sync untuk beberapa lingkungan, direktori
multi-environments-kustomize
berisi skrip yang dapat Anda gunakan untuk mengotomatiskan konfigurasi
Config Sync.
Gandakan repositori sampel
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Buka folder yang berisi resource yang Anda butuhkan untuk tutorial ini:
cd anthos-config-management-samples/multi-environments-kustomize/
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 projectGoogle Cloud yang ingin Anda gunakan sebagai project devPROD_PROJECT_ID
: project ID dari Google Cloud project yang ingin Anda gunakan sebagai project produksiDEV_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 produksi
Untuk membuat dua cluster, jalankan skrip
./create-clusters.sh
:./create-clusters.sh
Skrip ini membuat satu cluster GKE Enterprise bernama
dev
di project dev dan satu cluster GKE Enterprise bernamaprod
di project prod. Skrip ini juga mengaktifkan GKE Enterprise API dan terhubung ke clusterdev
danprod
sehingga Anda dapat mengakses API-nya dengankubectl
.Contoh output:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
Untuk mendaftarkan cluster Anda ke dua fleet terpisah, jalankan skrip
register-clusters.sh
:./register-clusters.sh
Skrip ini membuat akun layanan dan kunci untuk pendaftaran cluster GKE Enterprise, lalu menggunakan perintah
gcloud container fleet memberships register
untuk mendaftarkan clusterdev
danprod
ke GKE Enterprise di projectnya masing-masing. Google CloudContoh 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 memverifikasi penginstalannya.
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 menyinkronkan ke konfigurasi di repositori Anda.
Verifikasi konfigurasi Anda
Di bagian ini, Anda akan memeriksa untuk memastikan bahwa cluster Anda disinkronkan ke konfigurasi di repositori Anda:
Untuk memeriksa status penginstalan Config Sync, jalankan perintah
nomos status
:nomos status
Anda akan melihat bahwa cluster dev dan prod Anda kini disinkronkan ke repositori 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 ```
Gunakan
kubectl
untuk beralih ke cluster dev:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
Untuk memverifikasi bahwa resource disinkronkan, dapatkan namespace. Anda akan melihat namespace
foo
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 dev dan prod, di beberapa 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.
Menghapus semua resource
Untuk menghapus resource yang Anda buat dalam tutorial ini, tetapi tetap mempertahankan project dev dan prod, jalankan skrip pembersihan:
./cleanup.sh
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Mempelajari Peluncuran yang aman dengan Config Sync
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.