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 1 januari 2024 kan du inte skapa nya Flux v1-baserade klusterkonfigurationsresurser.

I den här självstudien ska du tillämpa konfigurationer med GitOps på ett Azure Arc-aktiverat Kubernetes-kluster. Du lär dig följande:

  • Skapa en konfiguration i ett Azure Arc-aktiverat Kubernetes-kluster med hjälp av en Git-lagringsplats som exempel.
  • Kontrollera att konfigurationen har skapats.
  • Tillämpa konfigurationen från en privat Git-lagringsplats.
  • Verifiera Kubernetes-konfigurationen.

Förutsättningar

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 namnrymder, distribuerar arbetsbelastningar och tillhandahåller viss teamspecifik konfiguration. När du använder den här lagringsplatsen med GitOps skapas följande resurser i klustret:

  • Namnområden: cluster-config, team-a, team-b
  • Distribution: 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.

Använda Azure CLI

Använd Azure CLI-tillägget för för att k8s-configuration länka ett anslutet kluster till git-exempellagringsplatsen.

  1. Ge den här konfigurationen cluster-confignamnet .

  2. Instruera agenten att distribuera operatorn i cluster-config namnområdet.

  3. Ge operatören cluster-admin behörigheter.

    az k8s-configuration 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 i lagringsplatsen i stället för användarkontot använder git@ du 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 Kommentarer
--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 ny rad (\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 Kommentarer
--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 Kommentarer
--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 Kommentarer
--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

Anteckning

  • Helm-operatordiagram version 1.2.0+ har stöd för privat HTTPS Helm-version.
  • 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 Beskrivning
--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). Till 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å operatorns namnområde. 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 Beskrivning
--git-branch Gren av Git-lagringsplatsen som ska användas för Kubernetes-manifest. Standardvärdet är "master". Nyare lagringsplatser har rotgrenen med namnet main, i så fall måste du 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. Standardvärdet är flux-sync.
--git-user Användarnamn för Git-incheckning.
--git-email Email att använda för Git-incheckning.

Om du inte vill att Flux ska skriva till lagringsplatsen och --git-user--git-email inte har angetts, --git-readonly ställs in automatiskt.

Mer information finns i Flux-dokumentationen.

Anteckning

Flux synkroniserar som standard från grenen master av git-lagringsplatsen. Nyare git-lagringsplatser har dock rotgrenen med namnet main, i så fall måste du ange --git-branch=main i --operator-params.

Tips

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:

  1. Azure Arc config-agent övervakar Azure Resource Manager för nya eller uppdaterade konfigurationer (Microsoft.KubernetesConfiguration/sourceControlConfigurations) och ser den nya Pending konfigurationen.
  2. Läser config-agent konfigurationsegenskaperna och skapar målnamnområdet.
  3. Azure Arc controller-manager skapar ett Kubernetes-tjänstkonto och mappar det till ClusterRoleBinding eller RoleBinding för lämpliga behörigheter (cluster eller namespace omfång). Den distribuerar sedan en instans av flux.
  4. Om du använder alternativet SSH med fluxgenererade nycklar flux genererar du en SSH-nyckel och loggar den offentliga nyckeln.
  5. 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 Description
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 vid distribution av 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 så genererar Flux 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.

  1. I Azure-portalen går du till den anslutna klusterresursen.
  2. På resurssidan väljer du "GitOps" och ser listan över konfigurationer för det här klustret.
  3. Välj den konfiguration som använder den privata Git-lagringsplatsen.
  4. 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):

    1. Öppna GitHub och klicka på profilikonen längst upp till höger på sidan.
    2. Klicka på Inställningar.
    3. Klicka på SSH- och GPG-nycklar.
    4. Klicka på Ny SSH-nyckel.
    5. Ange en rubrik.
    6. Klistra in den offentliga nyckeln utan några omgivande citattecken.
    7. 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):

    1. Öppna GitHub och gå till din lagringsplats.
    2. Klicka på Inställningar.
    3. Klicka på Distribuera nycklar.
    4. Klicka på Lägg till distributionsnyckel.
    5. Ange en rubrik.
    6. Markera Tillåt skrivåtkomst.
    7. Klistra in den offentliga nyckeln utan några omgivande citattecken.
    8. 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:

  1. Under Användarinställningar längst upp till höger (bredvid profilbilden) klickar du på offentliga SSH-nycklar.
  2. Välj + Ny nyckel.
  3. Ange ett namn.
  4. Klistra in den offentliga nyckeln utan några omgivande citattecken.
  5. Klicka på Lägg till.

Verifiera Kubernetes-konfigurationen

När config-agent har installerat instansen flux bör resurser som lagras på Git-lagringsplatsen börja flöda till klustret. Kontrollera att namnrymderna, distributionerna och resurserna 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-anamnrymderna , team-b, itopsoch 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 resurserna 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

Anteckning

Ändringar i klustret som var resultatet av distributioner från den spårade Git-lagringsplatsen tas inte bort när konfigurationen tas bort.

Nästa steg

Gå vidare till nästa självstudie och lär dig hur du implementerar CI/CD med GitOps.