Bagikan melalui


Tutorial: Menyebarkan aplikasi menggunakan GitOps dengan Flux v2

Tutorial ini menjelaskan cara menggunakan GitOps dalam kluster Kubernetes. GitOps dengan Flux v2 diaktifkan sebagai ekstensi kluster di kluster Kubernetes dengan dukungan Azure Arc atau kluster Azure Kubernetes Service (AKS). microsoft.flux Setelah ekstensi kluster diinstal, Anda dapat membuat satu atau beberapa fluxConfigurations sumber daya yang menyinkronkan sumber repositori Git Anda ke kluster dan mendamaikan kluster ke status yang diinginkan. Dengan GitOps, Anda dapat menggunakan repositori Git sebagai sumber kebenaran untuk konfigurasi kluster dan penyebaran aplikasi.

Dalam tutorial ini, kami menggunakan contoh konfigurasi GitOps dengan dua kustomisasi, sehingga Anda dapat melihat bagaimana satu kustomisasi dapat memiliki dependensi pada yang lain. Anda dapat menambahkan lebih banyak kustomisasi dan dependensi sesuai kebutuhan, tergantung pada skenario Anda.

Sebelum Anda menyelam, luangkan waktu sejenak untuk mempelajari cara kerja GitOps dengan Flux secara konseptual.

Tip

Meskipun sumber dalam tutorial ini adalah repositori Git, Flux juga menyediakan dukungan untuk sumber file umum lainnya seperti repositori Helm, Bucket, dan Azure Blob Storage.

Anda juga dapat membuat konfigurasi Fluks dengan menggunakan Bicep, templat ARM, atau penyedia Terraform AzAPI. Untuk informasi selengkapnya, lihat Microsoft.KubernetesConfiguration fluxConfigurations.

Penting

Ekstensi ini microsoft.flux merilis versi utama 1.0.0. Ini termasuk fitur multi-penyewaan. Jika Anda memiliki konfigurasi GitOps Flux v2 yang menggunakan versi microsoft.flux ekstensi sebelumnya, Anda dapat meningkatkan ke versi terbaru secara manual menggunakan Azure CLI: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (gunakan -t connectedClusters untuk kluster Arc dan -t managedClusters untuk kluster AKS).

Prasyarat

Untuk menyebarkan aplikasi menggunakan GitOps dengan Flux v2, Anda memerlukan:

Untuk kluster Kubernetes dengan dukungan Azure Arc

Untuk kluster Azure Kubernetes Service

  • Kluster AKS berbasis MSI yang aktif dan berjalan.

    Penting

    Pastikan kluster AKS dibuat dengan MSI (bukan SPN), karena microsoft.flux ekstensi tidak akan berfungsi dengan kluster AKS berbasis SPN. Untuk kluster AKS baru yang dibuat dengan az aks create, kluster berbasis MSI secara default. Untuk kluster berbasis SPN yang sudah dibuat yang perlu dikonversi ke MSI, jalankan az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola di AKS.

  • Izin baca dan tulis pada jenis sumber daya Microsoft.ContainerService/managedClusters.

Umum untuk kedua jenis kluster

  • Izin baca dan tulis pada jenis sumber daya ini:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Azure CLI versi 2.15 atau lebih baru. Instal Azure CLI atau gunakan perintah berikut untuk memperbarui ke versi terbaru:

    az version
    az upgrade
    
  • Klien baris perintah Kubernetes, kubectl. kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell.

    Pasang kubectl secara lokal menggunakan perintah az aks install-cli:

    az aks install-cli
    
  • Pendaftaran penyedia sumber daya Azure berikut:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Pendaftaran adalah proses asinkron dan harus selesai dalam waktu 10 menit. Untuk memantau proses pendaftaran, gunakan perintah berikut:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Dukungan versi dan wilayah

GitOps saat ini didukung di semua wilayah yang didukung Kubernetes dengan dukungan Azure Arc. GitOps saat ini didukung di subset wilayah yang didukung AKS. Layanan GitOps menambahkan wilayah baru yang didukung pada irama reguler.

Versi terbaru ekstensi Flux v2 dan dua versi sebelumnya (N-2) didukung. Kami umumnya menyarankan Agar Anda menggunakan versi ekstensi terbaru.

Persyaratan jaringan

Agen GitOps memerlukan TCP keluar (keluar) ke sumber repositori di port 22 (SSH) atau port 443 (HTTPS) agar berfungsi. Agen juga memerlukan akses ke URL keluar berikut:

Titik akhir (DNS) Deskripsi
https://management.azure.com Diperlukan agen untuk berkomunikasi dengan layanan Konfigurasi Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Titik akhir sarana data bagi agen untuk mendorong status dan mengambil informasi konfigurasi. Tergantung pada <region> (wilayah yang didukung yang disebutkan sebelumnya).
https://login.microsoftonline.com Diperlukan untuk mengambil dan memperbarui token Azure Resource Manager.
https://mcr.microsoft.com Diperlukan untuk menarik gambar kontainer untuk pengontrol Flux.

Mengaktifkan ekstensi CLI

Instal paket ekstensi terbaru k8s-configuration dan k8s-extension CLI:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Untuk memperbarui paket ini ke versi terbaru:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Untuk melihat daftar semua ekstensi Azure CLI yang diinstal dan versinya, gunakan perintah berikut:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

Tip

Untuk bantuan mengatasi kesalahan apa pun, lihat bagian GitOps (Flux v2) dari Memecahkan masalah ekstensi untuk kluster Kubernetes dengan dukungan Azure Arc.

Menerapkan konfigurasi Fluks

k8s-configuration Gunakan ekstensi Azure CLI atau portal Azure untuk mengaktifkan GitOps di kluster Kubernetes dengan dukungan AKS atau Arc. Untuk demonstrasi, gunakan repositori gitops-flux2-kustomize-helm-mt publik.

Penting

Repositori demonstrasi dirancang untuk menyederhanakan penggunaan tutorial ini dan menggambarkan beberapa prinsip utama. Agar tetap terbarui, repositori kadang-kadang bisa mendapatkan perubahan yang melanggar dari peningkatan versi. Perubahan ini tidak akan memengaruhi aplikasi baru tutorial ini, hanya aplikasi tutorial sebelumnya yang belum dihapus. Untuk mempelajari cara menangani perubahan ini, silakan lihat penafian perubahan yang melanggar.

Contoh berikut menggunakan az k8s-configuration flux create perintah untuk menerapkan konfigurasi Fluks ke kluster, menggunakan nilai dan pengaturan berikut:

  • Grup sumber daya yang berisi kluster adalah flux-demo-rg.
  • Nama kluster Azure Arc adalah flux-demo-arc.
  • Jenis kluster adalah Azure Arc (-t connectedClusters), tetapi contoh ini juga berfungsi dengan AKS (-t managedClusters).
  • Nama konfigurasi Flux adalah cluster-config.
  • Namespace untuk penginstalan konfigurasi adalah cluster-config.
  • URL untuk repositori Git publik adalah https://github.com/Azure/gitops-flux2-kustomize-helm-mt.
  • Cabang repositori Git adalah main.
  • Cakupan konfigurasi adalah cluster. Cakupan ini memberi operator izin untuk membuat perubahan di seluruh kluster. Untuk menggunakan namespace cakupan dengan tutorial ini, lihat perubahan yang diperlukan.
  • Dua kustomisasi ditentukan dengan nama infra dan apps. Masing-masing dikaitkan dengan jalur di repositori.
  • Kustomisasi apps tergantung pada infra kustomisasi. (Kustomisasi infra harus selesai sebelum apps kustomisasi berjalan.)
  • Atur prune=true pada kedua kustomisasi. Pengaturan ini memastikan bahwa objek yang disebarkan Flux ke kluster dibersihkan jika dihapus dari repositori, atau jika konfigurasi Flux atau kustomisasi dihapus.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

microsoft.flux Ekstensi diinstal pada kluster (jika belum diinstal dalam penyebaran GitOps sebelumnya).

Tip

Perintah menyebarkan az k8s-configuration flux create microsoft.flux ekstensi ke kluster dan membuat konfigurasi. Dalam beberapa skenario, Anda mungkin ingin membuat instans ekstensi fluks secara terpisah sebelum membuat sumber daya konfigurasi Anda. Untuk melakukannya, gunakan az k8s-extension create perintah untuk membuat instans ekstensi pada kluster Anda.

Ketika konfigurasi fluks pertama kali diinstal, status kepatuhan awal mungkin Pending atau Non-compliant karena rekonsiliasi masih berlangsung. Setelah satu menit atau lebih, kueri konfigurasi lagi untuk melihat status kepatuhan akhir.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Untuk mengonfirmasi bahwa penyebaran berhasil, jalankan perintah berikut:

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Dengan penyebaran yang berhasil, namespace berikut dibuat:

  • flux-system: Memegang pengontrol ekstensi Flux.
  • cluster-config: Menyimpan objek konfigurasi Fluks.
  • nginx, , podinfo: redisNamespace untuk beban kerja yang dijelaskan dalam manifes di repositori Git.

Untuk mengonfirmasi namespace, jalankan perintah berikut:

kubectl get namespaces

Namespace flux-system berisi objek ekstensi Fluks:

  • Pengontrol Azure Flux: fluxconfig-agent, fluxconfig-controller
  • Pengontrol Fluks OSS: source-controller, , kustomize-controller, helm-controllernotification-controller

Agen Flux dan pod pengontrol harus dalam keadaan berjalan. Konfirmasikan ini menggunakan perintah berikut:

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

Namespace cluster-config memiliki objek konfigurasi Fluks.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

Konfirmasi detail konfigurasi lainnya dengan menggunakan perintah berikut.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

Beban kerja disebarkan dari manifes di repositori Git.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Mengontrol pengontrol mana yang disebarkan dengan ekstensi kluster Flux

Untuk beberapa skenario, Anda mungkin ingin mengubah pengontrol Flux mana yang diinstal dengan ekstensi kluster Flux.

sourcePengontrol Fluks , helm, kustomize, dan notification diinstal secara default. Pengontrol image-automation dan image-reflector , yang digunakan untuk memperbarui repositori Git ketika gambar kontainer baru tersedia, harus diaktifkan secara eksplisit.

Anda dapat menggunakan k8s-extension perintah untuk mengubah opsi default:

  • --config source-controller.enabled=<true/false> (default true)
  • --config helm-controller.enabled=<true/false> (default true)
  • --config kustomize-controller.enabled=<true/false> (default true)
  • --config notification-controller.enabled=<true/false> (default true)
  • --config image-automation-controller.enabled=<true/false> (default false)
  • --config image-reflector-controller.enabled=<true/false> (default false)

Misalnya, untuk menonaktifkan pemberitahuan, Anda dapat mengatur notification-controller.enabled ke false.

Contoh perintah ini menginstal image-reflector pengontrol dan image-automation . Jika ekstensi Flux dibuat secara otomatis ketika konfigurasi Flux pertama kali dibuat, nama ekstensinya adalah flux.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

Menggunakan identitas Kubelet sebagai metode autentikasi untuk kluster AKS

Untuk kluster AKS, salah satu opsi autentikasi yang akan digunakan adalah identitas kubelet. Secara default, AKS membuat identitas kubelet sendiri di grup sumber daya terkelola. Jika mau, Anda dapat menggunakan identitas terkelola kubelet yang dibuat sebelumnya. Untuk melakukannya, tambahkan parameter --config useKubeletIdentity=true pada saat penginstalan ekstensi Flux.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Panduan orientasi Red Hat OpenShift

Pengontrol fluks memerlukan Batasan Konteks Keamanan nonroot untuk menyediakan pod dengan benar pada kluster. Batasan ini harus ditambahkan ke kluster sebelum menyebarkan microsoft.flux ekstensi.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Untuk informasi selengkapnya tentang panduan OpenShift untuk onboarding Flux, lihat dokumentasi Flux.

Bekerja dengan parameter

Flux mendukung banyak parameter untuk mengaktifkan berbagai skenario. Untuk deskripsi semua parameter yang didukung Flux, lihat dokumentasi Flux resmi. Flux di Azure belum mendukung semua parameter. Beri tahu kami jika parameter yang Anda butuhkan hilang dari implementasi Azure.

Untuk informasi tentang parameter yang tersedia dan cara menggunakannya, lihat Parameter yang didukung GitOps (Flux v2).

Bekerja dengan referensi autentikasi rahasia lokal

Untuk menggunakan referensi autentikasi rahasia lokal, rahasia harus ada dalam namespace yang sama tempat fluxConfiguration akan disebarkan. Rahasia juga harus berisi semua parameter autentikasi yang diperlukan untuk sumbernya.

Untuk informasi tentang membuat rahasia untuk berbagai fluxConfiguration sumber, lihat Rahasia lokal untuk autentikasi dengan sumber.

Mengelola konfigurasi kluster dengan menggunakan pengontrol Flux Kustomize

Pengontrol Flux Kustomize diinstal sebagai bagian microsoft.flux dari ekstensi kluster. Ini memungkinkan manajemen deklaratif konfigurasi kluster dan penyebaran aplikasi dengan menggunakan manifes Kubernetes yang disinkronkan dari repositori Git. Manifes Kubernetes ini dapat secara opsional menyertakan file kustomize.yaml .

Untuk detail penggunaan, lihat sumber daya berikut:

Mengelola rilis bagan Helm dengan menggunakan pengontrol Flux Helm

Pengontrol Flux Helm diinstal sebagai bagian microsoft.flux dari ekstensi kluster. Ini memungkinkan Anda untuk secara deklaratif mengelola rilis bagan Helm dengan manifes Kubernetes yang Anda pertahankan di repositori Git Anda.

Untuk detail penggunaan, lihat sumber daya berikut:

Tip

Karena bagaimana Helm menangani file indeks, memproses bagan Helm adalah operasi yang mahal dan dapat memiliki jejak memori yang sangat tinggi. Akibatnya, merekonsiliasi sejumlah besar bagan Helm sekaligus dapat menyebabkan lonjakan memori dan OOMKilled kesalahan. Secara default, pengontrol mengatur batas memorinya pada 1Gi dan permintaan memorinya pada 64Mi. Untuk meningkatkan batas dan permintaan ini karena tingginya jumlah rekonsiliasi bagan Helm besar, jalankan perintah berikut setelah menginstal ekstensi microsoft.flux:

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Menggunakan sumber GitRepository untuk bagan Helm

Jika bagan Helm Anda disimpan di GitRepository sumber yang Anda konfigurasi sebagai bagian fluxConfigurations dari sumber daya, Anda dapat menunjukkan bahwa sumber yang dikonfigurasi harus digunakan sebagai sumber bagan Helm dengan menambahkan clusterconfig.azure.com/use-managed-source: "true" ke file HelmRelease.yaml Anda, seperti yang ditunjukkan dalam contoh berikut:

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

Saat Anda menggunakan anotasi ini, HelmRelease yang disebarkan di-patch dengan referensi ke sumber yang dikonfigurasi. Saat ini, hanya GitRepository sumber yang didukung.

Deteksi penyimpangan helm

Deteksi penyimpangan untuk rilis Helm tidak diaktifkan secara default. Dimulai dengan microsoft.flux v1.7.5, Anda dapat mengaktifkan deteksi penyimpangan Helm dengan menjalankan perintah berikut:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Substitusi variabel pasca-build yang ketat

Substitusi variabel pasca-build yang ketat tersedia dimulai dengan microsoft.flux v1.13.1.

Untuk membuat ekstensi Flux dengan kebijakan substitusi yang ketat diaktifkan, jalankan perintah ini:

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true

Untuk memperbarui ekstensi Fluks yang ada untuk mengaktifkan kebijakan substitusi yang ketat, jalankan perintah ini:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true

Penskalaan Vertikal

Dukungan untuk penskalaan vertikal tersedia dimulai dengan microsoft.flux v1.12.0. Saat ini, hanya parameter tertentu yang dijelaskan dalam dokumentasi penskalaan vertikal Fluks yang didukung secara asli. Parameter lain dapat diterapkan secara manual ke kluster.

Untuk meningkatkan batas sumber daya pada pengontrol di luar batas saat ini, jalankan perintah ini, ubah jenis dan nilai sumber daya tertentu sesuai kebutuhan:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

Untuk meningkatkan jumlah rekonsiliasi yang dapat dilakukan secara paralel, jalankan perintah ini:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

Untuk mengaktifkan build dalam memori, jalankan perintah ini:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Jam tangan Helm OOM

Dimulai dengan microsoft.flux v1.7.5, Anda dapat mengaktifkan jam tangan OOM Helm. Untuk informasi selengkapnya, lihat Mengaktifkan Helm di dekat deteksi OOM.

Pastikan untuk meninjau potensi strategi remediasi dan menerapkannya sesuai kebutuhan saat mengaktifkan fitur ini.

Untuk mengaktifkan jam tangan OOM, jalankan perintah berikut:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

Jika Anda tidak menentukan nilai untuk memoryThreshold dan outOfMemoryWatch, ambang batas memori default diatur ke 95%, dengan interval untuk memeriksa pemanfaatan memori yang diatur ke 500 ms.

Parameter tingkat log yang dapat dikonfigurasi

Secara default, log-level untuk pengontrol Fluks diatur ke info. Dimulai dengan microsoft.flux v1.8.3, Anda dapat mengubah pengaturan default ini menggunakan k8s-extension perintah sebagai berikut:

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

Nilai yang valid adalah debug, info, atau error. Misalnya, untuk mengubah log-level untuk source-controller dan kustomize-controller, gunakan perintah berikut:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

Dimulai dengan microsoft.flux v1.9.1, fluxconfig-agent dan fluxconfig-controller tingkat dukungan info dan error log (tetapi tidak debug). Ini dapat dimodifikasi dengan menggunakan perintah k8s-extension sebagai berikut:

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

Misalnya, perintah berikut berubah log-level menjadi error:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

Penghentian Azure DevOps SSH-RSA

Azure DevOps mengumumkan penghentian SSH-RSA sebagai metode enkripsi yang didukung untuk menyambungkan ke repositori Azure menggunakan SSH. Jika Anda menggunakan kunci SSH untuk menyambungkan ke repositori Azure dalam konfigurasi Flux, sebaiknya pindah ke kunci RSA-SHA2-256 atau RSA-SHA2-512 yang lebih aman.

Saat mendamaikan konfigurasi Flux, Anda mungkin melihat pesan kesalahan yang menunjukkan ssh-rsa akan ditolak atau tidak didukung. Jika demikian, perbarui algoritma kunci host yang digunakan untuk membuat koneksi SSH ke repositori Azure DevOps dari Flux source-controller dan image-automation-controller (jika diaktifkan) dengan menggunakan az k8s-extension update perintah . Contohnya:

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Untuk informasi selengkapnya tentang penghentian Azure DevOps SSH-RSA, lihat Akhir dukungan SSH-RSA untuk Azure Repos.

Mengonfigurasi anotasi pada pod ekstensi Flux

Saat mengonfigurasi solusi selain Azure Firewall, aturan jaringan dan FQDN/aplikasi diperlukan untuk kluster AKS. Dimulai dengan microsoft.flux v1.11.1, pod pengontrol Flux sekarang dapat mengatur anotasi kubernetes.azure.com/set-kube-service-host-fqdn dalam spesifikasi pod mereka. Ini memungkinkan lalu lintas ke nama domain API Server bahkan ketika firewall Layer 7 ada, memfasilitasi penyebaran selama penginstalan ekstensi. Untuk mengonfigurasi anotasi ini saat menggunakan ekstensi Flux, gunakan perintah berikut.

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Identitas beban kerja dalam kluster AKS

Dimulai dengan microsoft.flux v1.8.0, Anda dapat membuat konfigurasi Flux di kluster AKS dengan identitas beban kerja diaktifkan. Untuk melakukannya, ubah ekstensi fluks seperti yang ditunjukkan pada langkah-langkah berikut.

  1. Ambil URL penerbit OIDC untuk kluster Anda.

  2. Buat identitas terkelola dan catat ID kliennya.

  3. Buat ekstensi fluks pada kluster, menggunakan perintah berikut:

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. Menetapkan kredensial identitas federasi. Contohnya:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Pastikan sumber daya kustom yang perlu menggunakan nilai set .spec.provider identitas beban kerja ke azure dalam manifes. Contohnya:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Pastikan untuk memberikan izin yang tepat untuk identitas beban kerja untuk sumber daya yang Anda inginkan untuk ditarik oleh pengontrol sumber atau pengontrol pemantul gambar. Misalnya, jika menggunakan Azure Container Registry, AcrPull izin diperlukan.

Menghapus konfigurasi dan ekstensi Fluks

Gunakan perintah berikut untuk menghapus konfigurasi Flux Anda dan, jika diinginkan, ekstensi Flux itu sendiri.

Menghapus konfigurasi Fluks

Perintah berikut menghapus fluxConfigurations sumber daya di Azure dan objek konfigurasi Flux di kluster. Karena konfigurasi Flux awalnya dibuat dengan prune=true parameter untuk kustomisasi, semua objek yang dibuat dalam kluster berdasarkan manifes di repositori Git dihapus saat konfigurasi Flux dihapus. Namun, perintah ini tidak menghapus ekstensi Flux itu sendiri.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Menghapus ekstensi kluster Flux

Saat Anda menghapus ekstensi Flux, sumber microsoft.flux daya ekstensi di Azure dan objek ekstensi Flux di kluster akan dihapus.

Penting

Pastikan untuk menghapus semua konfigurasi Flux di kluster sebelum Anda menghapus ekstensi Flux. Menghapus ekstensi tanpa terlebih dahulu menghapus konfigurasi Flux dapat membuat kluster Anda dalam kondisi tidak stabil.

Jika ekstensi Flux dibuat secara otomatis saat konfigurasi Flux pertama kali dibuat, nama ekstensinya adalah flux.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

Tip

Perintah ini menggunakan -t connectedClusters, yang sesuai untuk kluster Kubernetes dengan dukungan Azure Arc. Untuk kluster AKS, gunakan -t managedClusters sebagai gantinya.

Langkah berikutnya