Tutorial ini menunjukkan cara melakukan aktivasi 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 distribusi 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 akan menggunakan alat seperti
Skaffold,
kustomize
,
Artifact Registry,
Config Sync,
Cloud Build, dan
Cloud Deploy untuk mengembangkan, mem-build, 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 berguna untuk memahami konsep dalam dokumen ini.
Arsitektur
Dalam tutorial ini, Anda akan melakukan aktivasi aplikasi baru. Kemudian, Anda mengembangkan fitur baru dan men-deploy aplikasi di lingkungan pengembangan, staging, dan produksi. Arsitektur referensi berisi infrastruktur dan alat yang diperlukan untuk melakukan aktivasi dan merilis aplikasi baru dengan alur kerja yang ditampilkan dalam diagram berikut:
Dimulai 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, kode tersebut akan otomatis memicu pipeline CI di Cloud Build. 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 developer menggunakan
skaffold
dan men-deploynya di cluster GKE developer.Rilis CD kemudian dipromosikan dari dev ke target staging, yang menghasilkan manifes staging yang dirender sepenuhnya dan men-deploy-nya di cluster GKE staging.
Kemudian, rilis CD dipromosikan dari staging ke produksi, yang menghasilkan manifes produksi yang dirender sepenuhnya dan men-deploynya di cluster GKE produksi.
Untuk informasi selengkapnya tentang alat dan infrastruktur yang digunakan dalam alur kerja ini, lihat CI/CD modern dengan GKE: Mem-build sistem CI/CD.
Tujuan
Melakukan aktivasi aplikasi baru.
Deploy aplikasi di lingkungan pengembangan.
Mengembangkan fitur baru dan men-deploynya di lingkungan pengembangan.
Promosikan fitur baru ke staging, lalu rilis ke produksi.
Uji ketahanan aplikasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang 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: Membuat 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 ID project Google Cloud Anda.
Melakukan orientasi 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 awal. Orientasi aplikasi terdiri dari langkah-langkah berikut:
Membuat definisi aplikasi: Anda membuat definisi aplikasi dalam file Terraform dan menyimpannya di
application-factory-repo
yang berfungsi sebagai katalog aplikasi.Membuat infrastruktur aplikasi: Anda menjalankan Terraform pada file definisi aplikasi untuk membuat infrastruktur aplikasi. Infrastruktur aplikasi terdiri dari hal-hal berikut:
Zona landing untuk aplikasi baru mencakup penentuan namespace, akun layanan, dan kebijakan dasar di repositori
acm-gke-infrastructure-repo
. Zona landing hanya dibuat di cluster GKE developer saat melakukan aktivasi aplikasi baru. Hal ini dilakukan untuk berhenti memblokir developer sehingga mereka dapat menggunakan lingkungan pengembangan dan mulai melakukan iterasi. Zona landing di cluster staging dan produksi dibuat dengan pendekatan GitOps. Pendekatan ini akan ditunjukkan nanti dalam dokumen ini saat Anda siap untuk mempromosikan rilis di cluster tersebut.Repositori Infrastruktur dari repositori awal 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 awal aplikasi yang menghosting kode sumber aplikasi.
Membuat resource CI/CD aplikasi: Anda menggunakan infrastruktur aplikasi untuk membuat resource CI/CD untuk aplikasi.
Membuat 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 PRATUJUAN 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 meneruskan parameter sebagai payload ke URL tersebut.
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 pipeline untuk pemicu
create-app
: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 konsol Google Cloud:
Klik pemicu
tf-apply
.Klik "TAMPILKAN PREVIEW 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 pipeline untuk pemicu
tf-apply
: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 ID project Google Cloud 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
Selain akun default, ada akun layanan. 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
. Folder ini juga berisi empat folder cicd-trigger, dev, staging, dan prod. Cabang default-nya adalah cicd-trigger
dan Anda dapat mendorong kode ke sana, sedangkan cabang lain memiliki aturan perlindungan sehingga Anda tidak dapat mendorong kode langsung ke cabang tersebut. Untuk mendorong kode ke cabang tersebut, Anda harus membuat permintaan pull. Folder cicd-trigger
memiliki kode untuk membuat resource CI/CD untuk aplikasi, sedangkan folder dev
, staging
, dan prod
memiliki kode untuk membuat infrastruktur untuk berbagai lingkungan aplikasi.
Pemicu infrastruktur
Di konsol Google Cloud:
Ada pemicu baru bernama
deploy-infra-sample
.Pemicu ini terhubung ke
sample-infra
repositori 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 di-push ke cabangcicd-trigger
, pemicu akan menjalankan Terraform di folder cicd-trigger dari cabang cicd-trigger. Demikian pula, saat push terjadi ke cabangdev
, pemicu akan menjalankan Terraform di folder dev dari cabang dev dan seterusnya.
Repositori aplikasi
- Buka GitHub dan tampilkan repositori di organisasi Anda. Ada repositori baru dengan nama
sample
. Repositori ini menghosting kode sumber dan langkah-langkah untuk mem-build container dalam konfigurasiDockerfile
,kustomize
yang menjelaskan konfigurasi aplikasi yang diperlukan, danskaffold.yaml
yang menentukan langkah-langkah deployment yang akan digunakan oleh Cloud Deploy untuk CD.
Membuat 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 telah di-check out.
Tambahkan baris baru ke file env/cicd-trigger/main.tf, commit perubahan, lalu push.
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 di-push, 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. Repositori 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.
Men-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 di-push, pemicu Cloud Deploy
deploy-app-sample
akan dimulai.
Pantau status pemicu:
Buka halaman histori Cloud Build untuk melihat pipeline dan tunggu hingga selesai.
Pemicu mengeksekusi langkah-langkah yang ditentukan dalam konfigurasinya. Langkah pertama adalah mem-build 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 developer:
Buka halaman pipeline Cloud Deploy.
Klik pipeline
sample
, deployment ke cluster GKE developer telah dimulai. Tunggu hingga selesai.
Pastikan bahwa aplikasi telah berhasil di-deploy :
Dapatkan kredensial ke cluster pengembangan.
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Membuat 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 harus men-deploy perubahan dengan cepat ke lingkungan pengembangan untuk menguji dan melakukan iterasi pada perubahan tersebut. Dalam tutorial ini, Anda akan membuat perubahan di repositori kode aplikasi dan men-deploynya ke lingkungan pengembangan.
Di Cloud Shell, ubah direktori ke repositori
sample
yang telah 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 di-push 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
Klik pipeline
sample
, deployment ke cluster GKE developer telah dimulai. Tunggu hingga selesai.
Pastikan 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
Membuat 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.
Mendorong perubahan Anda ke cluster staging dan produksi
Sebelum mempromosikan aplikasi ke lingkungan staging dan produksi, Anda harus membuat zona landing untuk aplikasi di cluster GKE untuk lingkungan tersebut. Saat Anda melakukan aktivasi aplikasi, zona landing untuk developer akan otomatis dibuat di cluster GKE developer dengan menambahkan kode ke acm-gke-infrastructure-repo
di cabang developer.
Membuat zona landing di cluster GKE staging dan produksi
Membuat zona landing di cluster GKE staging: Anda perlu membuat permintaan pull dari cabang dev ke staging di
acm-gke-infrastructure-repo
dan menggabungkannya.Buka GitHub dan buka 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 diinginkan yang dipromosikan ke lingkungan staging. Agar individu dapat mencoba arsitektur referensi, aturan perlindungan cabang telah dilonggarkan sehingga administrator repositori dapat mengabaikan peninjauan dan menggabungkan PR. Jika Anda adalah administrator di repositori, gabungkan permintaan pull. Jika tidak, minta administrator untuk menggabungkannya.
Config Sync menyinkronkan perubahan yang muncul di cabang staging repositori
acm-gke-infrastructure-repo
dengan cluster GKE staging yang menghasilkan pembuatan zona landing untuk aplikasi di cluster GKE staging.Membuat zona landing di cluster GKE produksi: Anda perlu membuat permintaan pull dari staging ke cabang produksi 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 permintaan pull. Jika tidak, minta administrator untuk menggabungkannya.
Config Sync menyinkronkan perubahan yang muncul di cabang produksi repositori
acm-gke-infrastructure-repo
dengan cluster GKE produksi yang menghasilkan pembuatan zona landing untuk aplikasi di cluster GKE produksi.
Mempromosikan perubahan dari pengembangan ke staging
Setelah membuat zona landing untuk aplikasi di cluster GKE staging dan produksi, promosikan aplikasi dari lingkungan pengembangan ke 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 ID project Google Cloud Anda.Pastikan variabel lingkungan telah ditetapkan:
echo $RELEASE
Di Cloud Shell, jalankan perintah berikut untuk memicu promosi rilis dari lingkungan pengembangan ke staging:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=staging --quiet
Periksa deployment staging:
Buka halaman pipeline Cloud Deploy
Klik pipeline
sample
, deployment ke cluster GKE staging telah dimulai. Tunggu hingga selesai.Pastikan deployment staging telah berhasil:
Dapatkan kredensial ke cluster staging:
gcloud container clusters get-credentials gke-staging-us-central1 --zone us-central1-a
Membuat 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.
Mendorong 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 masing-masing bernama prod1 dan prod2.
Di Cloud Shell, jalankan perintah berikut untuk memicu promosi rilis dari staging ke cluster 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 akan 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.Setujui 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}')
Setujui 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. Setujui 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}')
Setujui 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 akan meneruskan permintaan ke salah satu dari dua instance aplikasi yang berjalan di dua cluster GKE yang berbeda.Cantumkan 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 URL berikut:
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 dari dua node 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 dalamnya tidak dapat dijangkau, multi-cluster ingress akan terus mengirim traffic ke instance aplikasi yang responsif dan berjalan di cluster GKE lainnya. Hal ini membuat pemadaman 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 dimulai ulang, sedangkan grup lainnya memiliki tanda centang hijau.
Buka browser web dan masukkan URL berikut:
http://IP_ADDRESS:80
Ganti
IP_ADDRESS
dengan alamat IP load balancer.Meskipun salah satu dari dua cluster GKE tidak aktif, aplikasi akan 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 mendapatkan repositori git, infrastruktur, dan pipeline CI/CD terpisah untuk aplikasi. Anda telah 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 dan repositori git aplikasi berdasarkan persyaratan Anda. Sebagai pemilik aplikasi, Anda dapat menentukan siapa yang mendapatkan akses ke pipeline dan repo git aplikasi Anda untuk mengelolanya.
Pembersihan
Agar tidak menimbulkan tagihan ke 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 selanjutnya
- 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.