CI/CD modern dengan GKE: Menerapkan alur kerja developer

Last reviewed 2023-09-11 UTC

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:

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:

Loop pengembangan mencakup repositori kode, pipeline cloudbuild, dan cloud deploy.

Dimulai dari repositori kode untuk CI, alur kerja mencakup langkah-langkah berikut:

  1. Anda membagikan kode sumber aplikasi melalui repositori aplikasi.

  2. 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.

  3. Proses CI juga membuat rilis CD untuk aplikasi di Cloud Deploy.

  4. Rilis CD menghasilkan manifes Kubernetes yang dirender sepenuhnya untuk developer menggunakan skaffold dan men-deploynya di cluster GKE developer.

  5. Rilis CD kemudian dipromosikan dari dev ke target staging, yang menghasilkan manifes staging yang dirender sepenuhnya dan men-deploy-nya di cluster GKE staging.

  6. 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:

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

Menyiapkan lingkungan Anda

  1. 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:

  1. Membuat definisi aplikasi: Anda membuat definisi aplikasi dalam file Terraform dan menyimpannya di application-factory-repo yang berfungsi sebagai katalog aplikasi.

  2. Membuat infrastruktur aplikasi: Anda menjalankan Terraform pada file definisi aplikasi untuk membuat infrastruktur aplikasi. Infrastruktur aplikasi terdiri dari hal-hal berikut:

    1. 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.

    2. 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.

    3. Pemicu Cloud Build infrastruktur yang mengambil kode di repositori infrastruktur dan membuat resource berdasarkan definisinya.

    4. Repositori aplikasi dari repositori awal aplikasi yang menghosting kode sumber aplikasi.

  3. 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.

  1. Di konsol Google Cloud, buka halaman Cloud Build:

    Buka halaman Cloud Build

  2. Klik Pemicu create-app.

  3. Klik TAMPILKAN PRATUJUAN URL untuk menampilkan URL yang diperlukan untuk memanggil webhook.

  4. 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.

  5. Periksa pipeline untuk pemicu create-app:

    Buka halaman Histori Cloud Build.

    Ada pipeline baru untuk pemicu create-app. Setelah selesai, definisi aplikasi akan dibuat di application-factory-repo.

  6. Tinjau file definisi aplikasi:

    1. Di browser web, buka GitHub, lalu login ke akun Anda.

    2. Klik ikon gambar, lalu klik Your organizations. Pilih organisasi Anda.

    3. Klik repositori application-factory-repo, buka folder apps/python, lalu buka file baru bernama sample.tf yang dibuat oleh pemicu create-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.

  1. Di konsol Google Cloud:

    Buka halaman Cloud Build .

    Klik pemicu tf-apply.

  2. Klik "TAMPILKAN PREVIEW URL" untuk menampilkan URL yang diperlukan untuk memanggil webhook.

  3. Panggil pemicu:

    curl "WEBHOOK_URL" -d '{}'

    Dalam contoh kode sebelumnya:

    • Ganti WEBHOOK_URL dengan URL yang diperoleh dari pemicu.
  4. 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

  1. Buka Cloud Shell dan tetapkan project.

    gcloud config set core/project PROJECT_ID

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

  2. Dapatkan kredensial ke cluster GKE pengembangan.

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  3. 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
    

  4. 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:

    Buka halaman Cloud Build

    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 cabang cicd-trigger, pemicu akan menjalankan Terraform di folder cicd-trigger dari cabang cicd-trigger. Demikian pula, saat push terjadi ke cabang dev, 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 konfigurasi Dockerfile, kustomize yang menjelaskan konfigurasi aplikasi yang diperlukan, dan skaffold.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.

  1. Untuk memanggil pemicu Cloud Build, tambahkan baris baru dalam file di repositori. Kemudian, kirim perubahan:

    1. 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 Anda
      • GITHUB_USERNAME: nama pengguna yang terkait dengan akun GitHub Anda
    2. 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.

    3. Tambahkan baris baru ke file env/cicd-trigger/main.tf, commit perubahan, lalu push.

        echo "" >> env/cicd-trigger/main.tf
      
    4. 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.

  2. 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.

  1. 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.

  2. Buka halaman Artifact Registry dan lihat repositori baru dengan nama sample.

    Repositori Artefak ini menyimpan artefak aplikasi.

  3. 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.

  1. Tambahkan baris baru dalam file di repositori sample dan kirim perubahan untuk memanggil pemicu Cloud Build:

    1. 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.

    2. Tambahkan baris baru ke file skaffold.yaml.

        echo "" >> skaffold.yaml
      
    3. Commit dan kirim perubahan:

      git add .
      git commit -m "A dummy commit to invoke CI/CD trigger"
      git push
      
    4. Segera setelah perubahan di-push, pemicu Cloud Deploy deploy-app-sample akan dimulai.

  2. 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.

  3. 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 :

  1. Dapatkan kredensial ke cluster pengembangan.

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  2. 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
    
  3. Di toolbar Cloud Shell, klik

    Web Preview, lalu klik Preview on port 8080: Perintah toolbar Cloud Shell.

    Outputnya adalah sebagai berikut:

    Hello World!
    
  4. 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.

  1. Di Cloud Shell, ubah direktori ke repositori sample yang telah di-clone:

  2. Perbarui aplikasi untuk menampilkan pesan yang berbeda:

      sed -i "s/Hello World/My new feature/g" main.py
    
  3. 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.

  4. Pantau status pemicu di halaman histori Cloud Build dan tunggu hingga selesai.

  5. 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 :

  1. Dapatkan kredensial ke cluster pengembangan jika Anda membuka Cloud Shell baru:

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  2. 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
    
  3. Di toolbar Cloud Shell, klik

    Web Preview, lalu klik Preview on port 8080:

    Perintah toolbar Cloud Shell.

    Outputnya adalah sebagai berikut:

    My new feature!
    
  4. 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

  1. Membuat zona landing di cluster GKE staging: Anda perlu membuat permintaan pull dari cabang dev ke staging di acm-gke-infrastructure-repo dan menggabungkannya.

    1. Buka GitHub dan buka repositori acm-gke-infrastructure-repo. Klik Pull requests, lalu tombol New pull request. Di menu Base, pilih staging dan di menu Compare, pilih dev. Klik tombol Create pull request.

    2. 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.

  2. Membuat zona landing di cluster GKE produksi: Anda perlu membuat permintaan pull dari staging ke cabang produksi dan menggabungkannya.

    1. Klik Pull requests, lalu tombol New pull request. Di menu Base, pilih prod dan di menu Compare, pilih staging. Klik tombol Create pull request.

    2. 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.

  1. 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
      

  2. 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
     

  3. Periksa deployment staging:

    Buka halaman pipeline Cloud Deploy

    Klik pipeline sample, deployment ke cluster GKE staging telah dimulai. Tunggu hingga selesai.

  4. Pastikan deployment staging telah berhasil:

    1. Dapatkan kredensial ke cluster staging:

      gcloud container clusters get-credentials gke-staging-us-central1 --zone us-central1-a
      
    2. 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
      
    3. Di toolbar Cloud Shell, klik

      Web Preview, lalu klik Preview on port 8080:

      Perintah toolbar Cloud Shell.

      Outputnya adalah sebagai berikut:

      My new feature!
      
    4. 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.

  1. 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
     

  2. 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.

  3. 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
     

  4. Setelah persetujuan diberikan, rilis prod1 dimulai. Pantau progres di halaman pipeline Cloud Deploy.

  5. Setelah deployment prod1 selesai, mulai rilis prod2.

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=prod2 --quiet
     

  6. 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
     

  7. Setelah persetujuan diberikan, rilis prod2 akan dimulai. Pantau progres di halaman pipeline Cloud Deploy.

  8. Verifikasi bahwa deployment di cluster produksi berhasil setelah pipeline Cloud Deploy di prod1 dan prod2 selesai.

    1. 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.

    2. Cantumkan aturan penerusan yang terkait dengan load balancer untuk menemukan alamat IP.

      gcloud compute forwarding-rules list
    3. 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
      

    4. 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:

  1. 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  ""}'

  2. 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.

  3. 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.

  4. Periksa status grup instance.

    Buka halaman Instance groups

    Dua grup instance sedang dimulai ulang, sedangkan grup lainnya memiliki tanda centang hijau.

    Status grup instance.

  5. 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah selanjutnya