Självstudie: Distribuera konfigurationer med GitOps i ett Azure Arc-aktiverat Kubernetes-kluster
Viktigt!
Den här självstudien är avsedd för GitOps med Flux v1. GitOps med Flux v2 är nu tillgängligt för Azure Arc-aktiverade Kubernetes- och Azure Kubernetes Service-kluster (AKS). gå till självstudien för GitOps med Flux v2. Vi rekommenderar att du migrerar till Flux v2 så snart som möjligt.
Stöd för Flux v1-baserade klusterkonfigurationsresurser som skapats före den 1 januari 2024 upphör den 24 maj 2025. Från och med den 1 januari 2024 kan du inte skapa nya Flux v1-baserade klusterkonfigurationsresurser.
I den här självstudien använder du Flux v1-konfigurationer med GitOps på ett Azure Arc-aktiverat Kubernetes-kluster. Du lär dig att:
- Skapa en konfiguration i ett Azure Arc-aktiverat Kubernetes-kluster med hjälp av en git-exempellagringsplats.
- Kontrollera att konfigurationen har skapats.
- Tillämpa konfigurationen från en privat Git-lagringsplats.
- Verifiera Kubernetes-konfigurationen.
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Ett befintligt Azure Arc-aktiverat Kubernetes-anslutet kluster.
En förståelse för fördelarna och arkitekturen för den här funktionen. Läs mer i artikeln Konfigurationer och GitOps – Azure Arc-aktiverade Kubernetes.
Installera Azure CLI-tillägget
k8s-configuration
för version >= 1.0.0:az extension add --name k8s-configuration
Dricks
k8s-configuration
Om tillägget redan är installerat kan du uppdatera det till den senaste versionen med hjälp av följande kommando -az extension update --name k8s-configuration
Skapa en konfiguration
Exempellagringsplatsen som används i den här artikeln är strukturerad kring en klusteroperators persona. Manifesten på den här lagringsplatsen etablerar några namnområden, distribuerar arbetsbelastningar och tillhandahåller viss teamspecifik konfiguration. Med den här lagringsplatsen med GitOps skapas följande resurser i klustret:
- Namnområden:
cluster-config
,team-a
,team-b
- Utplacering:
arc-k8s-demo
- ConfigMap:
team-a/endpoints
Avsöker config-agent
Azure efter nya eller uppdaterade konfigurationer. Den här uppgiften tar upp till 5 minuter.
Om du associerar en privat lagringsplats med konfigurationen slutför du stegen nedan i Tillämpa konfiguration från en privat Git-lagringsplats.
Viktigt!
Den här självstudien är avsedd för GitOps med Flux v1. GitOps med Flux v2 är nu tillgängligt för Azure Arc-aktiverade Kubernetes- och Azure Kubernetes Service-kluster (AKS). gå till självstudien för GitOps med Flux v2. Vi rekommenderar att du migrerar till Flux v2 så snart som möjligt.
Stöd för Flux v1-baserade klusterkonfigurationsresurser som skapats före den 1 januari 2024 upphör den 24 maj 2025. Från och med den 1 januari 2024 kan du inte skapa nya Flux v1-baserade klusterkonfigurationsresurser.
Använda Azure CLI
Använd Azure CLI-tillägget för för k8s-configuration
att länka ett anslutet kluster till git-exempellagringsplatsen.
Namnge den här konfigurationen
cluster-config
.Instruera agenten att distribuera operatorn i
cluster-config
namnområdet.Ge operatorbehörigheter
cluster-admin
.az k8s-configuration flux create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
{ "complianceStatus": { "complianceState": "Pending", "lastConfigApplied": "0001-01-01T00:00:00", "message": "{\"OperatorMessage\":null,\"ClusterState\":null}", "messageLevel": "3" }, "configurationProtectedSettings": {}, "enableHelmOperator": false, "helmOperatorProperties": null, "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config", "name": "cluster-config", "operatorInstanceName": "cluster-config", "operatorNamespace": "cluster-config", "operatorParams": "--git-readonly", "operatorScope": "cluster", "operatorType": "Flux", "provisioningState": "Succeeded", "repositoryPublicKey": "", "repositoryUrl": "https://github.com/Azure/arc-k8s-demo", "resourceGroup": "MyRG", "sshKnownHostsContents": "", "systemData": { "createdAt": "2020-11-24T21:22:01.542801+00:00", "createdBy": null, "createdByType": null, "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00", "lastModifiedBy": null, "lastModifiedByType": null }, "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" }
Använda en offentlig Git-lagringsplats
Parameter | Format |
---|---|
--repository-url |
http[s]://server/repo[.git] |
Använda en privat Git-lagringsplats med SSH och Flux-skapade nycklar
Lägg till den offentliga nyckel som genereras av Flux till användarkontot i din Git-tjänstleverantör. Om nyckeln läggs till på lagringsplatsen i stället för användarkontot använder du git@
i stället för user@
i URL:en.
Gå till avsnittet Tillämpa konfiguration från en privat Git-lagringsplats för mer information.
Parameter | Format | Anteckningar |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] eller user@server:repo[.git] | git@ kan ersätta user@ |
Använda en privat Git-lagringsplats med SSH och användartillhandahållna nycklar
Ange din egen privata nyckel direkt eller i en fil. Nyckeln måste vara i PEM-format och sluta med newline (\n).
Lägg till den associerade offentliga nyckeln till användarkontot i din Git-tjänstleverantör. Om nyckeln läggs till i lagringsplatsen i stället för användarkontot använder du git@
i stället för user@
.
Gå till avsnittet Tillämpa konfiguration från en privat Git-lagringsplats för mer information.
Parameter | Format | Anteckningar |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] eller user@server:repo[.git] | git@ kan ersätta user@ |
--ssh-private-key |
base64-kodad nyckel i PEM-format | Ange nyckel direkt |
--ssh-private-key-file |
fullständig sökväg till lokal fil | Ange en fullständig sökväg till en lokal fil som innehåller PEM-formatnyckeln |
Använda en privat Git-värd med SSH och kända användartillhandahållna värdar
Flux-operatorn upprätthåller en lista över vanliga Git-värdar i sin kända värdfil för att autentisera Git-lagringsplatsen innan SSH-anslutningen upprättas. Om du använder en ovanlig Git-lagringsplats eller en egen Git-värd kan du ange värdnyckeln så att Flux kan identifiera din lagringsplats.
Precis som med privata nycklar kan du ange ditt known_hosts innehåll direkt eller i en fil. När du tillhandahåller ditt eget innehåll använder du specifikationerna för known_hosts innehållsformat, tillsammans med något av SSH-nyckelscenarierna ovan.
Parameter | Format | Anteckningar |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] eller user@server:repo[.git] | git@ kan ersätta user@ |
--ssh-known-hosts |
base64-kodad | Ange känt värdinnehåll direkt |
--ssh-known-hosts-file |
fullständig sökväg till lokal fil | Ange känt värdinnehåll i en lokal fil |
Använda en privat Git-lagringsplats med HTTPS
Parameter | Format | Anteckningar |
---|---|---|
--repository-url |
https://server/repo[.git] | HTTPS med grundläggande autentisering |
--https-user |
raw eller base64-kodad | HTTPS-användarnamn |
--https-key |
raw eller base64-kodad | PERSONLIG HTTPS-åtkomsttoken eller lösenord |
Kommentar
- Helm-operatordiagram version 1.2.0+ stöder privat autentisering av HTTPS Helm-versionen.
- HTTPS Helm-versionen stöds inte för AKS-hanterade kluster.
- Om du behöver Flux för att komma åt Git-lagringsplatsen via proxyn måste du uppdatera Azure Arc-agenterna med proxyinställningarna. Mer information finns i Ansluta med en utgående proxyserver.
Ytterligare parametrar
Anpassa konfigurationen med följande valfria parametrar:
Parameter | Description |
---|---|
--enable-helm-operator |
Växla för att aktivera stöd för Helm-diagramdistributioner. |
--helm-operator-params |
Diagramvärden för Helm-operatorn (om det är aktiverat). Exempel: --set helm.versions=v3 |
--helm-operator-chart-version |
Diagramversion för Helm-operatorn (om den är aktiverad). Använd version 1.2.0+. Standard: '1.2.0'. |
--operator-namespace |
Namn på operatornamnområdet. Standard: "default". Max: 23 tecken. |
--operator-params |
Parametrar för operatorn. Måste anges inom enkla citattecken. Till exempel: --operator-params='--git-readonly --sync-garbage-collection --git-branch=main' |
Alternativ som stöds i --operator-params
:
Alternativ | Description |
---|---|
--git-branch |
Grenen av Git-lagringsplatsen som ska användas för Kubernetes-manifest. Standardvärdet är "master". Nyare lagringsplatser har rotgrenen med namnet main , i vilket fall du måste ange --git-branch=main . |
--git-path |
Relativ sökväg i Git-lagringsplatsen för Flux för att hitta Kubernetes-manifest. |
--git-readonly |
Git-lagringsplatsen betraktas som skrivskyddad. Flux försöker inte skriva till den. |
--manifest-generation |
Om det är aktiverat letar Flux efter .flux.yaml och kör Kustomize eller andra manifestgeneratorer. |
--git-poll-interval |
Period då Git-lagringsplatsen ska avsökas efter nya incheckningar. Standardvärdet är 5m (5 minuter). |
--sync-garbage-collection |
Om det är aktiverat tar Flux bort resurser som skapats, men som inte längre finns i Git. |
--git-label |
Etikett för att hålla reda på synkroniseringens förlopp. Används för att tagga Git-grenen. Standard är flux-sync . |
--git-user |
Användarnamn för Git-incheckning. |
--git-email |
E-post som ska användas för Git-incheckning. |
Om du inte vill att Flux ska skriva till lagringsplatsen och --git-user
--git-email
inte har angetts, ställs den --git-readonly
in automatiskt.
Mer information finns i Flux-dokumentationen.
Kommentar
Flux synkroniseras som standard från grenen master
av git-lagringsplatsen. Nyare git-lagringsplatser har dock rotgrenen med namnet main
, i vilket fall du måste ange --git-branch=main
i --operator-params.
Dricks
Du kan skapa en konfiguration i Azure Portal på fliken GitOps i Den Azure Arc-aktiverade Kubernetes-resursen.
Verifiera konfigurationen
Använd Azure CLI för att verifiera att konfigurationen har skapats.
az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Konfigurationsresursen uppdateras med efterlevnadsstatus, meddelanden och felsökningsinformation.
{
"complianceStatus": {
"complianceState": "Installed",
"lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
"message": "...",
"messageLevel": "Information"
},
"configurationProtectedSettings": {},
"enableHelmOperator": false,
"helmOperatorProperties": {
"chartValues": "",
"chartVersion": ""
},
"id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
"name": "cluster-config",
"operatorInstanceName": "cluster-config",
"operatorNamespace": "cluster-config",
"operatorParams": "--git-readonly",
"operatorScope": "cluster",
"operatorType": "Flux",
"provisioningState": "Succeeded",
"repositoryPublicKey": "...",
"repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
"resourceGroup": "AzureArcTest",
"sshKnownHostsContents": null,
"systemData": {
"createdAt": "2020-12-01T03:58:56.175674+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}
När en konfiguration skapas eller uppdateras händer några saker:
- Azure Arc
config-agent
övervakar Azure Resource Manager för nya eller uppdaterade konfigurationer (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) och märker den nyaPending
konfigurationen. - Läser
config-agent
konfigurationsegenskaperna och skapar målnamnområdet. - Azure Arc
controller-manager
skapar ett Kubernetes-tjänstkonto och mappar det till ClusterRoleBinding eller RoleBinding för lämpliga behörigheter (cluster
ellernamespace
omfång). Sedan distribueras en instans avflux
. - Om du använder alternativet SSH med Flux-genererade nycklar
flux
genererar du en SSH-nyckel och loggar den offentliga nyckeln. - Rapporterar
config-agent
status tillbaka till konfigurationsresursen i Azure.
Medan etableringsprocessen sker går konfigurationsresursen igenom några tillståndsändringar. Övervaka förloppet med az k8s-configuration show ...
kommandot ovan:
Fasändring | beskrivning |
---|---|
complianceStatus ->Pending |
Representerar de inledande och pågående tillstånden. |
complianceStatus ->Installed |
config-agent har konfigurerat klustret och distribuerats flux utan fel. |
complianceStatus ->Failed |
config-agent stötte på ett fel när du distribuerade flux . Information finns i complianceStatus.message svarstexten. |
Tillämpa konfiguration från en privat Git-lagringsplats
Om du använder en privat Git-lagringsplats måste du konfigurera den offentliga SSH-nyckeln på lagringsplatsen. Antingen anger du eller flux genererar den offentliga SSH-nyckeln. Du kan konfigurera den offentliga nyckeln antingen på den specifika Git-lagringsplatsen eller på den Git-användare som har åtkomst till lagringsplatsen.
Hämta en egen offentlig nyckel
Om du genererade dina egna SSH-nycklar har du redan de privata och offentliga nycklarna.
Hämta den offentliga nyckeln med hjälp av Azure CLI
Använd följande i Azure CLI om Flux genererar nycklarna.
az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey'
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"
Hämta den offentliga nyckeln från Azure-portalen
Gå igenom följande i Azure Portal om Flux genererar nycklarna.
- I Azure-portalen går du till den anslutna klusterresursen.
- På resurssidan väljer du "GitOps" och ser listan med konfigurationer för det här klustret.
- Välj den konfiguration som använder den privata Git-lagringsplatsen.
- I kontextfönstret som öppnas kopierar du den offentliga nyckeln för lagringsplatsen längst ned i fönstret.
Lägga till offentlig nyckel med GitHub
Välj ett av följande alternativ:
Alternativ 1: Lägg till den offentliga nyckeln i ditt användarkonto (gäller för alla lagringsplatser i ditt konto):
- Öppna GitHub och klicka på profilikonen längst upp till höger på sidan.
- Klicka på Inställningar.
- Klicka på SSH- och GPG-nycklar.
- Klicka på Ny SSH-nyckel.
- Ange en rubrik.
- Klistra in den offentliga nyckeln utan några omgivande citattecken.
- Klicka på Lägg till SSH-nyckel.
Alternativ 2: Lägg till den offentliga nyckeln som en distributionsnyckel till Git-lagringsplatsen (gäller endast för den här lagringsplatsen):
- Öppna GitHub och gå till din lagringsplats.
- Klicka på Inställningar.
- Klicka på Distribuera nycklar.
- Klicka på Lägg till distributionsnyckel.
- Ange en rubrik.
- Markera Tillåt skrivåtkomst.
- Klistra in den offentliga nyckeln utan några omgivande citattecken.
- Klicka på Lägg till nyckel.
Lägga till offentlig nyckel med hjälp av en Azure DevOps-lagringsplats
Använd följande steg för att lägga till nyckeln till dina SSH-nycklar:
- Under Användarinställningar längst upp till höger (bredvid profilbilden) klickar du på offentliga SSH-nycklar.
- Välj + Ny nyckel.
- Ange ett namn.
- Klistra in den offentliga nyckeln utan några omgivande citattecken.
- Klicka på Lägg till.
Verifiera Kubernetes-konfigurationen
När config-agent
du har installerat instansen flux
bör resurser som finns på Git-lagringsplatsen börja flöda till klustret. Kontrollera att namnrymder, distributioner och resurser har skapats med följande kommando:
kubectl get ns --show-labels
NAME STATUS AGE LABELS
azure-arc Active 24h <none>
cluster-config Active 177m <none>
default Active 29h <none>
itops Active 177m fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease Active 29h <none>
kube-public Active 29h <none>
kube-system Active 29h <none>
team-a Active 177m fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b Active 177m fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b
Vi kan se att team-a
namnrymderna , team-b
, itops
och cluster-config
har skapats.
Operatorn flux
har distribuerats till cluster-config
namnområdet enligt konfigurationsresursens anvisningar:
kubectl -n cluster-config get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
cluster-config 1/1 1 1 3h flux docker.io/fluxcd/flux:1.16.0 instanceName=cluster-config,name=flux
memcached 1/1 1 1 3h memcached memcached:1.5.15 name=memcached
Ytterligare utforskning
Du kan utforska de andra resurser som distribueras som en del av konfigurationslagringsplatsen med hjälp av:
kubectl -n team-a get cm -o yaml
kubectl -n itops get all
Rensa resurser
Ta bort en konfiguration med hjälp av Azure CLI eller Azure Portal. När du har kört borttagningskommandot tas konfigurationsresursen bort omedelbart i Azure. Fullständig borttagning av associerade objekt från klustret bör ske inom 10 minuter. Om konfigurationen är i ett feltillstånd när den tas bort kan det ta upp till en timme att ta bort alla associerade objekt.
När en konfiguration med namespace
omfång tas bort tas inte namnområdet bort av Azure Arc för att undvika att befintliga arbetsbelastningar bryts. Om det behövs kan du ta bort det här namnområdet manuellt med hjälp av kubectl
.
az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Kommentar
Ändringar i klustret som var resultatet av distributioner från den spårade Git-lagringsplatsen tas inte bort när konfigurationen tas bort.
Viktigt!
Den här självstudien är avsedd för GitOps med Flux v1. GitOps med Flux v2 är nu tillgängligt för Azure Arc-aktiverade Kubernetes- och Azure Kubernetes Service-kluster (AKS). gå till självstudien för GitOps med Flux v2. Vi rekommenderar att du migrerar till Flux v2 så snart som möjligt.
Stöd för Flux v1-baserade klusterkonfigurationsresurser som skapats före den 1 januari 2024 upphör den 24 maj 2025. Från och med den 1 januari 2024 kan du inte skapa nya Flux v1-baserade klusterkonfigurationsresurser.
Nästa steg
Gå vidare till nästa självstudie för att lära dig hur du implementerar CI/CD med GitOps.