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.fluxsumber 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 menerapkan HelmRelease 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 menentukan FluxConfig objek Kubernetes.

  • fluxconfig-agent: Bertanggung jawab untuk menonton Azure untuk sumber daya baru atau yang diperbarui fluxConfigurations , dan untuk memulai konfigurasi Fluks terkait di kluster. Juga bertanggung jawab untuk mendorong perubahan status Fluks dalam kluster kembali ke Azure untuk setiap fluxConfigurations sumber daya.

  • fluxconfig-controller: Mengawasi fluxconfigs.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

Diagram yang menunjukkan penginstalan konfigurasi Flux di kluster Kubernetes atau AKS dengan dukungan Azure Arc.

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 fluxConfigurationspakai . 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 atau Bucket sumber daya kustom dan Kustomization sumber daya kustom dari informasi di FluxConfig 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.

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.

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