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
Kluster terhubung Kubernetes dengan dukungan Azure Arc yang aktif dan berjalan.
Pelajari cara menyambungkan kluster Kubernetes ke Azure Arc. Jika Anda perlu terhubung melalui proksi keluar, pastikan Anda menginstal agen Arc dengan pengaturan proksi.
Izin baca dan tulis pada jenis sumber daya
Microsoft.Kubernetes/connectedClusters.
Untuk kluster Azure Kubernetes Service
Kluster AKS berbasis MSI yang aktif dan berjalan.
Penting
Pastikan kluster AKS dibuat dengan MSI (bukan SPN), karena
microsoft.fluxekstensi 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-ExtensionManagerbendera 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 upgradePendaftaran 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.KubernetesConfigurationPendaftaran 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 menggunakannamespacecakupan dengan tutorial ini, lihat perubahan yang diperlukan. - Dua kustomisasi ditentukan dengan nama
infradanapps. Masing-masing dikaitkan dengan jalur di repositori. - Kustomisasi
appstergantung padainfrakustomisasi. (Kustomisasiinfraharus selesai sebelumappskustomisasi berjalan.) - Atur
prune=truepada 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>(defaulttrue)--config helm-controller.enabled=<true/false>(defaulttrue)--config kustomize-controller.enabled=<true/false>(defaulttrue)--config notification-controller.enabled=<true/false>(defaulttrue)--config image-automation-controller.enabled=<true/false>(defaultfalse)--config image-reflector-controller.enabled=<true/false>(defaultfalse)
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:
- Autentikasi HTTPS repositori Git
- Sertifikat yang ditandatangani sendiri HTTPS repositori Git
- Autentikasi SSH repositori Git
- Autentikasi statis wadah
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:
- Pengontrol Flux Kustomize
- Kustomisasi dokumen referensi
- File kustomisasi
- Kustomisasi proyek
- Kustomisasi panduan
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:
- Fluks untuk pengguna Helm
- Mengelola rilis Helm
- Migrasi ke Flux v2 Helm dari Flux v1 Helm
- Pengontrol Flux Helm
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.