Penyebaran aplikasi dengan GitOps (Flux v2) untuk Kubernetes dengan dukungan AKS dan Azure Arc
Azure menyediakan kemampuan penyebaran aplikasi otomatis menggunakan GitOps yang berfungsi dengan kluster Azure Kubernetes Service (AKS) dan Kubernetes dengan dukungan Azure Arc. Manfaat utama yang diberikan dengan mengadopsi GitOps untuk menyebarkan aplikasi ke kluster Kubernetes meliputi:
- Visibilitas berkelanjutan ke dalam status aplikasi yang berjalan pada kluster.
- Pemisahan kekhawatiran antara tim pengembangan aplikasi dan tim infrastruktur. Tim aplikasi tidak perlu memiliki pengalaman dengan penyebaran Kubernetes. Tim teknik platform biasanya membuat model layanan mandiri untuk tim aplikasi, memberdayakan mereka untuk menjalankan penyebaran dengan keyakinan yang lebih tinggi.
- Kemampuan untuk membuat ulang kluster dengan status yang diinginkan yang sama jika terjadi crash atau untuk meluaskan skala.
Dengan GitOps, Anda menyatakan status kluster Kubernetes yang diinginkan dalam file di repositori Git. Repositori Git mungkin berisi file berikut:
- Manifes berformat YAML yang menjelaskan sumber daya Kubernetes (seperti Namespace, Rahasia, Penyebaran, dan lainnya)
- Bagan helm untuk menyebarkan aplikasi
- Kustomisasi file untuk menjelaskan perubahan khusus lingkungan
Karena file-file ini disimpan dalam repositori Git, file tersebut diberi versi, dan perubahan antar versi mudah dilacak. Pengontrol Kubernetes berjalan di kluster dan terus mendamaikan status kluster dengan status yang diinginkan yang dideklarasikan dalam repositori Git. Operator ini menarik file dari repositori Git dan menerapkan status yang diinginkan ke kluster. Operator juga terus memastikan bahwa kluster tetap dalam keadaan yang diinginkan.
GitOps di Kubernetes dengan dukungan Azure Arc atau Azure Kubernetes Service menggunakan Flux, set alat sumber terbuka yang populer. Flux menyediakan dukungan untuk sumber file umum (repositori Git dan Helm, Bucket, Azure Blob Storage) dan jenis templat (YAML, Helm, dan Kustomisasi). Flux juga mendukung manajemen dependensi multi-penyewaan dan penyebaran , di antara fitur lainnya.
Fluks disebarkan langsung pada kluster, dan setiap sarana kontrol kluster dipisahkan secara logis. Ini membuatnya menskalakan dengan baik hingga ratusan dan ribuan kluster. Flux memungkinkan penyebaran aplikasi GitOps berbasis pull murni. Tidak ada akses ke kluster yang diperlukan oleh repositori sumber atau oleh kluster lain.
Ekstensi kluster fluks
GitOps diaktifkan dalam kluster Kubernetes atau AKS dengan dukungan Azure Arc sebagai Microsoft.KubernetesConfiguration/extensions/microsoft.flux
sumber daya ekstensi kluster. microsoft.flux
Ekstensi harus diinstal di kluster sebelum satu atau beberapa fluxConfigurations
dapat dibuat. Ekstensi diinstal secara otomatis saat Anda membuat yang pertama Microsoft.KubernetesConfiguration/fluxConfigurations
dalam kluster, atau Anda dapat menginstalnya secara manual menggunakan portal, Azure CLI (az k8s-extension create --extensionType=microsoft.flux
), templat ARM, atau REST API.
Pengontrol
Secara default, microsoft.flux
ekstensi menginstal pengontrol Flux (Sumber, Kustomisasi, Helm, Pemberitahuan) dan Definisi Sumber Daya Kustom FluxConfig (CRD), fluxconfig-agent
, dan fluxconfig-controller
. Secara opsional, Anda juga dapat menginstal Flux image-automation
dan image-reflector
pengontrol, yang menyediakan fungsionalitas untuk memperbarui dan mengambil gambar Docker.
Pengontrol Sumber Fluks: Mengawasi
source.toolkit.fluxcd.io
sumber daya kustom. Menangani sinkronisasi antara repositori Git, repositori Helm, Bucket, dan penyimpanan Azure Blob. Menangani otorisasi dengan sumber untuk akun git privat, repositori Helm, dan penyimpanan blob Azure. Menampilkan perubahan terbaru pada sumber melalui file arsip tar.Pengontrol Fluks Kustomisasi: Mengawasi
kustomization.toolkit.fluxcd.io
sumber daya kustom. Menerapkan kustomisasi atau file YAML mentah dari sumber ke kluster.Pengontrol Flux Helm: Mengawasi
helm.toolkit.fluxcd.io
sumber daya kustom. Mengambil bagan terkait dari sumber Repositori Helm yang muncul oleh pengontrol Sumber.HelmChart
Membuat sumber daya kustom dan menerapkanHelmRelease
dengan versi, nama, dan nilai yang ditentukan pelanggan yang diberikan ke kluster.Pengontrol Pemberitahuan Fluks: Mengawasi
notification.toolkit.fluxcd.io
sumber daya kustom. Menerima pemberitahuan dari semua pengontrol Flux. Mendorong pemberitahuan ke titik akhir webhook yang ditentukan pengguna.Definisi Sumber Daya Kustom Fluks:
kustomizations.kustomize.toolkit.fluxcd.io
imagepolicies.image.toolkit.fluxcd.io
imagerepositories.image.toolkit.fluxcd.io
imageupdateautomations.image.toolkit.fluxcd.io
alerts.notification.toolkit.fluxcd.io
providers.notification.toolkit.fluxcd.io
receivers.notification.toolkit.fluxcd.io
buckets.source.toolkit.fluxcd.io
gitrepositories.source.toolkit.fluxcd.io
helmcharts.source.toolkit.fluxcd.io
helmrepositories.source.toolkit.fluxcd.io
helmreleases.helm.toolkit.fluxcd.io
fluxconfigs.clusterconfig.azure.com
FluxConfig CRD: Definisi Sumber Daya Kustom untuk
fluxconfigs.clusterconfig.azure.com
sumber daya kustom yang menentukanFluxConfig
objek Kubernetes.fluxconfig-agent
: Bertanggung jawab untuk menonton Azure untuk sumber daya baru atau yang diperbaruifluxConfigurations
, dan untuk memulai konfigurasi Fluks terkait di kluster. Juga bertanggung jawab untuk mendorong perubahan status Fluks dalam kluster kembali ke Azure untuk setiapfluxConfigurations
sumber daya.fluxconfig-controller
: Mengawasifluxconfigs.clusterconfig.azure.com
sumber daya kustom dan merespons perubahan dengan konfigurasi mesin GitOps baru atau yang diperbarui di kluster.
Catatan
microsoft.flux
Ekstensi diinstal di flux-system
namespace layanan dan memiliki cakupan di seluruh kluster. Anda tidak dapat menginstal ekstensi ini di cakupan namespace layanan.
Konfigurasi fluks
Anda membuat sumber daya konfigurasi Flux (Microsoft.KubernetesConfiguration/fluxConfigurations
) untuk mengaktifkan manajemen GitOps kluster dari repositori Git, sumber Bucket, atau penyimpanan Azure Blob Anda. Saat Anda membuat fluxConfigurations
sumber daya, nilai yang Anda berikan untuk parameter, seperti repositori Git target, digunakan untuk membuat dan mengonfigurasi objek Kubernetes yang memungkinkan proses GitOps di kluster tersebut. Untuk memastikan keamanan data, fluxConfigurations
data sumber daya disimpan dienkripsi saat tidak aktif dalam database Azure Cosmos DB oleh layanan Konfigurasi Kluster.
Agen fluxconfig-agent
dan fluxconfig-controller
, yang diinstal dengan microsoft.flux
ekstensi, mengelola proses konfigurasi GitOps.
fluxconfig-agent
bertanggung jawab atas tugas-tugas berikut:
- Polling layanan sarana data Konfigurasi Kubernetes untuk sumber daya baru atau yang diperbarui
fluxConfigurations
. - Membuat atau memperbarui
FluxConfig
sumber daya kustom di kluster dengan informasi konfigurasi. FluxConfig
Mengawasi sumber daya kustom dan mendorong perubahan status kembali ke sumber daya Azure fluxConfiguration terkait.
fluxconfig-controller
bertanggung jawab atas tugas-tugas berikut:
- Tonton pembaruan status untuk sumber daya kustom Flux yang dibuat oleh terkelola
fluxConfigurations
. - Membuat pasangan kunci privat/publik yang ada selama masa
fluxConfigurations
pakai . Kunci ini digunakan untuk autentikasi jika URL berbasis SSH dan jika pengguna tidak menyediakan kunci privat mereka sendiri selama pembuatan konfigurasi. - Membuat rahasia autentikasi kustom berdasarkan data private-key/http basic-auth/known-hosts/no-auth yang disediakan pengguna.
- Menyiapkan kontrol akses berbasis peran (akun layanan disediakan, pengikatan peran dibuat/ditetapkan, peran dibuat/ditetapkan).
GitRepository
Membuat atauBucket
sumber daya kustom danKustomization
sumber daya kustom dari informasi diFluxConfig
sumber daya kustom.
Setiap fluxConfigurations
sumber daya di Azure dikaitkan dengan satu Fluks GitRepository
atau Bucket
sumber daya kustom dan satu atau beberapa Kustomization
sumber daya kustom dalam kluster Kubernetes. Saat membuat fluxConfigurations
sumber daya, Anda menentukan URL ke sumber (repositori Git, Bucket, atau penyimpanan Azure Blob) dan target sinkronisasi di sumber untuk masing-masing Kustomization
. Anda dapat mengonfigurasi dependensi antara Kustomization
sumber daya kustom untuk mengontrol pengurutan penyebaran. Anda juga dapat membuat beberapa sumber daya cakupan fluxConfigurations
namespace pada kluster yang sama untuk aplikasi dan tim aplikasi yang berbeda.
Catatan
Monitor fluxconfig-agent
untuk sumber daya baru atau yang diperbarui fluxConfiguration
di Azure. Agen memerlukan konektivitas ke Azure untuk status yang fluxConfiguration
diinginkan untuk diterapkan ke kluster. Jika agen tidak dapat tersambung ke Azure, perubahan dalam kluster menunggu hingga agen dapat tersambung. Jika kluster terputus dari Azure selama lebih dari 48 jam, maka permintaan ke kluster akan kehabisan waktu, dan perubahan perlu diterapkan kembali di Azure.
Input pelanggan sensitif seperti kunci privat dan token/kata sandi disimpan selama kurang dari 48 jam di layanan Konfigurasi Kubernetes. Jika Anda memperbarui salah satu nilai ini di Azure, pastikan kluster Anda terhubung dengan Azure dalam waktu 48 jam.
Anda dapat memantau status dan kepatuhan konfigurasi Fluks di portal Azure, atau menggunakan dasbor untuk memantau status, kepatuhan, konsumsi sumber daya, dan aktivitas rekonsiliasi. Untuk informasi selengkapnya, lihat Memantau status dan aktivitas GitOps (Flux v2).
Dukungan versi
Versi terbaru ekstensi Flux v2 (microsoft.flux
) dan dua versi sebelumnya (N-2) didukung. Kami umumnya menyarankan Agar Anda menggunakan versi ekstensi terbaru. Dimulai dengan microsoft.flux
versi 1.7.0, kluster berbasis ARM64 didukung.
Catatan
Jika Anda telah menggunakan Flux v1, 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.
GitOps dengan tautan privat
Jika Anda telah menambahkan dukungan untuk tautan privat ke kluster Kubernetes dengan dukungan Azure Arc, maka microsoft.flux
ekstensi berfungsi di luar kotak dengan komunikasi kembali ke Azure. Untuk koneksi ke repositori Git, repositori Helm, atau titik akhir lain yang diperlukan untuk menyebarkan manifes Kubernetes, Anda harus menyediakan titik akhir ini di belakang firewall Anda, atau mencantumkannya di firewall Anda, sehingga pengontrol Sumber Fluks dapat berhasil menjangkaunya.
Residensi data
Layanan Azure GitOps (Azure Kubernetes Configuration Management) menyimpan/memproses data pelanggan. Secara default, data pelanggan direplikasi ke wilayah berpasangan. Untuk wilayah Singapura, Asia Timur, dan Brasil Selatan, semua data pelanggan disimpan dan diproses di wilayah tersebut.
Menerapkan konfigurasi Fluks dalam skala besar
Karena Azure Resource Manager mengelola konfigurasi, Anda dapat mengotomatiskan pembuatan konfigurasi yang sama di semua sumber daya Kube yang didukung Azure Kubernetes Service dan Azure Arc menggunakan Azure Policy, dalam lingkup langganan atau grup sumber daya. Penerapan dalam skala besar ini memastikan bahwa konfigurasi tertentu diterapkan secara konsisten di seluruh grup kluster.
Untuk informasi selengkapnya, lihat Menyebarkan aplikasi secara konsisten dalam skala besar menggunakan konfigurasi Flux v2 dan Azure Policy.
Parameter
Untuk melihat semua parameter yang didukung oleh Flux v2 di Azure, lihat az k8s-configuration
dokumentasi. Implementasi Azure saat ini tidak mendukung setiap parameter yang didukung Flux.
Untuk informasi tentang parameter yang tersedia dan cara menggunakannya, lihat Parameter yang didukung GitOps (Flux v2).
Multi-tenancy
Flux v2 mendukung multi-penyewaan mulai versi 0.26. Kemampuan ini diintegrasikan ke dalam Flux v2 di Azure.
Catatan
Untuk fitur multi-penyewaan, Anda perlu mengetahui apakah manifes Anda berisi sumber lintas namespace layanan untuk HelmRelease, Kustomisasi, ImagePolicy, atau objek lainnya, atau jika Anda menggunakan versi Kubernetes kurang dari 1.20.6. Untuk mempersiapkan:
- Tingkatkan ke Kubernetes versi 1.20.6 atau lebih tinggi.
- Dalam manifes Kubernetes Anda, pastikan bahwa semua
sourceRef
ke objek dalam namespace yang sama dengan konfigurasi GitOps.- Jika Anda membutuhkan waktu untuk memperbarui manifes, Anda dapat memilih keluar dari multi-penyewaan. Namun, Anda masih perlu meningkatkan versi Kubernetes.
Memperbarui manifes untuk multi-penyewaan
Katakanlah Anda menyebarkan fluxConfiguration
ke salah satu kluster Kubernetes kami di cluster-config
namespace layanan dengan cakupan kluster. Anda mengonfigurasi sumber untuk menyinkronkan https://github.com/fluxcd/flux2-kustomize-helm-example
repositori. Ini adalah sampel repositori Git yang sama yang digunakan dalam tutorial Menyebarkan aplikasi menggunakan GitOps dengan Flux v2.
Setelah Flux menyinkronkan repositori, Flux menyebarkan sumber daya yang dijelaskan dalam manifes (file YAML). Dua manifes menjelaskan HelmRelease
dan HelmRepository
objek.
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: nginx
spec:
releaseName: nginx-ingress-controller
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Secara default, ekstensi Flux menyebarkan fluxConfigurations
dengan meniru flux-applier
akun layanan yang hanya disebarkan di cluster-config
namespace layanan. Menggunakan manifes di atas, ketika multi-penyewa diaktifkan, HelmRelease
akan diblokir. Ini karena HelmRelease
berada di nginx
namespace layanan, tetapi mereferensikan HelmRepository di flux-system
namespace layanan. Selain itu, Flux helm-controller
tidak dapat menerapkan HelmRelease
, karena tidak flux-applier
ada akun layanan di nginx
namespace layanan.
Untuk bekerja dengan multi-penyewaan, pendekatan yang benar adalah menyebarkan semua objek Flux ke dalam namespace yang sama dengan fluxConfigurations
. Pendekatan ini menghindari masalah referensi lintas namespace layanan, dan memungkinkan pengontrol Flux untuk mendapatkan izin untuk menerapkan objek. Dengan demikian, untuk konfigurasi GitOps yang dibuat di cluster-config
namespace layanan, contoh manifes ini akan berubah sebagai berikut:
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx
namespace: cluster-config
spec:
releaseName: nginx-ingress-controller
targetNamespace: nginx
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: cluster-config
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: cluster-config
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
Memilih keluar dari multi-penyewaan
microsoft.flux
Saat ekstensi diinstal, multi-penyewaan diaktifkan secara default. Jika Anda perlu menonaktifkan multi-penyewaan, Anda dapat memilih keluar dengan membuat atau memperbarui microsoft.flux
ekstensi di kluster Anda dengan --configuration-settings multiTenancy.enforce=false
, seperti yang ditunjukkan dalam contoh perintah ini:
az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
Migrasi dari Flux v1
Jika Anda masih menggunakan Flux v1, sebaiknya migrasi ke Flux v2 sesegera mungkin.
Untuk bermigrasi menggunakan Flux v2 dalam kluster yang sama di mana Anda telah menggunakan Flux v1, Anda harus terlebih dahulu menghapus semua Flux v1 sourceControlConfigurations
dari kluster. Karena Flux v2 memiliki arsitektur yang pada dasarnya berbeda, microsoft.flux
ekstensi kluster tidak akan diinstal jika ada sumber daya Flux v1 sourceControlConfigurations
dalam kluster. Proses penghapusan konfigurasi Flux v1 dan penyebaran konfigurasi Flux v2 tidak boleh memakan waktu lebih dari 30 menit.
Menghapus Flux v1 sourceControlConfigurations
tidak menghentikan aplikasi apa pun yang berjalan pada kluster. Namun, selama periode ketika konfigurasi Flux v1 dihapus dan ekstensi Flux v2 belum sepenuhnya disebarkan:
- Jika ada perubahan baru dalam manifes aplikasi yang disimpan di repositori Git, perubahan ini tidak ditarik selama migrasi, dan versi aplikasi yang disebarkan pada kluster akan basi.
- Jika ada perubahan yang tidak diinginkan dalam status kluster dan menyimpang dari status yang diinginkan yang ditentukan dalam repositori Git sumber, kluster tidak akan dapat menyembuhkan diri sendiri.
Sebaiknya uji skenario migrasi Anda di lingkungan pengembangan sebelum memigrasikan lingkungan produksi Anda.
Melihat dan menghapus konfigurasi Flux v1
Gunakan perintah Azure CLI ini untuk menemukan lalu menghapus yang ada sourceControlConfigurations
dalam kluster:
az k8s-configuration list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
Anda juga dapat menemukan dan menghapus konfigurasi GitOps yang ada untuk kluster di portal Azure. Untuk melakukannya, navigasikan ke kluster tempat konfigurasi dibuat dan pilih GitOps di panel kiri. Pilih konfigurasi, lalu pilih Hapus.
Menyebarkan konfigurasi Flux v2
Gunakan portal Azure atau Azure CLI untuk menerapkan konfigurasi Flux v2 ke kluster Anda.
Informasi penghentian Flux v1
Proyek sumber terbuka Flux v1 telah diarsipkan, dan pengembangan fitur telah berhenti tanpa batas waktu.
Flux v2 diluncurkan sebagai proyek sumber terbuka Flux yang ditingkatkan. Ini memiliki arsitektur baru dan mendukung lebih banyak kasus penggunaan GitOps. Microsoft meluncurkan versi ekstensi menggunakan Flux v2 pada Mei 2022. Sejak itu, pelanggan telah disarankan untuk pindah ke Flux v2 dalam waktu tiga tahun, karena dukungan untuk menggunakan Flux v1 dijadwalkan berakhir pada Mei 2025.
Fitur baru utama yang diperkenalkan dalam ekstensi GitOps untuk Flux v2:
- Flux v1 adalah operator do-it-all monolitik. Flux v2 memisahkan fungsionalitas menjadi pengontrol khusus (Pengontrol sumber, Pengontrol Kustomisasi, pengontrol Helm, dan Pengontrol Pemberitahuan).
- Mendukung sinkronisasi dengan beberapa repositori sumber.
- Mendukung multi-penyewaan, seperti menerapkan setiap repositori sumber dengan sekumpulan izinnya sendiri.
- Memberikan wawasan operasional melalui pemeriksaan kesehatan, peristiwa, dan pemberitahuan.
- Mendukung cabang Git, menyematkan penerapan dan tag, dan mengikuti rentang tag SemVer.
- Konfigurasi kredensial per sumber daya GitRepository: Kunci privat SSH, nama pengguna HTTP/S/kata sandi/token, dan kunci publik OpenPGP.
Langkah berikutnya
- Gunakan tutorial kami untuk mempelajari cara mengaktifkan GitOps pada kluster Kubernetes yang didukung AKS atau Azure Arc.
- Pelajari tentang alur kerja CI/CD menggunakan GitOps.