Tutorial ini menunjukkan cara mengaktifkan aplikasi baru, mengembangkan fitur untuk aplikasi, dan men-deploy aplikasi ke produksi menggunakan teknik continuous integration/continuous delivery (CI/CD) modern dengan Google Kubernetes Engine (GKE).
Dokumen ini adalah bagian dari rangkaian:
- CI/CD modern dengan GKE: Framework pengiriman software
- CI/CD modern dengan GKE: Membangun sistem CI/CD (arsitektur referensi)
- CI/CD modern dengan GKE: Menerapkan alur kerja developer (dokumen ini)
Dalam tutorial ini, Anda menggunakan alat seperti
Skaffold,
kustomize
,
Artifact Registry,
Config Sync,
Cloud Build, dan
Cloud Deploy untuk mengembangkan, membangun, dan men-deploy aplikasi Anda.
Dokumen ini ditujukan untuk arsitek perusahaan dan developer aplikasi, serta tim keamanan IT, DevOps, dan Site Reliability Engineering (SRE). Beberapa pengalaman dengan alat dan proses deployment otomatis akan berguna untuk memahami konsep dalam dokumen ini.
Arsitektur
Dalam tutorial ini, Anda akan mengaktifkan aplikasi baru. Kemudian, Anda mengembangkan fitur baru dan men-deploy aplikasi di lingkungan dev, staging, dan produksi. Arsitektur referensi berisi infrastruktur dan alat yang diperlukan untuk mengaktifkan dan merilis aplikasi baru dengan alur kerja yang ditunjukkan dalam diagram berikut:
Mulai dari repositori kode untuk CI, alur kerja mencakup langkah-langkah berikut:
Anda membagikan kode sumber aplikasi melalui repositori aplikasi.
Saat Anda meng-commit dan mengirim kode ke repositori aplikasi, pipeline CI di Cloud Build akan otomatis dipicu. Proses CI membuat dan mengirim image container ke Artifact Registry.
Proses CI juga membuat rilis CD untuk aplikasi di Cloud Deploy.
Rilis CD menghasilkan manifes kubernetes yang dirender sepenuhnya untuk dev menggunakan
skaffold
dan men-deploy-nya di cluster GKE dev.Rilis CD kemudian dipromosikan dari dev ke target penyiapan, yang menghasilkan manifes penyiapan yang dirender sepenuhnya dan men-deploy-nya di cluster GKE penyiapan.
Kemudian, rilis CD dipromosikan dari staging ke produksi, yang menghasilkan manifes produksi yang dirender sepenuhnya dan men-deploy-nya di cluster GKE produksi.
Untuk mengetahui informasi selengkapnya tentang alat dan infrastruktur yang digunakan dalam alur kerja ini, lihat CI/CD modern dengan GKE: Membangun sistem CI/CD.
Tujuan
Mengaktifkan aplikasi baru.
Deploy aplikasi di lingkungan pengembangan.
Mengembangkan fitur baru dan men-deploy-nya di lingkungan dev.
Promosikan fitur baru ke staging, lalu rilis ke produksi.
Uji ketahanan aplikasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
- Google Kubernetes Engine
- Google Kubernetes Engine (GKE) Enterprise edition for Config Sync
- Artifact Registry
- Cloud Build
- Cloud Deploy
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
- Untuk tutorial ini, deploy arsitektur referensi dalam seri ini.
Menyiapkan lingkungan Anda
Jika Anda melanjutkan langsung dari CI/CD Modern dengan GKE: Membangun sistem CI/CD, buka bagian berikutnya. Namun, jika Anda memiliki sesi baru, atau sesi Anda telah berakhir, buka Cloud Shell dan tetapkan project tempat Anda menginstal infrastruktur arsitektur referensi:
gcloud config set core/project PROJECT_ID
Ganti
PROJECT_ID
dengan Google Cloud project ID Anda.
Mengaktifkan aplikasi baru
Arsitektur referensi berisi factory aplikasi. Factory ini adalah kumpulan repositori git bernama application-factory-repo
dan pemicu Cloud Build berikut:
create-app
tf-plan
tf-apply
create-team
Anda menggunakan factory aplikasi untuk mengaktifkan aplikasi baru dari repositori starter. Proses orientasi aplikasi terdiri dari langkah-langkah berikut:
Buat definisi aplikasi: Anda membuat definisi aplikasi dalam file Terraform dan menyimpannya di
application-factory-repo
yang berfungsi sebagai katalog aplikasi.Buat infrastruktur aplikasi: Anda menjalankan Terraform pada file definisi aplikasi untuk membuat infrastruktur aplikasi. Infrastruktur aplikasi terdiri dari hal-hal berikut:
Landing zone untuk aplikasi baru mencakup penentuan namespace, akun layanan, dan kebijakan dasar di repositori
acm-gke-infrastructure-repo
. Landing zone hanya dibuat di cluster GKE dev saat mengaktifkan aplikasi baru. Hal ini dilakukan untuk membuka blokir developer sehingga mereka dapat menggunakan lingkungan pengembangan dan mulai melakukan iterasi di dalamnya. Zona landing di cluster staging dan produksi dibuat dengan pendekatan GitOps. Pendekatan ini akan ditunjukkan nanti dalam dokumen ini saat Anda siap mempromosikan rilis di cluster tersebut.Repositori Infrastruktur dari repositori starter infrastruktur yang menghosting kode untuk membuat pipeline CI di Cloud Build, pipeline CD di Cloud Deploy, dan repositori Artifact Registry untuk menyimpan artefak.
Pemicu Cloud Build infrastruktur yang mengambil kode di repositori infrastruktur dan membuat resource berdasarkan definisinya.
Repositori aplikasi dari repositori starter aplikasi yang menghosting kode sumber aplikasi.
Buat resource CI/CD aplikasi: Anda menggunakan infrastruktur aplikasi untuk membuat resource CI/CD aplikasi.
Buat definisi aplikasi:
Jalankan pemicu create-app
untuk membuat file definisi aplikasi di application-factory-repo
. File definisi berisi definisi deklaratif resource yang diperlukan untuk membuat aplikasi.
Di konsol Google Cloud , buka halaman Cloud Build:
Klik Pemicu
create-app
.Klik TAMPILKAN PRATINJAU URL untuk menampilkan URL yang diperlukan untuk memanggil webhook.
Di Cloud Shell, panggil pemicu dengan membuat permintaan curl di URL yang diperoleh dari langkah sebelumnya dan teruskan parameter sebagai payload ke pemicu.
curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'
Dalam contoh kode sebelumnya:
Ganti
WEBHOOK_URL
dengan URL yang diperoleh dari pemicu."app": "sample"
menentukan nama aplikasi."runtime": "python"
memberi tahu factory aplikasi untuk menggunakan template python guna membuat repositori aplikasi."trigger_type": "webhook"
menentukan jenis pipeline CI/CD untuk aplikasi."github_team": ""
adalah tim di GitHub yang akan dikaitkan dengan repositori yang dibuat untuk aplikasi. Karena Anda belum membuat tim GitHub, teruskan sebagai string kosong.
Periksa pemicu
create-app
di pipeline:Buka halaman Histori Cloud Build.
Ada pipeline baru untuk pemicu
create-app
. Setelah selesai, definisi aplikasi akan dibuat diapplication-factory-repo
.Tinjau file definisi aplikasi:
Di browser web, buka GitHub, lalu login ke akun Anda.
Klik ikon gambar, lalu klik
Your organizations
. Pilih organisasi Anda.Klik repositori
application-factory-repo
, buka folderapps/python
, lalu buka file baru bernamasample.tf
yang dibuat oleh pemicucreate-app
. Periksa file, file ini berisi kode Terraform untuk membuat aplikasi baru.
Buat infrastruktur aplikasi:
Setelah membuat definisi aplikasi, Anda menjalankan pemicu tf-apply
untuk membuat infrastruktur aplikasi.
Di Google Cloud console:
Klik pemicu
tf-apply
.Klik "TAMPILKAN PRATINJAU URL" untuk menampilkan URL yang diperlukan untuk memanggil webhook.
Panggil pemicu:
curl "WEBHOOK_URL" -d '{}'
Dalam contoh kode sebelumnya:
- Ganti
WEBHOOK_URL
dengan URL yang diperoleh dari pemicu.
- Ganti
Periksa pemicu
tf-apply
di pipeline:Buka halaman Histori Cloud Build.
Ada pipeline baru untuk pemicu
tf-apply
. Tunggu hingga selesai.
Pemicu ini membuat infrastruktur aplikasi.
Tinjau infrastruktur aplikasi:
Tinjau berbagai komponen infrastruktur aplikasi.
Zona landing
Buka Cloud Shell dan tetapkan project.
gcloud config set core/project PROJECT_ID
Ganti
PROJECT_ID
dengan Google Cloud project ID Anda.Dapatkan kredensial ke cluster GKE pengembangan.
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Periksa namespace aplikasi. Namespace diberi nama sesuai dengan aplikasi, contoh.
kubectl get namespaces sample
Outputnya akan terlihat seperti berikut:
NAME STATUS AGE sample Active 15m
Periksa akun layanan di namespace.
kubectl get serviceaccounts -n sample
Ada akun layanan selain akun default. Outputnya akan terlihat seperti berikut:
NAME SECRETS AGE default 0 15m sample-ksa 0 15m
Repositori infrastruktur
Di browser web, buka GitHub, lalu login ke akun Anda. Klik ikon gambar. Kemudian, klik Your organizations
. Pilih organisasi Anda, lalu klik repositori sample-infra
.
Repositori ini memiliki empat cabang: cicd-trigger
, dev
, staging
, dan prod
. Repositori ini juga berisi empat folder, yaitu cicd-trigger, dev, staging, dan prod. Cabang defaultnya adalah cicd-trigger
dan Anda dapat mengirimkan kode ke cabang tersebut, sementara cabang lainnya memiliki aturan perlindungan sehingga Anda tidak dapat mengirimkan kode langsung ke cabang tersebut. Untuk mengirimkan kode ke cabang tersebut, Anda harus membuat permintaan pull. Folder cicd-trigger
memiliki kode untuk membuat resource CI/CD bagi aplikasi, sedangkan folder dev
, staging
, dan prod
memiliki kode untuk membuat infrastruktur bagi berbagai lingkungan aplikasi.
Pemicu infrastruktur
Di Google Cloud console:
Ada pemicu baru bernama
deploy-infra-sample
.Pemicu ini terhubung ke repositori
sample-infra
sehingga saat push kode terjadi ke repositori ini, pemicu akan dipanggil dan mengidentifikasi cabang tempat push terjadi, lalu membuka folder yang sesuai di cabang tersebut dan menjalankan Terraform di sana. Misalnya, jika kode dikirim ke cabangcicd-trigger
, pemicu akan menjalankan Terraform di folder cicd-trigger pada cabang cicd-trigger. Demikian pula, saat push terjadi ke cabangdev
, pemicu akan menjalankan Terraform di folder dev cabang dev dan seterusnya.
Repositori aplikasi
- Buka GitHub dan tarik repositori di organisasi Anda. Ada repositori baru dengan nama
sample
. Repositori ini menghosting kode sumber dan langkah-langkah untuk membangun container dalam konfigurasiDockerfile
,kustomize
yang menjelaskan konfigurasi yang diperlukan aplikasi danskaffold.yaml
yang menentukan langkah-langkah deployment yang akan digunakan oleh Cloud Deploy untuk CD.
Buat resource CI/CD aplikasi
Setelah membuat kerangka aplikasi, jalankan pemicu deploy-infra-sample
untuk membuat resource CI/CD-nya. Anda dapat memanggil pemicu secara manual menggunakan URL webhook-nya atau dengan melakukan commit ke repositori git sample-infra
.
Untuk memanggil pemicu Cloud Build, tambahkan baris baru dalam file di repositori. Kemudian, kirim perubahan:
Jika Anda belum pernah menggunakan Git di Cloud Shell, konfigurasikan Git dengan nama dan alamat email Anda. Git menggunakan informasi ini untuk mengidentifikasi Anda sebagai penulis commit yang Anda buat di Cloud Shell:
git config --global user.email "GITHUB_EMAIL_ADDRESS" git config --global user.name "GITHUB_USERNAME"
Ganti kode berikut:
GITHUB_EMAIL_ADDRESS
: alamat email yang terkait dengan akun GitHub AndaGITHUB_USERNAME
: nama pengguna yang terkait dengan akun GitHub Anda
Buat clone repositori git
sample-infra
:git clone https://github.com/GITHUB_ORG/sample-infra cd sample-infra
Ganti kode berikut:
GITHUB_ORG
dengan organisasi GitHub Anda.
Cabang default cicd-trigger akan di-checkout.
Tambahkan baris baru ke file env/cicd-trigger/main.tf, lakukan commit perubahan, lalu kirim.
echo "" >> env/cicd-trigger/main.tf
Commit dan kirim perubahan:
git add . git commit -m "A dummy commit to invoke the infrastrucutre trigger" git push cd ..
Segera setelah perubahan dikirim, pemicu Cloud Deploy
deploy-infra-sample
akan dimulai.
Pantau status pemicu:
Buka halaman histori Cloud Build untuk melihat pipeline dan tunggu hingga selesai.
Meninjau resource CICD aplikasi
Tinjau berbagai resource CI/CD yang dibuat untuk aplikasi.
Di konsol Google Cloud :
Buka halaman Cloud Build dan lihat pemicu
deploy-app-sample
.Ini adalah pemicu pipeline CI. Link ini terhubung ke repositori kode aplikasi
sample
. Pemicu dipanggil saat push dilakukan ke repositori aplikasi dan melakukan langkah-langkah build seperti yang ditentukan dalam konfigurasi pemicu. Untuk melihat langkah-langkah yang dilakukan pemicu saat dipanggil, klik nama pemicu, lalu klik tombol BUKA EDITOR.Buka halaman Artifact Registry dan lihat repositori baru dengan nama
sample
.Repositori Artefak ini menyimpan artefak aplikasi.
Buka halaman pipeline Cloud Deploy dan lihat pipeline dengan nama
sample
. Ini adalah pipeline deployment berkelanjutan yang men-deploy aplikasi di cluster GKE.
Deploy aplikasi di lingkungan pengembangan
Pemicu deploy-app-sample
terhubung ke repositori aplikasi bernama sample
. Anda dapat memanggil pemicu secara manual, menggunakan URL webhook, atau melalui push ke repositori aplikasi.
Tambahkan baris baru dalam file di repositori
sample
dan kirim perubahan untuk memanggil pemicu Cloud Build:Buat clone repositori git
sample
:Dalam Cloud Shell:
git clone https://github.com/GITHUB_ORG/sample cd sample
Ganti
GITHUB_ORG
dengan organisasi GitHub Anda.Tambahkan baris baru ke file
skaffold.yaml
.echo "" >> skaffold.yaml
Commit dan kirim perubahan:
git add . git commit -m "A dummy commit to invoke CI/CD trigger" git push
Segera setelah perubahan dikirim, pemicu Cloud Deploy
deploy-app-sample
akan dimulai.
Pantau status pemicu:
Buka halaman histori Cloud Build untuk melihat pipeline dan tunggu hingga selesai.
Pemicu menjalankan langkah-langkah yang ditentukan dalam konfigurasinya. Langkah pertama adalah membuat image Docker dari kode aplikasi di repositori
sample
. Langkah terakhir adalah memulai pipeline Cloud Deploy yang men-deploy aplikasi ke cluster GKE dev.Periksa deployment di cluster dev:
Buka halaman pipeline Cloud Deploy.
pipeline
sample
, deployment ke cluster GKE dev telah dimulai. Tunggu hingga selesai.
Verifikasi bahwa aplikasi telah berhasil di-deploy :
Dapatkan kredensial ke cluster pengembangan.
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Buat tunnel ke cluster GKE.
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
Di toolbar Cloud Shell, klik
Web Preview, lalu klik Preview on port 8080:Outputnya adalah sebagai berikut:
Hello World!
Di Cloud Shell, tekan
CTRL+C
untuk mengakhiri penerusan port.
Menambahkan fitur baru ke aplikasi
Saat mengembangkan fitur baru, Anda perlu men-deploy perubahan dengan cepat ke lingkungan pengembangan untuk menguji dan melakukan iterasi. Dalam tutorial ini, Anda akan membuat perubahan di repositori kode aplikasi dan men-deploy-nya ke lingkungan pengembangan.
Di Cloud Shell, ubah direktori ke repositori
sample
yang sudah di-clone:Perbarui aplikasi untuk menampilkan pesan yang berbeda:
sed -i "s/Hello World/My new feature/g" main.py
Commit dan kirim perubahan:
git add . git commit -m "Changed the message" git push
Segera setelah kode dikirim ke repositori GitHub, pemicu webhook
deploy-app-sample
akan dimulai.Pantau status pemicu di halaman histori Cloud Build dan tunggu hingga selesai.
Buka halaman pipeline Cloud Deploy
pipeline
sample
, deployment ke cluster GKE dev telah dimulai. Tunggu hingga selesai.
Verifikasi bahwa aplikasi telah berhasil di-deploy :
Dapatkan kredensial ke cluster pengembangan jika Anda membuka Cloud Shell baru:
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Buat tunnel ke cluster GKE:
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
Di toolbar Cloud Shell, klik
Web Preview, lalu klik Preview on port 8080:
Outputnya adalah sebagai berikut:
My new feature!
Di Cloud Shell, tekan
CTRL+C
untuk mengakhiri penerusan port.
Promosikan perubahan Anda ke cluster staging dan produksi
Sebelum mempromosikan aplikasi ke lingkungan staging dan produksi, Anda harus membuat landing zone untuk aplikasi di cluster GKE untuk lingkungan tersebut. Saat Anda mengaktifkan aplikasi, landing zone untuk dev akan otomatis dibuat di cluster GKE dev dengan menambahkan kode ke acm-gke-infrastructure-repo
di cabang dev.
Membuat landing zone di cluster GKE staging dan produksi
Buat landing zone di cluster GKE staging: Anda perlu membuat pull request dari cabang dev ke cabang staging di
acm-gke-infrastructure-repo
dan menggabungkannya.Buka GitHub dan jelajahi repositori
acm-gke-infrastructure-repo
. KlikPull requests
, lalu tombolNew pull request
. Di menu Base, pilih staging dan di menu Compare, pilih dev. Klik tombolCreate pull request
.Biasanya, seseorang yang memiliki akses ke repositori akan meninjau perubahan, lalu menggabungkan PR untuk memastikan hanya perubahan yang dimaksudkan yang dipromosikan ke lingkungan penyiapan. Untuk memungkinkan individu mencoba arsitektur referensi, aturan perlindungan cabang telah dilonggarkan sehingga administrator repositori dapat melewati peninjauan dan menggabungkan PR. Jika Anda adalah administrator di repositori, gabungkan pull request. Jika tidak, minta administrator untuk menggabungkannya.
Config Sync menyinkronkan perubahan yang tiba di cabang staging repositori
acm-gke-infrastructure-repo
dengan cluster GKE staging yang menghasilkan pembuatan landing zone untuk aplikasi di cluster GKE staging.Buat landing zone di cluster GKE produksi: Anda perlu membuat permintaan pull dari cabang staging ke prod dan menggabungkannya.
Klik
Pull requests
, lalu tombolNew pull request
. Di menu Base, pilih prod dan di menu Compare, pilih staging. Klik tombolCreate pull request
.Jika Anda adalah administrator di repositori, gabungkan pull request. Jika tidak, minta administrator untuk menggabungkannya.
Config Sync menyinkronkan perubahan yang tiba di cabang prod repositori
acm-gke-infrastructure-repo
dengan cluster GKE produksi yang menghasilkan pembuatan landing zone untuk aplikasi di cluster GKE produksi.
Mempromosikan perubahan dari pengembangan ke staging
Setelah membuat landing zone untuk aplikasi di cluster GKE staging dan produksi, promosikan aplikasi dari lingkungan pengembangan ke lingkungan staging.
Temukan nama rilis terbaru dan simpan sebagai variabel lingkungan:
export RELEASE=$(gcloud deploy targets describe dev --region=us-central1 --format="json" | jq -r '."Active Pipeline"[0]."projects/PROJECT_ID/locations/us-central1/deliveryPipelines/sample"."Latest release"' | awk -F '/' '{print $NF}')
Ganti
PROJECT_ID
dengan Google Cloud project ID Anda.Verifikasi bahwa variabel lingkungan telah ditetapkan:
echo $RELEASE
Di Cloud Shell, jalankan perintah berikut untuk memicu promosi rilis dari lingkungan pengembangan ke lingkungan staging:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=staging --quiet
Periksa deployment penyiapan:
Buka halaman pipeline Cloud Deploy
pipeline
sample
, deployment ke cluster GKE staging telah dimulai. Tunggu hingga selesai.Pastikan deployment staging berhasil:
Dapatkan kredensial ke cluster staging:
gcloud container clusters get-credentials gke-staging-us-central1 --zone us-central1-a
Buat tunnel ke cluster GKE:
gcloud container clusters get-credentials gke-staging-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
Di toolbar Cloud Shell, klik
Web Preview, lalu klik Preview on port 8080:
Outputnya adalah sebagai berikut:
My new feature!
Di Cloud Shell, tekan
CTRL+C
untuk mengakhiri penerusan port.
Mempromosikan perubahan dari staging ke produksi
Sekarang, promosikan rilis dari staging ke produksi. Anda memiliki dua cluster produksi dan Cloud Deploy memiliki target untuk masing-masing cluster yang bernama prod1 dan prod2.
Di Cloud Shell, jalankan perintah berikut untuk memicu promosi rilis dari cluster staging ke prod1:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod1 --quiet
Rilis ke cluster produksi memerlukan persetujuan sehingga peluncuran menunggu hingga Anda menyetujuinya. Untuk melihatnya:
Buka halaman pipeline Cloud Deploy
Klik pipeline
sample
. Peluncuran ke prod1 memerlukan persetujuan dan peran clouddeploy.approver diperlukan untuk menyetujui peluncuran. Karena Anda adalah pemilik project, Anda memiliki akses untuk menyetujui rilis.Menyetujui rilis ke prod1:
Jalankan perintah berikut untuk mengambil nama peluncuran yang menunggu persetujuan dan menyimpannya dalam variabel lingkungan:
export ROLLOUT=$(gcloud deploy targets describe prod1 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
Menyetujui rilis:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Setelah persetujuan diberikan, rilis prod1 dimulai. Pantau progres di halaman pipeline Cloud Deploy.
Setelah deployment prod1 selesai, mulai rilis prod2.
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod2 --quiet
Rilis ke prod2 juga memerlukan persetujuan. Menyetujui rilis ke cluster prod2:
Jalankan perintah berikut untuk mengambil nama peluncuran yang menunggu persetujuan dan menyimpannya dalam variabel lingkungan:
export ROLLOUT=$(gcloud deploy targets describe prod2 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
Menyetujui rilis:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Setelah persetujuan diberikan, rilis prod2 akan dimulai. Pantau progres di halaman pipeline Cloud Deploy.
Verifikasi bahwa deployment di cluster produksi berhasil setelah pipeline Cloud Deploy di prod1 dan prod2 selesai.
Ada Multi Cluster Ingress yang dibuat di cluster produksi dan Anda menggunakan load balancer untuk mengakses aplikasi produksi. Konfigurasi Multi Cluster Ingress ini dibuat menggunakan file YAML k8s/prod/mci.yaml dan k8s/prod/mcs.yaml di repositori
sample
. Saat Anda mengirim permintaan ke alamat IP load balancer, Multi Cluster Ingress meneruskan permintaan ke salah satu dari dua instance aplikasi yang berjalan di dua cluster GKE yang berbeda.Buat daftar aturan penerusan yang terkait dengan load balancer untuk menemukan alamat IP.
gcloud compute forwarding-rules list
Outputnya akan terlihat seperti berikut:
NAME: mci-qqxs9x-fw-sample-sample-ingress REGION: IP_ADDRESS: 34.36.123.118 IP_PROTOCOL: TCP TARGET: mci-qqxs9x-sample-sample-ingress
Buka browser web dan masukkan berikut di URL:
http://IP_ADDRESS:80
Ganti
IP_ADDRESS
dengan alamat IP load balancer.Outputnya adalah sebagai berikut:
My new feature!
Hal ini mengonfirmasi bahwa aplikasi di-deploy seperti yang diharapkan di cluster produksi.
Menguji ketahanan aplikasi
Di bagian ini, Anda akan menguji ketahanan aplikasi yang berjalan dalam produksi dengan memulai ulang salah satu node dari dua cluster GKE produksi tanpa memengaruhi aplikasi.
Aplikasi dalam produksi menggunakan multi-cluster ingress dan dapat diakses melalui IP load balancer. Saat aplikasi diakses melalui IP tersebut, multi-cluster ingress akan merutekannya ke salah satu dari dua instance aplikasi yang berjalan di dua cluster GKE yang berbeda. Jika salah satu cluster GKE tidak responsif dan instance aplikasi yang berjalan di cluster tersebut tidak dapat dijangkau, multi-cluster ingress akan terus mengirim traffic ke instance aplikasi yang responsif yang berjalan di cluster GKE lainnya. Hal ini membuat gangguan cluster tidak terlihat oleh pengguna akhir dan aplikasi terus melayani permintaan.
Untuk menguji ketahanan:
Temukan node pool cluster GKE produksi yang berjalan di us-west1.
gcloud container clusters describe gke-prod-us-west1 --zone=us-west1-a --format=json | jq ".nodePools[0].instanceGroupUrls[]" | tr '"' ' ' | awk -F '/' '{for(i=NF-2; i<=NF; i=i+2) printf ("%s ",$i); print ""}'
Outputnya akan terlihat seperti berikut:
us-west1-b gke-gke-prod-us-west1-node-pool-01-6ad4e1ed-grp us-west1-c gke-gke-prod-us-west1-node-pool-01-98407373-grp
Output memiliki dua kolom, kolom pertama adalah zona dan kolom kedua adalah nama grup instance yang terkait dengan node pool cluster GKE produksi di region us-west1.
Mulai ulang grup instance yang sesuai dengan node pool:
gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_1 --zone=ZONE_1 --max-unavailable=100% gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_2 --zone=ZONE_2 --max-unavailable=100%
Ganti
INSTANCE_GROUP_1
dengan nama grup instance pertama.Ganti
ZONE_1
dengan zona grup instance pertama.Ganti
INSTANCE_GROUP_2
dengan nama grup instance kedua.Ganti
ZONE_2
dengan zona grup instance kedua.Periksa status grup instance.
Dua grup instance sedang di-reboot, sementara grup lainnya memiliki tanda centang hijau.
Buka browser web dan masukkan berikut di URL:
http://IP_ADDRESS:80
Ganti
IP_ADDRESS
dengan alamat IP load balancer.Meskipun salah satu dari dua cluster GKE tidak berfungsi, aplikasi tetap tersedia dan outputnya adalah sebagai berikut:
My new feature!
Hal ini menunjukkan bahwa aplikasi Anda tangguh dan sangat tersedia.
Mengelola aplikasi
Saat membuat aplikasi ini dari factory aplikasi, Anda akan mendapatkan repositori git, infrastruktur, dan pipeline CI/CD terpisah untuk aplikasi tersebut. Anda menggunakan resource ini untuk men-deploy aplikasi dan menambahkan fitur baru. Untuk mengelola aplikasi lebih lanjut, Anda hanya perlu berinteraksi dengan repositori git dan pipeline ini tanpa perlu mengupdate factory aplikasi. Anda dapat menyesuaikan pipeline aplikasi dan repositori git berdasarkan kebutuhan Anda. Sebagai pemilik aplikasi, Anda dapat menentukan siapa yang mendapatkan akses ke pipeline dan repositori git aplikasi Anda untuk mengelolanya.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini.
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
- Pelajari praktik terbaik untuk menyiapkan federasi identitas.
- Baca Kubernetes dan tantangan deployment software berkelanjutan.
- Pelajari pola pemantauan dan logging hybrid dan multi-cloud.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.