CI/CD untuk aplikasi AKS dengan GitHub Actions dan GitFlow

Azure Container Registry
Azure Kubernetes Service (AKS)
Azure Monitor
Azure Pipelines

GitOps adalah model operasi untuk aplikasi cloud-native yang menyimpan aplikasi dan kode infrastruktur deklaratif di Git untuk digunakan sebagai sumber kebenaran untuk pengiriman berkelanjutan otomatis. Dengan GitOps, Anda menjelaskan status yang diinginkan dari seluruh sistem Anda dalam repositori git, dan operator GitOps menyebarkannya ke lingkungan Anda, yang sering kali merupakan kluster Kubernetes. Untuk informasi selengkapnya tentang GitOps untuk Kubernetes di Azure, kunjungi Disiplin GitOps untuk Azure Kubernetes Service atau CI/CD dan GitOps dengan Kubernetes dengan dukungan Azure Arc.

Contoh skenario dalam artikel ini berlaku untuk bisnis yang ingin memodernisasi pengembangan aplikasi end-to-end dengan menggunakan kontainer, integrasi berkelanjutan (CI) untuk build, dan GitOps untuk penyebaran berkelanjutan (CD). Dalam skenario ini, aplikasi Flask digunakan sebagai contoh. Aplikasi web ini terdiri dari front-end yang ditulis menggunakan Python dan kerangka kerja Flask.

Arsitektur

Opsi berikut menjelajahi pendekatan CI/CD berbasis push dan pull.

Opsi 1: CI/CD berbasis push

Diagram of the push-based architecture with GitHub Actions.

Arsitektur berbasis push dengan GitHub Actions untuk CI dan CD.

Unduh file Visio arsitektur ini.

Aliran data

Skenario ini mencakup alur DevOps berbasis push untuk aplikasi web dua tingkat, dengan komponen web front-end dan back-end yang menggunakan Redis. Alur ini menggunakan GitHub Actions untuk build dan penyebaran. Data mengalir melalui skenario sebagai berikut:

  1. Kode aplikasi dikembangkan.
  2. Kode aplikasi berkomitmen untuk repositori git GitHub.
  3. GitHub Actions membangun gambar kontainer dari kode aplikasi dan mendorong gambar kontainer ke Azure Container Registry.
  4. Pekerjaan GitHub Actions menyebarkan, atau mendorong, aplikasi, seperti yang dijelaskan dalam file manifes, ke kluster Azure Kubernetes Service (AKS) menggunakan kubectl atau tindakan Sebarkan ke kluster Kubernetes.

Opsi 2: CI/CD berbasis pull (GitOps)

Diagram of the pull-based architecture with GitHub Actions and Argo CD.

Arsitektur berbasis pull dengan GitHub Actions untuk CI dan Argo CD untuk CD.

Unduh file Visio arsitektur ini.

Aliran data

Skenario ini mencakup alur DevOps berbasis tarik untuk aplikasi web dua tingkat, dengan komponen web front-end dan back-end yang menggunakan Redis. Alur ini menggunakan GitHub Actions untuk build. Untuk penyebaran, ia menggunakan ARGO CD sebagai operator GitOps untuk menarik/menyinkronkan aplikasi. Data mengalir melalui skenario sebagai berikut:

  1. Kode aplikasi dikembangkan.
  2. Kode aplikasi diterapkan ke repositori GitHub.
  3. GitHub Actions membangun gambar kontainer dari kode aplikasi dan mendorong gambar kontainer ke Azure Container Registry.
  4. GitHub Actions memperbarui file penyebaran manifes Kubernetes dengan versi gambar saat ini berdasarkan nomor versi gambar kontainer di Azure Container Registry.
  5. Argo CD disinkronkan dengan, atau menarik dari, repositori Git.
  6. Argo CD menyebarkan aplikasi ke kluster AKS.

Komponen

  • GitHub Actions adalah solusi otomatisasi yang dapat diintegrasikan dengan layanan Azure untuk integrasi berkelanjutan (CI). Dalam skenario ini, GitHub Actions mengatur pembuatan gambar kontainer baru berdasarkan penerapan ke kontrol sumber, mendorong gambar tersebut ke Azure Container Registry, lalu memperbarui file manifes Kubernetes di repositori GitHub.
  • Azure Kubernetes Service (AKS) adalah platform Kubernetes terkelola yang memungkinkan Anda menyebarkan dan mengelola aplikasi dalam kontainer tanpa keahlian orkestrasi kontainer. Sebagai layanan Kubernetes yang dihosting, Azure menangani tugas-tugas penting, seperti pemantauan dan pemeliharaan kesehatan.
  • Azure Container Registry menyimpan dan mengelola gambar kontainer yang digunakan oleh kluster AKS. Gambar disimpan dengan aman, dan dapat direplikasi ke wilayah lain oleh platform Azure untuk mempercepat waktu penyebaran.
  • GitHub adalah sistem kontrol sumber berbasis web yang berjalan di Git dan digunakan oleh pengembang untuk menyimpan dan membuat versi kode aplikasi mereka. Dalam skenario ini, GitHub digunakan untuk menyimpan kode sumber dalam repositori Git, lalu GitHub Actions digunakan untuk melakukan build dan pendorongan gambar kontainer ke Azure Container Registry dalam pendekatan berbasis pendorongan.
  • Argo CD adalah operator GitOps sumber terbuka yang terintegrasi dengan GitHub dan AKS. Argo CD mendukung penyebaran berkelanjutan (CD). Flux dapat digunakan untuk tujuan ini, tetapi Argo CD menampilkan bagaimana tim aplikasi dapat memilih alat terpisah untuk masalah siklus hidup aplikasi spesifik mereka, dibandingkan dengan menggunakan alat yang sama dengan yang digunakan operator kluster untuk manajemen kluster.
  • Azure Monitor membantu Anda melacak performa, menjaga keamanan, dan mengidentifikasi tren. Metrik yang diperoleh oleh Azure Monitor dapat digunakan oleh sumber daya dan alat lain, seperti Grafana.

Alternatif

  • Azure Pipelines membantu Anda menerapkan CI/DC dan menguji alur untuk aplikasi apa pun.
  • Jenkins adalah server otomatisasi sumber terbuka yang dapat diintegrasikan dengan layanan Azure untuk CI/CD.
  • Fluks dapat digunakan sebagai operator GitOps. Ini dapat melakukan tugas yang sama dengan Argo CD dan bekerja dengan cara yang sama dengan AKS.

Detail skenario

Dalam skenario ini, build dan penyebaran otomatis aplikasi Anda menggunakan beberapa teknologi. Kode dikembangkan dalam Visual Studio Code dan disimpan dalam repositori GitHub. GitHub Actions digunakan untuk membangun aplikasi sebagai kontainer, lalu mendorong gambar kontainer ke Azure Container Registry. GitHub Actions digunakan untuk memperbarui file penyebaran manifes Kube yang diperlukan, juga disimpan di repositori Git, sementara operator GitOps Argo CD mengambil file manifes Kubernetes dari sana dan menyebarkan aplikasi ke kluster AKS.

Contoh lain termasuk menyediakan lingkungan pengembangan otomatis, memvalidasi penerapan kode baru, dan mendorong penyebaran baru ke lingkungan penahapan atau produksi. Secara tradisional, bisnis harus secara manual membangun dan mengompilasi aplikasi dan pembaruan, dan mempertahankan basis kode monolitik yang besar. Dengan pendekatan modern untuk pengembangan aplikasi yang menggunakan CI dan GitOps untuk CD, Anda dapat dengan cepat membangun, menguji, dan menyebarkan layanan. Pendekatan modern ini memungkinkan Anda merilis aplikasi dan pembaruan kepada pelanggan Anda dengan lebih cepat, dan lebih lincah menanggapi perubahan tuntutan bisnis.

Dengan menggunakan layanan Azure dan GitHub seperti AKS, Container Registry, GitHub, dan GitHub Actions, perusahaan dapat menggunakan teknik dan alat pengembangan aplikasi terbaru untuk menyederhanakan proses penerapan ketersediaan tinggi. Selain itu, dengan menggunakan teknologi sumber terbuka, seperti Flux atau Argo CD untuk GitOps, perusahaan menyederhanakan penyebaran dan memberlakukan status aplikasi yang diinginkan.

Kemungkinan kasus penggunaan

Kasus penggunaan yang relevan lainnya meliputi:

  • Modernisasi praktik pengembangan aplikasi dengan mengadopsi layanan mikro, pendekatan berbasis kontainer.
  • Mempercepat pengembangan aplikasi dan siklus hidup penyebaran.
  • Mengotomatiskan penyebaran untuk menguji atau menerima lingkungan untuk validasi.
  • Pastikan konfigurasi dan status aplikasi yang diinginkan.
  • Mengotomatiskan manajemen siklus hidup kluster.

Opsi CI/CD

Dokumen ini menampilkan penggunaan GitOps untuk pendekatan modern untuk menangani penyebaran berkelanjutan dalam alur CI/CD. Namun, setiap organisasi berbeda. Saat menyebarkan aplikasi ke kluster Kubernetes melalui alur pengiriman otomatis, penting untuk memahami berbagai cara yang dapat dilakukan.

Dua opsi CI/CD yang paling umum untuk menyebarkan aplikasi ke kluster AKS berbasis push dan berbasis pull. Opsi pendorongan menggunakan GitHub Actions untuk penyebaran berkelanjutan dan opsi penarikan menggunakan GitOps untuk penyebaran berkelanjutan.

Opsi 1: Arsitektur berbasis push dengan GitHub Actions untuk CI dan CD

Dalam pendekatan ini, kode dimulai dengan bagian CI dari alur yang bekerja dengan caranya untuk perubahan yang didorong sebagai penyebaran ke kluster Kubernetes. Penyebaran didasarkan pada pemicu. Ada berbagai pemicu yang dapat memulai penyebaran, misalnya, berkomitmen ke repositori atau pemicu dari alur CI lain. Dengan pendekatan ini, sistem alur memiliki akses ke kluster Kubernetes. Modul berbasis push adalah model paling umum yang digunakan saat ini oleh alat CI/CD.

Alasan untuk menggunakan pendekatan berbasis push:

  • Fleksibilitas: Sebagian besar operator GitOps saat ini hanya berjalan di Kubernetes. Jika organisasi Anda ingin menyebarkan aplikasi ke apa pun selain Kubernetes, Anda harus mendorong aplikasi ke lingkungan tersebut melalui alat CI/CD lainnya seperti dengan GitHub Actions.

  • Efisiensi: Pendekatan standar untuk menyebarkan aplikasi asli dan tradisional cloud Anda lebih efisien. Saat ini, GitOps paling cocok untuk aplikasi cloud-native yang berjalan di Kubernetes.

  • Kesederhanaan: CI/CD berbasis push terkenal di antara sekumpulan insinyur terluas di banyak organisasi. Pendekatan berbasis pendorongan mungkin lebih sederhana daripada campuran pendekatan CI/CD berbasis pendorongan dan berbasis tarik.

  • Struktur: Struktur repositori saat ini yang digunakan untuk aplikasi Anda mungkin tidak cocok untuk GitOps, yang berarti bahwa perencanaan dan restrukturisasi yang signifikan akan diperlukan agar sesuai dengan GitOps.

Opsi 2: Arsitektur berbasis pull dengan GitHub Actions untuk operator CI dan GitOps Argo CD untuk CD

Pendekatan ini berpusat pada penerapan perubahan apa pun dari dalam kluster Kubernetes. Kluster Kubernetes mencakup operator yang memindai repositori git untuk status kluster yang diinginkan, mengambil dan menerapkan perubahan apa pun yang perlu dilakukan. Dalam model ini, tidak ada klien eksternal yang memiliki kredensial tingkat admin ke kluster Kubernetes. Model penarikan bukan baru tetapi belum banyak digunakan oleh alat CI/CD. Baru-baru ini, dengan pengenalan GitOps, model tarik telah mendapatkan adopsi. Banyak organisasi telah menggunakan GitOps untuk memfasilitasi penyebaran berkelanjutan dalam alur CD/CD mereka.

Alasan untuk menggunakan pendekatan berbasis penarikan:

  • Konsistensi: Dengan GitOps, operator membandingkan status kluster Kubernetes Anda dengan status konfigurasi dan aplikasi yang diinginkan dalam repositori git. Jika ada penyimpangan ke konfigurasi atau aplikasi, operator GitOps membawa kluster Kubernetes kembali ke status yang diinginkan secara otomatis.

  • Keamanan: Pendekatan berbasis penarikan untuk CI/CD dengan GitOps memungkinkan Anda untuk mengalihkan kredensial keamanan ke kluster Kubernetes Anda, yang mengurangi permukaan keamanan dan risiko dengan menghapus kredensial agar tidak disimpan di alat CI eksternal Anda. Anda juga dapat mengurangi koneksi masuk yang diizinkan dan membatasi akses tingkat admin ke kluster Kubernetes Anda.

  • Penerapan versi: Karena GitOps menggunakan repositori git sebagai sumber kebenaran, penyebaran berkelanjutan Anda secara inheren memiliki kemampuan penerapan versi, pemutaran kembali, dan audit.

  • Multi-penyewaan: Pendekatan berbasis pull dengan GitOps sangat cocok untuk tim terdistribusi dan atau multi-penyewaan. Dengan GitOps, Anda dapat menggunakan repositori git terpisah, hak akses terpisah, dan mendistribusikan penyebaran di berbagai namespace layanan.

  • Cloud native: Lebih banyak aplikasi sedang dimodernisasi atau dibangun untuk menjadi cloud-native. Untuk organisasi apa pun yang memiliki sebagian besar aplikasinya yang berjalan di Kubernetes, menggunakan operator GitOps untuk penyebaran berkelanjutan lebih sederhana dan lebih efisien daripada pendekatan berbasis push tradisional untuk CI/CD.

Pertimbangan

Pertimbangan ini mengimplementasikan pilar Azure Well-Architected Framework, yang merupakan serangkaian tenet panduan yang dapat digunakan untuk meningkatkan kualitas beban kerja. Untuk informasi selengkapnya, lihat Microsoft Azure Well-Architected Framework.

Keandalan

Keandalan memastikan aplikasi Anda dapat mencapai komitmen yang Anda buat kepada pelanggan Anda. Untuk informasi selengkapnya, lihat Gambaran Umum pilar keandalan.

Untuk memantau performa aplikasi Anda dan melaporkan masalah, skenario ini menggunakan Azure Monitor. Ini memungkinkan Anda memantau dan memecahkan masalah performa yang mungkin memerlukan pembaruan kode, yang kemudian dapat disebarkan dengan alur CI/CD.

Sebagai bagian dari kluster AKS, load balancer mendistribusikan lalu lintas aplikasi ke satu atau beberapa kontainer atau pod yang menjalankan aplikasi Anda. Pendekatan untuk menjalankan aplikasi kontainer di Kubernetes ini menyediakan infrastruktur dengan ketersediaan tinggi untuk pelanggan Anda.

Catatan

Artikel ini tidak secara langsung membahas ketersediaan tinggi alur CI/CD. Untuk informasi selengkapnya, kunjungi Ketersediaan tinggi untuk GitHub Actions dan Argo CD Declarative GitOps CD untuk Kubernetes.

Komponen ketahanan dibangun ke dalam Kubernetes. Komponen-komponen ini memantau dan menghidupkan ulang kontainer, atau pod, jika ada masalah. Ketika beberapa node Kubernetes digabungkan, aplikasi Anda dapat mentolerir pod atau node yang tidak tersedia.

Untuk panduan umum tentang merancang solusi tangguh, lihat Merancang aplikasi Azure yang andal.

Keamanan

Keamanan memberikan jaminan terhadap serangan yang disukai dan penyalahgunaan data dan sistem berharga Anda. Untuk informasi selengkapnya, lihat Gambaran Umum pilar keamanan.

Untuk pemisahan kredensial dan izin, skenario ini menggunakan perwakilan layanan Microsoft Entra khusus. Kredensial untuk perwakilan layanan ini disimpan sebagai objek kredensial aman di GitHub, sebagai Rahasia Tindakan GitHub, sehingga mereka tidak secara langsung terekspos dan terlihat dalam skrip atau alur build.

Untuk panduan umum tentang mengamankan aplikasi pada kluster AKS, lihat Konsep keamanan untuk aplikasi dan kluster di AKS.

Untuk pemisahan masalah, panduannya adalah memisahkan komputasi yang menjalankan aplikasi bisnis dari agen CD, atau operator GitOps, dengan menjalankan aplikasi bisnis dan operator GitOps di namespace layanan terpisah pada kluster Kubernetes. Untuk pemisahan masalah lebih lanjut, operator GitOps dapat dijalankan pada kluster Kubernetes yang didedikasikan untuk instans GitOps terpisah dari kluster Kubernetes produksi yang menjalankan aplikasi bisnis.

Catatan

Artikel ini tidak secara langsung membahas cara mengamankan alur CI/CD.

Efisiensi kinerja

Efisiensi performa adalah kemampuan beban kerja Anda untuk diskalakan agar memenuhi permintaan yang diberikan oleh pengguna dengan cara yang efisien. Untuk informasi selengkapnya, lihat Gambaran umum pilar efisiensi performa.

AKS memungkinkan Anda menskalakan jumlah node kluster untuk memenuhi tuntutan aplikasi Anda. Seiring bertambahnya aplikasi, Anda dapat meningkatkan jumlah simpul Kubernetes yang menjalankan layanan Anda.

Dengan GitHub Actions, penyedia cloud secara otomatis menskalakan jumlah pelari. Jika pelari yang dihost sendiri digunakan, host runner akan bertanggung jawab untuk menskalakannya sesuai kebutuhan.

Untuk topik skalabilitas lainnya, lihat daftar periksa efisiensi performa.

Menyebarkan skenario ini

Ikuti langkah-langkah dalam implementasi referensi AKS-baseline-automation untuk menyebarkan skenario. Repositori implementasi referensi telah memandu panduan untuk skenario CI/CD berbasis push dan skenario CI/CD berbasis pull (GitOps ).

Kontributor

Artikel ini dikelola oleh Microsoft. Ini awalnya ditulis oleh kontributor berikut.

Penulis utama:

Kontributor lain:

Untuk melihat profil LinkedIn non-publik, masuk ke LinkedIn.

Langkah berikutnya

Skenario ini menggunakan Azure Container Registry dan AKS untuk menyimpan dan menjalankan aplikasi berbasis kontainer. Azure Container Apps atau Azure Container Instances juga dapat digunakan untuk menjalankan aplikasi berbasis kontainer, tanpa harus menyediakan komponen orkestrasi apa pun. Untuk informasi selengkapnya, lihat Gambaran umum Azure Container Instances dan gambaran umum Azure Container Apps.

Dokumentasi produk:

Modul Microsoft Learn: