CI/CD modern dengan GKE: Menerapkan alur kerja developer

Last reviewed 2023-09-11 UTC

Tutorial ini menunjukkan cara mengaktivasi 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, 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). Pengalaman dengan alat dan proses deployment otomatis berguna untuk memahami konsep dalam dokumen ini.

Arsitektur

Dalam tutorial ini, Anda telah melakukan aktivasi aplikasi baru. Kemudian, Anda akan mengembangkan fitur baru dan men-deploy aplikasi di lingkungan pengembangan, staging, dan produksi. Arsitektur referensi berisi infrastruktur dan alat yang diperlukan untuk mengaktivasi dan merilis aplikasi baru dengan alur kerja yang ditunjukkan dalam diagram berikut:

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

Mulai 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, tindakan ini 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 pengembangan menggunakan skaffold dan men-deploy-nya di cluster GKE dev.

  5. Rilis CD kemudian dipromosikan dari pengembangan 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 production, 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

  • Melakukan aktivasi aplikasi baru.

  • Deploy aplikasi di lingkungan pengembangan.

  • Kembangkan fitur baru dan deploy di lingkungan pengembangan.

  • Promosikan fitur baru ke staging, lalu rilis ke produksi.

  • Menguji ketahanan aplikasi.

Biaya

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

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

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

Sebelum memulai

Menyiapkan lingkungan Anda

  1. Jika Anda melanjutkan langsung dari CI/CD Modern dengan GKE: Membangun sistem CI/CD, lanjutkan ke 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 aktivasi 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 mengaktivasi aplikasi baru dari repositori awal. Orientasi aplikasi terdiri dari langkah-langkah berikut:

  1. Membuat definisi aplikasi: Anda membuat definisi aplikasi di 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:

    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 pengembangan saat melakukan orientasi aplikasi baru. Hal ini dilakukan untuk membatalkan pemblokiran developer sehingga mereka dapat menggunakan lingkungan pengembangan dan mulai melakukan iterasi. Zona landing di cluster staging dan produksi dibuat dengan pendekatan GitOps. Pendekatan ini ditunjukkan nanti dalam dokumen ini ketika Anda siap mempromosikan rilis di klaster 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 dalam 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 dari 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 PRATINJAU URL untuk menampilkan URL yang diperlukan untuk memanggil webhook.

  4. Di Cloud Shell, panggil pemicu dengan membuat permintaan curl pada URL yang diperoleh dari langkah sebelumnya dan meneruskan parameter sebagai payload ke pemicu tersebut.

    curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'
    

    Pada contoh kode sebelumnya:

    • Ganti WEBHOOK_URL dengan URL yang diperoleh dari pemicu.

    • "app": "sample" menentukan nama aplikasi.

    • "runtime": "python" memberi tahu factory aplikasi agar menggunakan template Python untuk 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 Cloud Build History.

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

  6. Tinjau file definisi aplikasi:

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

    2. Klik ikon foto dan klik Your organizations. Pilih organisasi Anda.

    3. Klik repositori application-factory-repo, buka folder apps/python dan buka file baru bernama sample.tf yang dibuat oleh pemicu create-app. Periksa file ini. File ini berisi kode Terraform untuk membuat aplikasi baru.

Membuat infrastruktur aplikasi:

Setelah membuat definisi aplikasi, jalankan tf-apply pemicu untuk membuat infrastruktur aplikasi.

  1. Di Konsol Google Cloud:

    Buka halaman Cloud Build .

    Klik pemicu tf-apply.

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

  3. Panggil pemicu:

    curl "WEBHOOK_URL" -d '{}'
    

    Pada contoh kode sebelumnya:

    • Ganti WEBHOOK_URL dengan URL yang diperoleh dari pemicu.
  4. Periksa pipeline untuk pemicu tf-apply:

    Buka halaman Cloud Build History.

    Ada pipeline baru untuk pemicu tf-apply. Tunggu hingga selesai.

Pemicu ini membuat infrastruktur aplikasi.

Tinjau infrastruktur aplikasi:

Meninjau berbagai komponen infrastruktur aplikasi.

Zona pendaratan

  1. Buka Cloud Shell dan tetapkan project.

    gcloud config set core/project PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

  2. Mendapatkan kredensial ke cluster GKE pengembangan.

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  3. Periksa namespace aplikasi. Namespace ini dinamai menurut aplikasi, sampel.

    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
    

    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 dan login ke akun Anda. Klik ikon gambar. Lalu, klik Your organizations. Pilih organisasi Anda, lalu klik repositori sample-infra.

Repositori ini memiliki empat cabang: cicd-trigger, dev, staging, dan prod. Kode ini juga berisi empat folder cicd-trigger, dev, staging, dan prod. Cabang default-nya adalah cicd-trigger dan Anda dapat mengirim kode ke folder tersebut selagi cabang lain memiliki aturan perlindungan, sehingga Anda tidak dapat mengirim kode langsung ke cabang tersebut. Untuk mengirim kode ke cabang tersebut, Anda perlu membuat permintaan pull. Folder cicd-trigger memiliki kode untuk membuat resource CI/CD bagi aplikasi, sementara folder dev, staging, dan prod memiliki kode untuk membuat infrastruktur bagi berbagai lingkungan aplikasi.

Pemicu infrastruktur

  • Di Konsol Google Cloud:

    Buka halaman Cloud Build

    Ada pemicu baru bernama deploy-infra-sample.

  • Pemicu ini terhubung ke repositori sample-infra sehingga saat pengiriman kode terjadi pada repositori ini, pemicu akan dipanggil dan mengidentifikasi cabang tempat push terjadi, lalu menuju ke folder yang sesuai di cabang tersebut dan menjalankan Terraform di sana. Misalnya, jika kode dikirim ke cabang cicd-trigger, pemicu akan menjalankan Terraform di folder cicd-trigger dari cabang cicd-trigger. Demikian pula, saat push terjadi di cabang dev, pemicu akan menjalankan Terraform di folder dev di cabang dev dan seterusnya.

Repositori aplikasi

  • Buka GitHub dan lihat repositori di organisasi Anda. Ada repositori baru dengan nama sample. Repositori ini menghosting kode sumber dan langkah-langkah untuk mem-build container di 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 Anda membuat kerangka aplikasi, jalankan deploy-infra-sample pemicu untuk membuat resource CI/CD-nya. Anda dapat memanggil pemicu secara manual menggunakan URL webhook-nya atau dengan membuat commit ke repositori git sample-infra.

  1. Untuk memanggil pemicu Cloud Build, tambahkan baris baru pada file di repositori. Kemudian, terapkan 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. 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.

      Pemicu cicd cabang default dicentang.

    3. Tambahkan baris baru ke file env/cicd-trigger/main.tf, commit perubahan, dan 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 diterapkan, pemicu Cloud Deploy deploy-infra-sample dimulai.

  2. Pantau status pemicu:

    Buka halaman histori Cloud Build untuk melihat pipeline dan tunggu hingga selesai.

Meninjau resource CICD aplikasi

Meninjau 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. Terhubung ke repositori kode aplikasi sample. Pemicu akan dipanggil saat push dibuat ke repositori aplikasi dan melakukan langkah-langkah build seperti yang ditetapkan dalam konfigurasi pemicu. Untuk melihat langkah-langkah yang dijalankan pemicu saat dipanggil, klik nama pemicu, lalu klik tombol BUKA EDITOR.

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

    Artifact Repository ini menyimpan artefak aplikasi.

  3. Buka halaman pipeline Cloud Deploy dan lihat pipeline dengan nama sample. Ini adalah pipeline continuous deployment yang men-deploy aplikasi di cluster GKE.

Men-deploy aplikasi di lingkungan pengembangan

Pemicu deploy-app-sample terhubung ke repositori aplikasi yang 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. Clone repositori git sample:

      Dalam Cloud Shell:

      git clone https://github.com/GITHUB_ORG/sample
      
      cd sample
      

      Ganti GITHUB_ORG dengan pengelolaan 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 diterapkan, pemicu Cloud Deploy deploy-app-sample dimulai.

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

    Buka halaman pipeline Cloud Deploy.

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

Memverifikasi bahwa aplikasi telah berhasil di-deploy :

  1. Mendapatkan kredensial ke cluster pengembangan.

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

    Pratinjau Web, lalu klik Pratinjau di port 8080: Perintah toolbar Cloud Shell.

    Output-nya 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 perlu men-deploy perubahan dengan cepat ke lingkungan pengembangan agar dapat menguji dan melakukan iterasi. Dalam tutorial ini, Anda akan menggunakan cara membuat perubahan pada repositori kode aplikasi dan men-deploy-nya ke lingkungan pengembangan.

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

  2. Update 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 dikirim 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 dev telah dimulai. Tunggu hingga selesai.

Memverifikasi 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. 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. Pada toolbar Cloud Shell, klik

    Web Preview, lalu klik Preview on port 8080:

    Perintah toolbar Cloud Shell.

    Output-nya adalah sebagai berikut:

    My new feature!
    
  4. Di Cloud Shell, tekan CTRL+C untuk mengakhiri penerusan port.

Mempromosikan perubahan Anda pada cluster staging dan produksi

Sebelum mempromosikan aplikasi ke lingkungan staging dan lingkungan production, Anda perlu membuat zona landing untuk aplikasi di cluster GKE untuk lingkungan tersebut. Saat Anda mengaktivasi aplikasi, zona landing untuk developer akan otomatis dibuat di cluster GKE dev dengan menambahkan kode ke acm-gke-infrastructure-repo di cabang dev.

Membuat zona landing dalam cluster GKE staging dan produksi

  1. Buat zona landing dalam cluster GKE staging: Anda perlu membuat permintaan pull dari pengembangan ke cabang staging di acm-gke-infrastructure-repo, lalu menggabungkannya.

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

    2. Biasanya, seseorang yang memiliki akses ke repositori meninjau perubahan, lalu menggabungkan PR untuk memastikan hanya perubahan yang diinginkan yang dipromosikan ke lingkungan staging. Agar seseorang 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 pada cabang staging dari repositori acm-gke-infrastructure-repo dengan cluster GKE staging yang menghasilkan pembuatan zona landing untuk aplikasi pada cluster GKE staging.

  2. Buat 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 Dasar, pilih prod dan di menu Bandingkan, 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 ada pada cabang produksi dari repositori acm-gke-infrastructure-repo dengan cluster GKE produksi yang menghasilkan pembuatan zona landing untuk aplikasi pada cluster GKE produksi.

Mempromosikan perubahan dari pengembangan hingga staging

Setelah Anda membuat zona landing untuk aplikasi dalam staging dan memproduksi cluster GKE, promosikan aplikasi dari lingkungan pengembangan hingga 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 bahwa deployment staging telah berhasil dilakukan:

    1. Dapatkan kredensial ke cluster staging:

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

      Web Preview, lalu klik Preview on port 8080:

      Perintah toolbar Cloud Shell.

      Output-nya adalah sebagai berikut:

      My new feature!
      
    4. Di Cloud Shell, tekan CTRL+C untuk mengakhiri penerusan port.

Mempromosikan perubahan dari staging ke produksi

Sekarang, promosikan rilis dari staging ke prod. Anda memiliki dua cluster produksi dan Cloud Deploy masing-masing memiliki target 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 menunggu sampai Anda menyetujuinya. Untuk melihatnya:

    Buka halaman pipeline Cloud Deploy

    Klik pipeline sample. Peluncuran ke prod1 memerlukan persetujuan dan peran clouddeploy.approvedr diperlukan untuk menyetujui peluncuran tersebut. 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 progresnya 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 dimulai. Pantau progresnya di halaman pipeline Cloud Deploy.

  8. Memverifikasi bahwa deployment di cluster produksi berhasil setelah pipeline Cloud Deploy dalam 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 berbeda.

    2. Buat daftar 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 ini:

      http://IP_ADDRESS:80
      

      Ganti IP_ADDRESS dengan alamat IP load balancer.

      Output-nya adalah sebagai berikut:

      My new feature!
      

      Hal ini memastikan bahwa aplikasi di-deploy seperti yang diharapkan dalam cluster produksi.

Menguji ketahanan aplikasi

Di bagian ini, Anda menguji ketahanan aplikasi yang sedang berjalan dalam lingkungan production 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 dijalankan tidak dapat dijangkau, multi-cluster ingress akan terus mengirimkan traffic ke instance aplikasi yang sehat yang berjalan di cluster GKE lain. Hal ini membuat penghentian cluster tidak terlihat oleh pengguna akhir dan aplikasi terus melayani permintaan.

Untuk menguji ketahanan:

  1. Temukan kumpulan node 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-nya memiliki dua kolom, kolom pertama adalah zona dan kolom kedua adalah nama grup instance yang terkait dengan kumpulan node cluster GKE produksi di region us-west1.

  3. Mulai ulang grup instance yang sesuai dengan kumpulan node:

     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 Grup instance

    Dua grup instance sedang dimulai ulang, sementara grup lainnya memiliki tanda centang hijau terhadap grup instance tersebut.

    Status grup instance.

  5. Buka browser web dan masukkan URL berikut ini:

    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 output-nya 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 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 tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:

Menghapus project

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

    Buka Manage resource

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

Langkah selanjutnya