Tutorial: Mengimplementasikan CI/CD dengan GitOps menggunakan Azure Arc yang diaktifkan kluster Kube
Penting
Tutorial ini menggunakan GitOps dengan Flux v1. GitOps dengan Flux v2 sekarang tersedia untuk kluster Kubernetes dan Azure Kubernetes Service (AKS) dengan dukungan Azure Arc; buka tutorial yang menggunakan GitOps dengan Flux v2. Sebaiknya migrasi ke Flux v2 sesegera mungkin.
Dukungan untuk sumber daya konfigurasi kluster berbasis Flux v1 yang dibuat sebelum 1 Januari 2024 akan berakhir pada 24 Mei 2025. Mulai 1 Januari 2024, Anda tidak akan dapat membuat sumber daya konfigurasi kluster berbasis Flux v1 baru.
Pada tutorial ini, Anda menyiapkan solusi CI/CD menggunakan GitOps dengan kluster Kube yang didukung Azure Arc. Dengan menggunakan contoh aplikasi Azure Vote, Anda akan:
- Membuat kluster Kube yang didukung Azure Arc.
- Hubungkan aplikasi Anda dan repositori GitOps ke Repositori Azure.
- Impor alur CI/CD.
- Hubungkan Azure Container Registry (ACR) Anda ke Azure DevOps dan Kube.
- Buat grup variabel lingkungan.
- Menyebarkan lingkungan
dev
danstage
. - Uji lingkungan aplikasi.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Azure Cloud Shell
Azure meng-hosting Azure Cloud Shell, lingkungan shell interaktif yang dapat Anda gunakan melalui browser. Anda dapat menggunakan Bash atau PowerShell dengan Cloud Shell untuk bekerja dengan layanan Azure. Anda dapat menggunakan perintah Cloud Shell yang telah diinstal sebelumnya untuk menjalankan kode dalam artikel ini tanpa harus menginstal apa-apa di lingkungan lokal Anda.
Untuk memulai Azure Cloud Shell:
Opsi | Contoh/Tautan |
---|---|
Pilih Coba di pojok kanan atas blok kode atau perintah. Memilih Coba tidak otomatis menyalin kode atau perintah ke Cloud Shell. | |
Buka https://shell.azure.com, atau pilih tombol Luncurkan Cloud Shell untuk membuka Cloud Shell di browser Anda. | |
Pilih tombol Cloud Shell pada bilah menu di kanan atas di portal Microsoft Azure. |
Untuk menggunakan Azure Cloud Shell:
Mulai Cloud Shell.
Pilih tombol Salin pada blok kode (atau blok perintah) untuk menyalin kode atau perintah.
Tempel kode atau perintah ke dalam sesi Cloud Shell dengan memilih Ctrl+Shift+V di Windows dan Linux, atau dengan memilih Cmd+Shift+V di macOS.
Pilih Masukkan untuk menjalankan kode atau perintah.
Sebelum Anda mulai
Tutorial ini mengasumsikan pemahaman terhadap Azure DevOps, Repositori dan Alur Azure, dan Azure CLI.
Masuk ke Layanan Azure DevOps.
Lengkapi tutorial sebelumnya untuk mempelajari cara menyebarkan GitOps untuk lingkungan CI/CD Anda.
Pahami manfaat dan arsitektur fitur ini.
Verifikasi bahwa Anda memiliki:
- Kluster Kube yang didukung Azure Arc yang terhubung bernama arc-cicd-cluster.
- Azure Container Registry (ACR) yang terhubung dengan integrasi AKS atau autentikasi kluster non-AKS.
- Izin "Build Admin" and "Project Admin" untuk Repositori Azure dan Alur Azure.
Instal ekstensi versi >CLI Kubernetes dengan dukungan Azure Arc berikut = 1.0.0:
az extension add --name connectedk8s az extension add --name k8s-configuration
Untuk memperbarui ekstensi ini menjadi versi terbaru, jalankan perintah berikut:
az extension update --name connectedk8s az extension update --name k8s-configuration
Mengimpor aplikasi dan repositori GitOps ke dalam Repositori Azure
Import repositori aplikasi dan repositori GitOps ke dalam Repositori Azure. Untuk tutorial ini, gunakan contoh repositori berikut:
- repositori aplikasi arc-cicd-demo-src
- URL: https://github.com/Azure/arc-cicd-demo-src
- Berisi contoh Aplikasi Azure Vote yang akan Anda sebarkan menggunakan GitOps.
- repositori GitOps arc-cicd-demo-gitops
- URL: https://github.com/Azure/arc-cicd-demo-gitops
- Berfungsi sebagai basis untuk sumber daya kluster Anda yang menampung Aplikasi Azure Vote.
Pelajari selengkapnya tentang mengimpor repositori Git.
Catatan
Mengimpor dan menggunakan dua repositori terpisah untuk aplikasi dan repositori GitOps bisa meningkatkan keamanan dan kesederhanaan. Aplikasi serta izin dan visibilitas repositori GitOps bisa disetel secara individual. Misalnya, administrator klusterster mungkin tidak menemukan perubahan kode aplikasi yang relevan dengan status kluster yang diinginkan. Sebaliknya, pengembang aplikasi tidak perlu mengetahui parameter spesifik untuk setiap lingkungan - serangkaian nilai pengujian yang memberikan cakupan untuk parameter mungkin sudah cukup.
Menyambungkan repositori GitOps
Untuk terus menyebarkan aplikasi Anda, hubungkan repositori aplikasi ke kluster menggunakan GitOps. Repositori GitOps arc-cicd-demo-gitops berisi sumber daya dasar agar aplikasi Anda berjalan di kluster arc-cicd-cluster.
Repositori GitOps awal hanya berisi manifes yang membuat namespace dev dan stage yang sesuai dengan lingkungan penyebaran.
Koneksi GitOps yang Anda buat akan secara otomatis:
- Sinkronkan manifes dalam direktori manifes.
- Perbarui status kluster.
Alur kerja CI/CD akan mengisi direktori manifes dengan manifes tambahan untuk menyebarkan aplikasi.
Buat koneksi GitOps baru repositori arc-cicd-demo-gitops Anda yang baru diimpor dalam Repositori Azure.
az k8s-configuration create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --operator-instance-name cluster-config \ --operator-namespace cluster-config \ --repository-url https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --operator-params='--git-readonly --git-path=arc-cicd-cluster/manifests'
Pastikan bahwa Flux hanya menggunakan
arc-cicd-cluster/manifests
direktori sebagai jalur dasar. Tentukan jalur menggunakan parameter operator berikut:--git-path=arc-cicd-cluster/manifests
Catatan
Jika Anda menggunakan string koneksi HTTPS dan mengalami masalah koneksi, pastikan Anda menghilangkan awalan nama pengguna di URL. Misalnya,
https://alice@dev.azure.com/contoso/project/_git/arc-cicd-demo-gitops
harusalice@
dihapus.--https-user
menentukan pengguna sebagai gantinya, misalnya--https-user alice
.Periksa status penyebaran di portal Microsoft Azure.
- Jika berhasil, Anda akan melihat keduanya, namespace
dev
danstage
yang dibuat di kluster Anda.
- Jika berhasil, Anda akan melihat keduanya, namespace
Mengimpor alur CI/CD
Sekarang, setelah menyinkronkan koneksi GitOps, Anda harus mengimpor alur CI/CD yang membuat manifes.
Repositori aplikasi berisi folder .pipeline
dengan alur yang akan Anda gunakan untuk PR, CI, dan CD. Impor dan ganti nama tiga alur yang disediakan dalam repositori sampel:
Nama file alur | Deskripsi |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
Alur PR aplikasi, bernama arc-cicd-demo-src PR |
.pipelines/az-vote-ci-pipeline.yaml |
Alur CI aplikasi, bernama arc-cicd-demo-src CI |
.pipelines/az-vote-cd-pipeline.yaml |
Alur CD aplikasi, bernama arc-cicd-demo-src CD |
Hubungkan ACR Anda
Alur dan kluster Anda akan menggunakan ACR untuk menyimpan dan mengambil citra Docker.
Hubungkan ACR ke Azure DevOps
Selama proses CI, Anda akan menyebarkan kontainer aplikasi ke registri. Mulai dengan membuat koneksi layanan Azure:
- Di Azure DevOps, buka halaman Koneksi Layanan dari halaman pengaturan proyek. Di TFS, buka Layanan dari ikon pengaturan pada bilah menu bawah.
- Pilih + Koneksi layanan baru dan pilih jenis koneksi layanan yang Anda butuhkan.
- Isi parameter untuk koneksi layanan. Untuk tutorial ini:
- Beri nama koneksi layanan arc-demo-acr.
- Pilih myResourceGroup sebagai grup sumber daya.
- Pilih Memberikan izin akses ke semua alur.
- Opsi ini mengotorisasi file alur YAML untuk koneksi layanan.
- Pilih OK untuk membuat koneksi.
Hubungkan ACR ke Kube
Aktifkan kluster Kube untuk menarik citra dari ACR. Jika bersifat pribadi, autentikasi akan diperlukan.
Hubungkan ACR ke kluster AKS yang ada
Integrasikan ACR yang ada dengan kluster AKS yang ada menggunakan perintah berikut:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Membuat rahasia penarikan citra
Untuk menghubungkan non-AKS dan kluster lokal ke ACR Anda, buat rahasia penarikan citra. Kube menggunakan rahasia penarikan citra untuk menyimpan informasi yang diperlukan untuk mengautentikasi registri Anda.
Buat rahasia penarikan citra dengan perintah kubectl
berikut. Ulangi untuk namespace dev
dan stage
.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
Untuk menghindari harus mengatur imagePullSecret untuk setiap Pod, pertimbangkan untuk menambahkan imagePullSecret ke akun Layanan di namespacedev
dan stage
. Lihat tutorial Kube untuk informasi selengkapnya.
Buat grup variabel lingkungan
Grup variabel repositori aplikasi
Buat grup variabel bernama az-vote-app-dev. Tetapkan nilai berikut:
Variabel | Nilai |
---|---|
AZ_ACR_NAME | (instans ACR Anda, misalnya. azurearctest.azurecr.io) |
AZURE_SUBSCRIPTION | (Koneksi Layanan Azure Anda, harus berupa arc-demo-acr dari sebelumnya dalam tutorial) |
AZURE_VOTE_IMAGE_REPO | Jalur lengkap ke repositori Aplikasi Azure Vote, misalnya azurearctest.azurecr.io/azvote |
ENVIRONMENT_NAME | Dev |
MANIFESTS_BRANCH | master |
MANIFESTS_FOLDER | azure-vote-manifests |
MANIFESTS_REPO | arc-cicd-demo-gitops |
ORGANIZATION_NAME | Nama organisasi Azure DevOps |
PROJECT_NAME | Nama proyek GitOps dalam Azure DevOps |
REPO_URL | URL lengkap untuk repositori GitOps |
SRC_FOLDER | azure-vote |
TARGET_CLUSTER | arc-cicd-cluster |
TARGET_NAMESPACE | dev |
Grup variabel lingkungan tahapan
- Lakukan kloning grup variabel az-vote-app-dev.
- Ubah nama menjadi az-vote-app-stage.
- Pastikan nilai berikut untuk variabel yang sesuai:
Variabel | Nilai |
---|---|
ENVIRONMENT_NAME | Tahap |
TARGET_NAMESPACE | stage |
Sekarang Anda siap untuk menyebarkan ke lingkungan dev
dan stage
.
Memberikan Lebih Banyak Izin kepada Layanan Build
Alur CD menggunakan token keamanan build yang berjalan untuk mengautentikasi ke repositori GitOps. Diperlukan lebih banyak izin untuk alur guna membuat cabang baru, mendorong perubahan, dan membuat permintaan penarikan.
- Buka
Project settings
dari halaman utama proyek Azure DevOps. - Pilih
Repositories
. - Pilih
<GitOps Repo Name>
. - Pilih
Security
. - Untuk
<Project Name> Build Service (<Organization Name>)
, izinkanContribute
,Contribute to pull requests
, danCreate branch
.
Untuk informasi selengkapnya, lihat:
Menyebarkan lingkungan dev untuk pertama kalinya
Dengan alur CI dan CD yang sudah dibuat, jalankan alur CI untuk menyebarkan aplikasi untuk pertama kalinya.
Alur CI
Selama alur CI awal berjalan, Anda mungkin menemui kesalahan otorisasi sumber daya dalam membaca nama koneksi layanan.
- Verifikasi variabel yang sedang diakses AZURE_SUBSCRIPTION.
- Otorisasi penggunaan.
- Jalankan ulang alur.
Alur CI:
- Pastikan perubahan aplikasi melewati semua pemeriksaan kualitas otomatis untuk penyebaran.
- Apakah ada validasi tambahan yang tidak bisa diselesaikan dalam alur PR.
- Khusus untuk GitOps, alur juga menerbitkan artefak untuk penerapan yang akan digunakan oleh alur CD.
- Memverifikasi citra Docker telah berubah dan citra baru didorong.
Alur CD
Selama alur CD awal berjalan, Anda akan diminta untuk memberikan akses alur ke repositori GitOps. Pilih Tampilkan saat diminta bahwa alur memerlukan izin untuk mengakses sumber daya. Kemudian, pilih Izin untuk memberikan izin menggunakan repositori GitOps untuk menjalankan alur saat ini dan di masa mendatang.
Berhasil menjalankan alur CI memicu alur CD untuk menyelesaikan proses penyebaran. Anda akan menyebarkan ke setiap lingkungan secara bertahap.
Tip
Jika alur CD tidak memicu secara otomatis:
- Memverifikasi bahwa nama sesuai dengan pemicu cabang di
.pipelines/az-vote-cd-pipeline.yaml
- Properti tersebut seharusnya
arc-cicd-demo-src CI
.
- Properti tersebut seharusnya
- Jalankan ulang alur CI.
Setelah templat dan manifes berubah menjadi repositori GitOps sudah dibuat, alur CD akan membuat penerapan, mendorongnya, dan membuat PR untuk persetujuan.
Buka tautan PR yang diberikan dalam
Create PR
output tugas.Verifikasi perubahan pada repositori GitOps. Anda harus melihat:
- Perubahan templat Helm tingkat tinggi.
- Manifes Kube tingkat rendah yang menunjukkan perubahan yang mendasari status yang diharapkan. Fluks menyebarkan manifes ini.
Jika semuanya tampak bagus, setujui dan lengkapi PR.
Setelah beberapa menit, Flux mengambil perubahan dan memulai penyebaran.
Alihkan port secara lokal menggunakan
kubectl
dan pastikan aplikasi berfungsi dengan benar menggunakan:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Lihat aplikasi Azure Vote pada browser Anda di
http://localhost:8080/
.Berikan suara untuk favorit Anda dan bersiaplah untuk membuat beberapa perubahan pada aplikasi.
Menyiapkan persetujuan lingkungan
Setelah penyebaran aplikasi, Anda tidak hanya bisa membuat perubahan pada kode atau templat, tetapi Anda secara tidak sengaja juga bisa menempatkan kluster dalam status buruk.
Jika lingkungan dev menyatakan putus setelah penyebaran, jaga agar tidak meluas ke lingkungan selanjutnya menggunakan persetujuan lingkungan.
- Pada proyek Azure DevOps Anda, buka lingkungan yang perlu dilindungi.
- Nagivasi Persetujuan dan Pemeriksaan untuk sumber daya.
- Pilih Buat.
- Sediakan pemberi izin dan pesan opsional.
- Pilih Buat lagi untuk menyelesaikan pemeriksaan persetujuan manual tambahan.
Untuk informasi selengkapnya, lihat tutorial Menentukan persetujuan dan pemeriksaan.
Saat berikutnya alur CD berjalan, alur akan melakukan jeda setelah pembuatan PR GitOps. Verifikasi perubahan telah disinkronkan dengan benar dan melewati fungsionalitas dasar. Setujui pemeriksaan dari alur untuk memungkinkan perubahan mengalir ke lingkungan berikutnya.
Membuat perubahan aplikasi
Dengan set garis besar templat dan manifes yang merepresentasikan status pada kluster, Anda akan membuat perubahan kecil pada aplikasi.
Di dalam repositori arc-cicd-demo-src, edit file
azure-vote/src/azure-vote-front/config_file.cfg
.Karena "Cats vs Dogs" tidak mendapatkan cukup suara, ubah menjadi "Tabs vs Spaces" untuk meningkatkan penghitungan suara.
Terapkan perubahan di cabang baru, dorong, dan buat permintaan penarikan.
- Ini adalah alur pengembang khas yang akan memulai siklus hidup CI/CD.
Alur validasi PR
Alur PR adalah garis pertahanan pertama terhadap perubahan yang salah. Pemeriksaan kualitas kode aplikasi yang biasa mencakup linting dana analisis statis. Dari perspektif GitOps, Anda juga perlu memastikan kualitas yang sama untuk infrastruktur yang dihasilkan untuk disebarkan.
Bagan Dockerfile dan Helm aplikasi bisa menggunakan linting dengan cara yang sama pada aplikasi.
Kesalahan yang ditemukan selama rentang linting dari:
- Salah memformat file YAML, untuk
- Saran praktik terbaik, seperti mengatur batas CPU dan Memori untuk aplikasi Anda.
Catatan
Untuk mendapatkan cakupan terbaik dari linting Helm dalam aplikasi nyata, Anda harus mengganti nilai yang cukup mirip dengan yang digunakan dalam lingkungan nyata.
Kesalahan yang ditemukan selama eksekusi alur muncul di bagian hasil pengujian dari penjalanan. Setelahnya, Anda bisa:
- Melacak statistik yang berguna pada jenis kesalahan.
- Menemukan penerapan pertama yang terdeteksi.
- Menumpuk gaya pelacakan yang terhubung ke bagian kode yang menyebabkan kesalahan.
Setelah alur selesai berjalan, Anda telah memastikan kualitas kode aplikasi dan templat yang akan menyebarkannya. Anda sekarang bisa menyetujui dan menyelesaikan PR. CI akan berjalan lagi, meregenerasi templat dan manifes, sebelum memicu alur CD.
Tip
Dalam lingkungan nyata, jangan lupa tetapkan kebijakan cabang untuk memastikan PR lolos dalam pemeriksaan kualitas Anda. Untuk informasi selengkapnya, lihat artikel Set kebijakan cabang.
Persetujuan proses CD
Berhasil menjalankan alur CI memicu alur CD untuk menyelesaikan proses penyebaran. Sama halnya saat pertama kali Anda bisa menjalankan alur CD, Anda akan menyebarkan ke setiap lingkungan secara bertahap. Kali ini, alur mengharuskan Anda untuk menyetujui setiap lingkungan penyebaran.
- Setujui penyebaran ke lingkungan
dev
. - Setelah templat dan manifes berubah menjadi repositori GitOps sudah dibuat, alur CD akan membuat penerapan, mendorongnya, dan membuat PR untuk persetujuan.
- Buka tautan PR yang diberikan dalam tugas.
- Verifikasi perubahan pada repositori GitOps. Anda akan melihat:
- Perubahan templat Helm tingkat tinggi.
- Manifes Kube tingkat rendah yang menunjukkan perubahan yang mendasari status yang diharapkan.
- Jika semuanya tampak bagus, setujui dan lengkapi PR.
- Tunggu hingga penerapan selesai.
- Sebagai pengujian asap dasar, navigasi ke halaman aplikasi dan verifikasi aplikasi pemungutan suara kini menampilkan Tab vs Ruang.
- Alihkan port secara lokal menggunakan
kubectl
dan pastikan aplikasi berfungsi dengan benar menggunakan:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Lihat aplikasi Azure Vote di browser Anda di http://localhost:8080/ dan verifikasi pilihan pemungutan suara telah berubah menjadi Tab vs Ruang.
- Alihkan port secara lokal menggunakan
- Ulangi langkah 1-7 untuk lingkungan
stage
.
Penyebaran Anda sekarang sudah selesai. Ini mengakhiri alur kerja CI/CD.
Membersihkan sumber daya
Jika Anda akan berhenti menggunakan aplikasi ini, hapus sumber daya mana pun menggunakan langkah berikut:
Hapus koneksi konfigurasi Azure Arc GitOps:
az k8s-configuration delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --cluster-type connectedClusters
Hapus namespace
dev
:kubectl delete namespace dev
Hapus namespace
stage
:kubectl delete namespace stage
Langkah berikutnya
Dalam tutorial ini, Anda telah menyiapkan alur kerja CI/CD lengkap yang mengimplementasikan Azure DevOps dari pengembangan aplikasi melalui penyebaran. Perubahan pada aplikasi secara otomatis memicu validasi dan penyebaran, dibatasi oleh persetujuan manual.
Lanjutkan ke artikel konseptual kami untuk mempelajari lebih lanjut tentang GitOps dan konfigurasi dengan Kube yang didukung Azure Arc.