Tutorial: Menggunakan GitOps dengan Flux v2 di kluster Kubernetes atau AKS dengan dukungan Azure Arc

GitOps dengan Flux v2 dapat diaktifkan di kluster terkelola Azure Kubernetes Service (AKS) atau kluster yang terhubung dengan Dukungan Azure Arc sebagai ekstensi kluster. 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.

Catatan

Akhirnya Azure akan berhenti mendukung GitOps dengan Flux v1, jadi mulailah menggunakan Flux v2 sesegera mungkin.

Tutorial ini menjelaskan cara menggunakan GitOps dalam kluster Kubernetes. Sebelum Anda menyelam, luangkan waktu sejenak untuk mempelajari cara kerja GitOps dengan Flux secara konseptual.

Penting

Layanan manajemen Azure add-on, seperti Konfigurasi Kubernetes, dikenakan biaya saat diaktifkan. Biaya yang terkait dengan penggunaan Flux v2 akan mulai ditagih pada 1 Juli 2022. Untuk informasi selengkapnya, lihat Harga Azure Arc.

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 ekstensi 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 mengelola GitOps melalui Azure CLI atau portal Microsoft Azure, Anda memerlukan item berikut.

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 akan 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 dokumen identitas terkelola.

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

  • Pendaftaran langganan Anda dengan AKS-ExtensionManager bendera fitur. Gunakan perintah berikut:

    az feature register --namespace Microsoft.ContainerService --name AKS-ExtensionManager
    

Umum untuk kedua jenis kluster

  • Azure CLI versi 2.15 atau yang lebih baru. Instal Azure CLI atau gunakan perintah berikut untuk memperbarui ke versi terbaru:

    az version
    az upgrade
    
  • Pendaftaran penyedia layanan Azure berikut. (Tidak masalah untuk mendaftarkan ulang penyedia yang ada.)

    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. Gunakan kode berikut untuk memantau proses pendaftaran:

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

Wilayah yang didukung

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

Persyaratan jaringan

Agen GitOps memerlukan TCP keluar (keluar) ke sumber repositori pada port 22 (SSH) atau port 443 (HTTPS) agar berfungsi. Agen juga memerlukan 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

Catatan

Ekstensi k8s-configuration CLI mengelola konfigurasi Flux v2 atau Flux v1. Akhirnya Azure akan berhenti mendukung GitOps dengan Flux v1, jadi mulailah menggunakan Flux v2 sesegera mungkin.

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, gunakan perintah berikut:

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

Untuk melihat daftar ekstensi CLI az 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 saran Flux v2 di Pemecahan masalah Kubernetes dan GitOps dengan dukungan Azure Arc.

Menerapkan konfigurasi Fluks dengan menggunakan Azure CLI

k8s-configuration Gunakan ekstensi Azure CLI (atau portal Microsoft Azure) untuk mengaktifkan GitOps di kluster Kubernetes yang didukung 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. Untuk terus memperbarui, repositori bisa mendapatkan perubahan yang melanggar sesekali 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.

Lihat contoh 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 Fluks 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. 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 akan dibersihkan jika dihapus dari repositori atau jika konfigurasi Flux atau kustomisasi dihapus.

microsoft.flux Jika ekstensi belum diinstal di kluster, ekstensi akan diinstal. Ketika konfigurasi fluks diinstal, status kepatuhan awal mungkin "Tertunda" atau "Tidak sesuai" karena rekonsiliasi masih berlangsung. Setelah satu menit Anda dapat mengkueri konfigurasi lagi dan melihat status kepatuhan akhir.

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' extension not found on the cluster, installing it now. This may take a few minutes...
'Microsoft.Flux' extension was successfully installed on the cluster
Creating the flux configuration 'cluster-config' in the cluster. This may take a few minutes...
{
  "complianceState": "Pending",
  ... (not shown because of pending status)
}

Tampilkan konfigurasi setelah mengizinkan waktu untuk menyelesaikan rekonsiliasi.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters
{
  "bucket": null,
  "complianceState": "Compliant",
  "configurationProtectedSettings": {},
  "errorMessage": "",
  "gitRepository": {
    "httpsCaCert": null,
    "httpsUser": null,
    "localAuthRef": null,
    "repositoryRef": {
      "branch": "main",
      "commit": null,
      "semver": null,
      "tag": null
    },
    "sshKnownHosts": null,
    "syncIntervalInSeconds": 600,
    "timeoutInSeconds": 600,
    "url": "https://github.com/Azure/gitops-flux2-kustomize-helm-mt"
  },
  "id": "/subscriptions/REDACTED/resourceGroups/flux-demo-rg/providers/Microsoft.Kubernetes/connectedClusters/flux-demo-arc/providers/Microsoft.KubernetesConfiguration/fluxConfigurations/cluster-config",
  "kustomizations": {
    "apps": {
      "dependsOn": [
        "infra"
      ],
      "force": false,
      "name": "apps",
      "path": "./apps/staging",
      "prune": true,
      "retryIntervalInSeconds": null,
      "syncIntervalInSeconds": 600,
      "timeoutInSeconds": 600
    },
    "infra": {
      "dependsOn": null,
      "force": false,
      "name": "infra",
      "path": "./infrastructure",
      "prune": true,
      "retryIntervalInSeconds": null,
      "syncIntervalInSeconds": 600,
      "timeoutInSeconds": 600
    }
  },
  "name": "cluster-config",
  "namespace": "cluster-config",
  "provisioningState": "Succeeded",
  "repositoryPublicKey": "",
  "resourceGroup": "Flux2-Test-RG-EUS",
  "scope": "cluster",
  "sourceKind": "GitRepository",
  "sourceSyncedCommitId": "main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf",
  "sourceUpdatedAt": "2022-04-06T17:34:03+00:00",
  "statusUpdatedAt": "2022-04-06T17:44:56.417000+00:00",
  "statuses": [
    {
      "appliedBy": null,
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "GitRepository",
      "name": "cluster-config",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:32+00:00",
          "message": "Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf",
          "reason": "GitOperationSucceed",
          "status": "True",
          "type": "Ready"
        }
      ]
    },
    {
      "appliedBy": null,
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "Kustomization",
      "name": "cluster-config-apps",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:44:04+00:00",
          "message": "Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf",
          "reason": "ReconciliationSucceeded",
          "status": "True",
          "type": "Ready"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-apps",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": {
        "failureCount": 0,
        "helmChartRef": {
          "name": "cluster-config-podinfo",
          "namespace": "cluster-config"
        },
        "installFailureCount": 0,
        "lastRevisionApplied": 1,
        "upgradeFailureCount": 0
      },
      "kind": "HelmRelease",
      "name": "podinfo",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:43+00:00",
          "message": "Release reconciliation succeeded",
          "reason": "ReconciliationSucceeded",
          "status": "True",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2022-04-06T17:33:43+00:00",
          "message": "Helm install succeeded",
          "reason": "InstallSucceeded",
          "status": "True",
          "type": "Released"
        }
      ]
    },
    {
      "appliedBy": null,
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "Kustomization",
      "name": "cluster-config-infra",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:43:33+00:00",
          "message": "Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf",
          "reason": "ReconciliationSucceeded",
          "status": "True",
          "type": "Ready"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-infra",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "HelmRepository",
      "name": "bitnami",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:36+00:00",
          "message": "Fetched revision: 46a41610ea410558eb485bcb673fd01c4d1f47b86ad292160b256555b01cce81",
          "reason": "IndexationSucceed",
          "status": "True",
          "type": "Ready"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-infra",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "HelmRepository",
      "name": "podinfo",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:33+00:00",
          "message": "Fetched revision: 421665ba04fab9b275b9830947417b2cebf67764eee46d568c94cf2a95a6341d",
          "reason": "IndexationSucceed",
          "status": "True",
          "type": "Ready"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-infra",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": {
        "failureCount": 0,
        "helmChartRef": {
          "name": "cluster-config-nginx",
          "namespace": "cluster-config"
        },
        "installFailureCount": 0,
        "lastRevisionApplied": 1,
        "upgradeFailureCount": 0
      },
      "kind": "HelmRelease",
      "name": "nginx",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:34:13+00:00",
          "message": "Release reconciliation succeeded",
          "reason": "ReconciliationSucceeded",
          "status": "True",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2022-04-06T17:34:13+00:00",
          "message": "Helm install succeeded",
          "reason": "InstallSucceeded",
          "status": "True",
          "type": "Released"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-infra",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": {
        "failureCount": 0,
        "helmChartRef": {
          "name": "cluster-config-redis",
          "namespace": "cluster-config"
        },
        "installFailureCount": 0,
        "lastRevisionApplied": 1,
        "upgradeFailureCount": 0
      },
      "kind": "HelmRelease",
      "name": "redis",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:57+00:00",
          "message": "Release reconciliation succeeded",
          "reason": "ReconciliationSucceeded",
          "status": "True",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2022-04-06T17:33:57+00:00",
          "message": "Helm install succeeded",
          "reason": "InstallSucceeded",
          "status": "True",
          "type": "Released"
        }
      ]
    },
    {
      "appliedBy": {
        "name": "cluster-config-infra",
        "namespace": "cluster-config"
      },
      "complianceState": "Compliant",
      "helmReleaseProperties": null,
      "kind": "HelmChart",
      "name": "test-chart",
      "namespace": "cluster-config",
      "statusConditions": [
        {
          "lastTransitionTime": "2022-04-06T17:33:40+00:00",
          "message": "Pulled 'redis' chart with version '11.3.4'.",
          "reason": "ChartPullSucceeded",
          "status": "True",
          "type": "Ready"
        }
      ]
    }
  ],
  "suspend": false,
  "systemData": {
    "createdAt": "2022-04-06T17:32:44.646629+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2022-04-06T17:32:44.646629+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/fluxConfigurations"
}

Namespace ini dibuat:

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

Namespace flux-system berisi objek ekstensi Flux:

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

Agen Flux dan pod pengontrol harus dalam keadaan berjalan.

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 Flux.

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
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

Menghapus konfigurasi Flux

Anda dapat menghapus konfigurasi Flux dengan menggunakan perintah berikut. Tindakan ini 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 akan dihapus ketika konfigurasi Fluks dihapus.

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

Untuk kluster AKS, gunakan perintah yang sama tetapi dengan -t managedClustersmengganti -t connectedClusters.

Perhatikan bahwa tindakan ini tidak menghapus ekstensi Fluks.

Menghapus ekstensi kluster Flux

Anda dapat menghapus ekstensi Flux dengan menggunakan CLI atau portal. Tindakan hapus menghapus microsoft.flux sumber daya ekstensi di Azure dan objek ekstensi Flux di kluster.

Jika ekstensi Flux dibuat secara otomatis ketika konfigurasi Fluks pertama kali dibuat, nama ekstensi akan menjadi flux.

Untuk kluster Kubernetes dengan dukungan Azure Arc, gunakan perintah ini:

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

Untuk kluster AKS, gunakan perintah yang sama tetapi dengan -t managedClustersmengganti -t connectedClusters.

Mengontrol pengontrol mana yang disebarkan dengan ekstensi kluster Flux

sourcePengontrol Flux , helm, kustomize, dan notification diinstal secara default. Pengontrol image-automation dan image-reflector harus diaktifkan secara eksplisit. Anda dapat menggunakan CLI untuk membuat pilihan tersebut k8s-extension :

  • --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)

Berikut adalah contoh untuk menyertakan reflektor gambar Fluks dan pengontrol otomatisasi gambar. Jika ekstensi Flux dibuat secara otomatis ketika konfigurasi Fluks pertama kali dibuat, nama ekstensi akan menjadi flux.

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

Panduan orientasi Red Hat OpenShift

Pengontrol fluks memerlukan Batasan Konteks Keamanannonroot untuk menyediakan pod dengan benar pada kluster. Batasan ini harus ditambahkan ke kluster sebelum onboarding 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

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

Anda dapat melihat daftar lengkap parameter yang k8s-configuration flux didukung perintah CLI dengan menggunakan -h parameter :

az k8s-configuration flux -h

Group
    az k8s-configuration flux : Commands to manage Flux v2 Kubernetes configurations.

Subgroups:
    deployed-object : Commands to see deployed objects associated with Flux v2 Kubernetes
                      configurations.
    kustomization   : Commands to manage Kustomizations associated with Flux v2 Kubernetes
                      configurations.

Commands:
    create          : Create a Flux v2 Kubernetes configuration.
    delete          : Delete a Flux v2 Kubernetes configuration.
    list            : List all Flux v2 Kubernetes configurations.
    show            : Show a Flux v2 Kubernetes configuration.
    update          : Update a Flux v2 Kubernetes configuration.

Berikut adalah parameter untuk k8s-configuration flux create perintah CLI:

az k8s-configuration flux create -h

This command is from the following extension: k8s-configuration

Command
    az k8s-configuration flux create : Create a Flux v2 Kubernetes configuration.

Arguments
    --cluster-name -c   [Required] : Name of the Kubernetes cluster.
    --cluster-type -t   [Required] : Specify Arc connected clusters or AKS managed clusters.
                                     Allowed values: connectedClusters, managedClusters.
    --name -n           [Required] : Name of the flux configuration.
    --resource-group -g [Required] : Name of resource group. You can configure the default group
                                     using `az configure --defaults group=<name>`.
    --url -u            [Required] : URL of the source to reconcile.
    --bucket-insecure              : Communicate with a bucket without TLS.  Allowed values: false,
                                     true.
    --bucket-name                  : Name of the S3 bucket to sync.
    --interval --sync-interval     : Time between reconciliations of the source on the cluster.
    --kind                         : Source kind to reconcile.  Allowed values: bucket, git.
                                     Default: git.
    --kustomization -k             : Define kustomizations to sync sources with parameters ['name',
                                     'path', 'depends_on', 'timeout', 'sync_interval',
                                     'retry_interval', 'prune', 'force'].
    --namespace --ns               : Namespace to deploy the configuration.  Default: default.
    --no-wait                      : Do not wait for the long-running operation to finish.
    --scope -s                     : Specify scope of the operator to be 'namespace' or 'cluster'.
                                     Allowed values: cluster, namespace.  Default: cluster.
    --suspend                      : Suspend the reconciliation of the source and kustomizations
                                     associated with this configuration.  Allowed values: false,
                                     true.
    --timeout                      : Maximum time to reconcile the source before timing out.

Auth Arguments
    --local-auth-ref --local-ref   : Local reference to a kubernetes secret in the configuration
                                     namespace to use for communication to the source.

Bucket Auth Arguments
    --bucket-access-key            : Access Key ID used to authenticate with the bucket.
    --bucket-secret-key            : Secret Key used to authenticate with the bucket.

Git Auth Arguments
    --https-ca-cert                : Base64-encoded HTTPS CA certificate for TLS communication with
                                     private repository sync.
    --https-ca-cert-file           : File path to HTTPS CA certificate file for TLS communication
                                     with private repository sync.
    --https-key                    : HTTPS token/password for private repository sync.
    --https-user                   : HTTPS username for private repository sync.
    --known-hosts                  : Base64-encoded known_hosts data containing public SSH keys
                                     required to access private Git instances.
    --known-hosts-file             : File path to known_hosts contents containing public SSH keys
                                     required to access private Git instances.
    --ssh-private-key              : Base64-encoded private ssh key for private repository sync.
    --ssh-private-key-file         : File path to private ssh key for private repository sync.

Git Repo Ref Arguments
    --branch                       : Branch within the git source to reconcile with the cluster.
    --commit                       : Commit within the git source to reconcile with the cluster.
    --semver                       : Semver range within the git source to reconcile with the
                                     cluster.
    --tag                          : Tag within the git source to reconcile with the cluster.

Global Arguments
    --debug                        : Increase logging verbosity to show all debug logs.
    --help -h                      : Show this help message and exit.
    --only-show-errors             : Only show errors, suppressing warnings.
    --output -o                    : Output format.  Allowed values: json, jsonc, none, table, tsv,
                                     yaml, yamlc.  Default: json.
    --query                        : JMESPath query string. See http://jmespath.org/ for more
                                     information and examples.
    --subscription                 : Name or ID of subscription. You can configure the default
                                     subscription using `az account set -s NAME_OR_ID`.
    --verbose                      : Increase logging verbosity. Use --debug for full debug logs.

Examples
    Create a Flux v2 Kubernetes configuration
        az k8s-configuration flux create --resource-group my-resource-group \
        --cluster-name mycluster --cluster-type connectedClusters \
        --name myconfig --scope cluster --namespace my-namespace \
        --kind git --url https://github.com/Azure/arc-k8s-demo \
        --branch main --kustomization name=my-kustomization

    Create a Kubernetes v2 Flux Configuration with Bucket Source Kind
        az k8s-configuration flux create --resource-group my-resource-group \
        --cluster-name mycluster --cluster-type connectedClusters \
        --name myconfig --scope cluster --namespace my-namespace \
        --kind bucket --url https://bucket-provider.minio.io \
        --bucket-name my-bucket --kustomization name=my-kustomization \
        --bucket-access-key my-access-key --bucket-secret-key my-secret-key

Argumen umum konfigurasi

Parameter Format Catatan
--cluster-name -c String Nama sumber daya kluster di Azure.
--cluster-type -t connectedClusters, managedClusters Gunakan connectedClusters untuk kluster Kubernetes dengan dukungan Azure Arc dan managedClusters untuk kluster AKS.
--resource-group -g String Nama grup sumber daya Azure yang menyimpan sumber daya kluster Azure Arc atau AKS.
--name -n String Nama konfigurasi Fluks di Azure.
--namespace --ns String Nama namespace layanan untuk menyebarkan konfigurasi. Default: default.
--scope -s String Cakupan izin untuk operator. Nilai yang mungkin adalah cluster (akses penuh) atau namespace (akses terbatas). Default: cluster.
--suspend bendera Menangguhkan semua sumber dan menyesuaikan rekonsiliasi yang ditentukan dalam konfigurasi Fluks ini. Rekonsiliasi aktif pada saat penangguhan akan berlanjut.

Argumen umum sumber

Parameter Format Catatan
--kind String Jenis sumber untuk direkonsiliasi. Nilai yang diizinkan: bucket, git. Default: git.
--timeout format durasi golang Waktu maksimum untuk mencoba mendamaikan sumber sebelum waktu habis. Default: 10m.
--sync-interval --interval format durasi golang Waktu antara rekonsiliasi sumber pada kluster. Default: 10m.

Argumen referensi sumber repositori Git

Parameter Format Catatan
--branch String Cabang dalam sumber Git untuk disinkronkan ke kluster. Default: master. Repositori yang lebih baru mungkin memiliki cabang akar bernama main, dalam hal ini Anda perlu mengatur --branch=main.
--tag String Tandai dalam sumber Git untuk disinkronkan ke kluster. Contoh: --tag=3.2.0.
--semver String Rentang tag semver Git dalam sumber Git untuk disinkronkan ke kluster. Contoh: --semver=">=3.1.0-rc.1 <3.2.0".
--commit String Git commit SHA dalam sumber Git untuk disinkronkan ke kluster. Contoh: --commit=363a6a8fe6a7f13e05d34c163b0ef02a777da20a.

Untuk informasi selengkapnya, lihat dokumentasi Flux tentang strategi checkout repositori Git.

Repositori Git publik

Parameter Format Catatan
--url -u http[s]://server/repo[.git] URL sumber repositori Git untuk menyesuaikan dengan kluster.

Repositori Git privat dengan kunci yang dibuat SSH dan Fluks

Tambahkan kunci umum yang dihasilkan oleh Flux ke akun pengguna di penyedia layanan Git Anda.

Parameter Format Catatan
--url -u ssh://user@server/repo[.git] git@ harus mengganti user@ jika kunci publik dikaitkan dengan repositori alih-alih akun pengguna.

Repositori Git privat dengan SSH dan kunci yang disediakan pengguna

Gunakan kunci privat Anda sendiri secara langsung atau dari file. Kunci harus dalam format PEM dan diakhbungkan dengan baris baru (\n).

Tambahkan kunci umu terhubung ke akun pengguna di penyedia layanan Git Anda.

Parameter Format Catatan
--url -u ssh://user@server/repo[.git] git@ harus mengganti user@ jika kunci publik dikaitkan dengan repositori alih-alih akun pengguna.
--ssh-private-key Kunci Base64 dalam format PEM Berikan kunci secara langsung.
--ssh-private-key-file Jalur lengkap ke file lokal Berikan jalur lengkap ke file lokal yang berisi kunci format PEM.

Host Git privat dengan SSH dan host yang diketahui disediakan pengguna

Operator Flux mempertahankan daftar host Git umum dalam filenya known_hosts . Flux menggunakan informasi ini untuk mengautentikasi repositori Git sebelum membuat koneksi SSH. Jika Anda menggunakan repositori Git yang tidak biasa atau host Git Anda sendiri, Anda dapat menyediakan kunci host sehingga Flux dapat mengidentifikasi repositori Anda.

Sama seperti kunci privat, Anda dapat menyediakan konten Anda known_hosts secara langsung atau dalam file. Saat Anda menyediakan konten Anda sendiri, gunakan spesifikasi format konten known_hosts, bersama dengan salah satu skenario kunci SSH sebelumnya.

Parameter Format Catatan
--url -u ssh://user@server/repo[.git] git@dapat mengganti .user@
--known-hosts String Base64 Berikan known_hosts konten secara langsung.
--known-hosts-file Jalur lengkap ke file lokal Sediakan known_hosts konten dalam file lokal.

Repositori Git privat dengan pengguna dan kunci HTTPS

Parameter Format Catatan
--url -u https://server/repo [.git] HTTPS dengan Autentikasi Dasar.
--https-user String mentah Nama pengguna HTTPS.
--https-key String mentah Token atau kata sandi akses pribadi HTTPS.

Repositori Git privat dengan sertifikat HTTPS CA

Parameter Format Catatan
--url -u https://server/repo [.git] HTTPS dengan Autentikasi Dasar.
--https-ca-cert String Base64 Sertifikat CA untuk komunikasi TLS.
--https-ca-cert-file Jalur lengkap ke file lokal Berikan konten sertifikat CA dalam file lokal.

Argumen sumber wadah

Jika Anda menggunakan bucket sumber alih-alih git sumber, berikut adalah argumen perintah khusus wadah.

Parameter Format Catatan
--url -u URL String URL untuk bucket. Format yang didukung: http://, https://.
--bucket-name String Nama yang akan disinkronkan bucket .
--bucket-access-key String ID Kunci Akses yang digunakan untuk mengautentikasi dengan bucket.
--bucket-secret-key String Kunci Rahasia yang digunakan untuk mengautentikasi dengan bucket.
--bucket-insecure Boolean Berkomunikasi dengan bucket TLS tanpa. Jika tidak disediakan, diasumsikan false; jika disediakan, diasumsikan true.

Rahasia lokal untuk autentikasi dengan sumber

Anda dapat menggunakan rahasia Kubernetes lokal untuk autentikasi dengan git sumber atau bucket . Rahasia lokal harus berisi semua parameter autentikasi yang diperlukan untuk sumber dan harus dibuat di namespace yang sama dengan konfigurasi Flux.

Parameter Format Catatan
--local-auth-ref --local-ref String Referensi lokal ke rahasia Kubernetes di namespace konfigurasi Flux untuk digunakan untuk autentikasi dengan sumbernya.

Untuk autentikasi HTTPS, Anda membuat rahasia dengan username dan password:

kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-literal=username=<my-username> --from-literal=password=<my-password-or-key>

Untuk autentikasi SSH, Anda membuat rahasia dengan identity bidang dan known_hosts :

kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-file=identity=./id_rsa --from-file=known_hosts=./known_hosts

Untuk kedua kasus, saat Anda membuat konfigurasi Flux, gunakan --local-auth-ref my-custom-secret sebagai pengganti parameter autentikasi lainnya:

az k8s-configuration flux create -g <cluster_resource_group> -c <cluster_name> -n <config_name> -t connectedClusters --scope cluster --namespace flux-config -u <git-repo-url> --kustomization name=kustomization1 --local-auth-ref my-custom-secret

Pelajari selengkapnya tentang menggunakan rahasia Kubernetes lokal dengan metode autentikasi ini:

Catatan

Jika Anda memerlukan Flux untuk mengakses sumber melalui proksi, Anda harus memperbarui agen Azure Arc dengan pengaturan proksi. Untuk informasi selengkapnya, lihat Menyambungkan menggunakan server proksi keluar.

Implementasi Git

Untuk mendukung berbagai penyedia repositori yang mengimplementasikan Git, Flux dapat dikonfigurasi untuk menggunakan salah satu dari dua pustaka Git: go-git atau libgit2. Lihat dokumentasi Flux untuk detailnya.

Implementasi GitOps flux v2 secara otomatis menentukan pustaka mana yang akan digunakan untuk repositori cloud publik:

  • Untuk repositori GitHub, GitLab, dan BitBucket, Flux menggunakan go-git.
  • Untuk Azure DevOps dan semua repositori lainnya, Flux menggunakan libgit2.

Untuk repositori lokal, Flux menggunakan libgit2.

Kustomisasi

Dengan menggunakan az k8s-configuration flux create, Anda dapat membuat satu atau beberapa kustomisasi selama konfigurasi.

Parameter Format Catatan
--kustomization Tidak ada nilai Awal string parameter yang mengonfigurasi kustomisasi. Anda dapat menggunakannya beberapa kali untuk membuat beberapa kustomisasi.
name String Nama unik untuk kustomisasi ini.
path String Jalur dalam repositori Git untuk menyesuaikan dengan kluster. Defaultnya adalah tingkat atas cabang.
prune Boolean Defaultnya adalah false. Atur prune=true untuk memastikan bahwa objek yang Disebarkan Flux ke kluster akan dibersihkan jika dihapus dari repositori atau jika konfigurasi Flux atau kustomisasi dihapus. Penggunaan prune=true penting untuk lingkungan di mana pengguna tidak memiliki akses ke kluster dan hanya dapat membuat perubahan melalui repositori Git.
depends_on String Nama satu atau beberapa kustomisasi (dalam konfigurasi ini) yang harus direkonsiliasi sebelum kustomisasi ini dapat direkonsiliasi. Misalnya: depends_on=["kustomization1","kustomization2"]. Perhatikan bahwa jika Anda menghapus kustomisasi yang memiliki kustomisasi dependen, kustomisasi dependen akan mendapatkan status DependencyNotReady dan rekonsiliasi akan berhenti.
timeout format durasi golang Default: 10m.
sync_interval format durasi golang Default: 10m.
retry_interval format durasi golang Default: 10m.
validation String Nilai: none, client, server. Default: none. Lihat Dokumentasi fluks untuk detailnya.
force Boolean Default: false. Atur force=true untuk menginstruksikan pengontrol kustomisasi untuk membuat ulang sumber daya saat patching gagal karena perubahan bidang yang tidak dapat diubah.

Anda juga dapat menggunakan az k8s-configuration flux kustomization untuk membuat, memperbarui, mencantumkan, menampilkan, dan menghapus kustomisasi dalam konfigurasi Fluks:

az k8s-configuration flux kustomization -h

Group
    az k8s-configuration flux kustomization : Commands to manage Kustomizations associated with Flux
    v2 Kubernetes configurations.

Commands:
    create : Create a Kustomization associated with a Flux v2 Kubernetes configuration.
    delete : Delete a Kustomization associated with a Flux v2 Kubernetes configuration.
    list   : List Kustomizations associated with a Flux v2 Kubernetes configuration.
    show   : Show a Kustomization associated with a Flux v2 Kubernetes configuration.
    update : Update a Kustomization associated with a Flux v2 Kubernetes configuration.

Berikut adalah opsi pembuatan kustomisasi:

az k8s-configuration flux kustomization create -h

This command is from the following extension: k8s-configuration

Command
    az k8s-configuration flux kustomization create : Create a Kustomization associated with a
    Kubernetes Flux v2 Configuration.

Arguments
    --cluster-name -c          [Required] : Name of the Kubernetes cluster.
    --cluster-type -t          [Required] : Specify Arc connected clusters or AKS managed clusters.
                                            Allowed values: connectedClusters, managedClusters.
    --kustomization-name -k    [Required] : Specify the name of the kustomization to target.
    --name -n                  [Required] : Name of the flux configuration.
    --resource-group -g        [Required] : Name of resource group. You can configure the default
                                            group using `az configure --defaults group=<name>`.
    --dependencies --depends --depends-on : Comma-separated list of kustomization dependencies.
    --force                               : Re-create resources that cannot be updated on the
                                            cluster (i.e. jobs).  Allowed values: false, true.
    --interval --sync-interval            : Time between reconciliations of the kustomization on the
                                            cluster.
    --no-wait                             : Do not wait for the long-running operation to finish.
    --path                                : Specify the path in the source that the kustomization
                                            should apply.
    --prune                               : Garbage collect resources deployed by the kustomization
                                            on the cluster.  Allowed values: false, true.
    --retry-interval                      : Time between reconciliations of the kustomization on the
                                            cluster on failures, defaults to --sync-interval.
    --timeout                             : Maximum time to reconcile the kustomization before
                                            timing out.

Global Arguments
    --debug                               : Increase logging verbosity to show all debug logs.
    --help -h                             : Show this help message and exit.
    --only-show-errors                    : Only show errors, suppressing warnings.
    --output -o                           : Output format.  Allowed values: json, jsonc, none,
                                            table, tsv, yaml, yamlc.  Default: json.
    --query                               : JMESPath query string. See http://jmespath.org/ for more
                                            information and examples.
    --subscription                        : Name or ID of subscription. You can configure the
                                            default subscription using `az account set -s
                                            NAME_OR_ID`.
    --verbose                             : Increase logging verbosity. Use --debug for full debug
                                            logs.

Examples
    Create a Kustomization associated with a Kubernetes v2 Flux Configuration
        az k8s-configuration flux kustomization create --resource-group my-resource-group \
        --cluster-name mycluster --cluster-type connectedClusters --name myconfig \
        --kustomization-name my-kustomization-2 --path ./my/path --prune --force

Mengelola konfigurasi GitOps dengan menggunakan portal Microsoft Azure

Portal Microsoft Azure berguna untuk mengelola konfigurasi GitOps dan ekstensi Flux di kluster Kubernetes atau AKS dengan dukungan Azure Arc. Portal menampilkan semua konfigurasi Fluks yang terkait dengan setiap kluster dan memungkinkan pengeboran ke masing-masing kluster.

Portal menyediakan status kepatuhan keseluruhan kluster. Objek Fluks yang telah disebarkan ke kluster juga ditampilkan, bersama dengan parameter penginstalan, status kepatuhan, dan kesalahan apa pun.

Anda juga dapat menggunakan portal untuk membuat, memperbarui, dan menghapus konfigurasi GitOps.

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 menyertakan file kustomize.yaml , tetapi tidak diperlukan.

Untuk detail penggunaan, lihat dokumen berikut ini:

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 dokumen berikut ini:

Tip

Karena bagaimana Helm menangani file indeks, memproses bagan helm adalah operasi yang mahal dan dapat memiliki jejak memori yang sangat tinggi. Akibatnya, rekonsiliasi bagan helm, ketika terjadi secara paralel dapat menyebabkan lonjakan memori dan OOMKilled jika Anda mendamaikan sejumlah besar bagan helm pada waktu tertentu. Secara default, pengontrol sumber menetapkan batas memorinya pada 1Gi dan permintaan memorinya pada 64Mi. Jika Anda perlu meningkatkan batas dan permintaan ini karena tingginya jumlah rekonsiliasi bagan helm besar, Anda dapat melakukannya dengan menjalankan perintah berikut setelah penginstalan 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 menambahkan anotasi ke yaml HelmRelease Anda untuk menunjukkan bahwa sumber yang dikonfigurasi harus digunakan sebagai sumber bagan Helm. Anotasinya adalah clusterconfig.azure.com/use-managed-source: "true", dan berikut adalah contoh penggunaan:

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

Dengan menggunakan anotasi ini, HelmRelease yang disebarkan akan di-patch dengan referensi ke sumber yang dikonfigurasi. Perhatikan bahwa hanya sumber GitRepository yang didukung untuk saat ini.

Multi-tenancy

Flux v2 mendukung multi-penyewaan dalam versi 0.26. Kemampuan ini telah diintegrasikan ke dalam Azure GitOps dengan Flux v2.

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, lakukan tindakan berikut:

  • Tingkatkan ke Kubernetes versi 1.20.6 atau yang lebih tinggi.
  • Dalam manifes Kubernetes Anda pastikan bahwa semua sourceRef adalah objek dalam namespace yang sama dengan konfigurasi GitOps.
    • Jika Anda membutuhkan waktu untuk memperbarui manifes, Anda dapat menolak multi-penyewaan. Namun, Anda masih perlu meningkatkan versi Kubernetes Anda.

Memperbarui manifes untuk multi-penyewaan

Katakanlah kita menyebarkan fluxConfiguration ke salah satu kluster Kubernetes kita di namespace konfigurasi kluster dengan cakupan kluster. Kami mengonfigurasi sumber untuk menyinkronkan https://github.com/fluxcd/flux2-kustomize-helm-example repositori. Ini adalah sampel repositori Git yang sama yang digunakan dalam tutorial sebelumnya dalam dokumen ini. Setelah Flux menyinkronkan repositori, flux akan menyebarkan sumber daya yang dijelaskan dalam manifes (yamls). Dua manifes menjelaskan objek HelmRelease dan HelmRepository.

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 akan menyebarkan fluxConfigurations dengan meniru akun layanan flux-applier yang hanya disebarkan di namespace konfigurasi kluster . Menggunakan manifes di atas, ketika multipenyewa diaktifkan, HelmRelease akan diblokir. Ini karena HelmRelease berada di namespace nginx dan mereferensikan HelmRepository di namespace layanan sistem fluks . Selain itu, flux helm-controller tidak dapat menerapkan HelmRelease, karena tidak ada akun layanan flux-applyr di namespace nginx .

Untuk bekerja dengan multi-penyewaan, pendekatan yang benar adalah menyebarkan semua objek Flux ke dalam namespace yang sama dengan fluxConfigurations. 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 namespace konfigurasi kluster , manifes di atas akan berubah menjadi ini:

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

Menolak multi-penyewaan

microsoft.flux Ketika ekstensi diinstal, multi-penyewaan diaktifkan secara default untuk memastikan keamanan secara default di kluster Anda. Namun, 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".

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>

or

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 telah menggunakan Flux v1 di kluster Kubernetes atau AKS dengan dukungan Azure Arc dan ingin bermigrasi menggunakan Flux v2 di kluster yang sama, Pertama-tama Anda perlu menghapus Flux v1 sourceControlConfigurations dari kluster. microsoft.flux Ekstensi kluster tidak akan diinstal jika ada sumber daya Flux v1 yang sourceControlConfigurations diinstal di kluster.

Gunakan perintah CLI az ini untuk menemukan lalu menghapus yang ada sourceControlConfigurations dalam kluster:

az k8s-configuration list --cluster-name <Arc or AKS cluster name> --cluster-type <connectedClusters OR managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <Arc or AKS cluster name> --cluster-type <connectedClusters OR managedClusters> --resource-group <resource group name>

Anda juga dapat menggunakan portal Microsoft Azure untuk melihat dan menghapus konfigurasi GitOps di kluster Kube atau AKS dengan dukungan Azure Arc.

Informasi umum tentang migrasi dari Flux v1 ke Flux v2 tersedia dalam proyek fluxcd: Migrasi dari Flux v1 ke v2.

Langkah berikutnya

Lanjutkan ke tutorial berikutnya untuk mempelajari cara mengimplementasikan CI/CD dengan GitOps.