Zelfstudie: Configuraties implementeren met behulp van GitOps in een Kubernetes-cluster met Azure Arc

Belangrijk

Deze zelfstudie is bedoeld voor GitOps met Flux v1. GitOps met Flux v2 is nu beschikbaar voor Kubernetes- en Azure Kubernetes Service-clusters (AKS) met Azure Arc; ga naar de zelfstudie voor GitOps met Flux v2. U wordt aangeraden zo snel mogelijk te migreren naar Flux v2 .

Ondersteuning voor clusterconfiguratieresources op basis van Flux v1 die vóór 1 januari 2024 zijn gemaakt, eindigt op 24 mei 2025. Vanaf 1 januari 2024 kunt u geen nieuwe clusterconfiguratieresources op basis van Flux v1 maken.

In deze zelfstudie past u configuraties toe met behulp van GitOps op een Kubernetes-cluster met Azure Arc. U leert het volgende:

  • Maak een configuratie in een Kubernetes-cluster met Azure Arc met behulp van een voorbeeld van een Git-opslagplaats.
  • Controleer of de configuratie is gemaakt.
  • Configuratie toepassen vanuit een persoonlijke Git-opslagplaats.
  • Valideer de Kubernetes-configuratie.

Vereisten

  • Een Azure-account met een actief abonnement. Gratis een account maken

  • Een bestaand Kubernetes-verbonden cluster met Azure Arc.

  • Inzicht in de voordelen en architectuur van deze functie. Lees meer in het artikel Configuraties en GitOps - Kubernetes met Azure Arc.

  • Installeer de k8s-configuration Azure CLI-extensie van versie >= 1.0.0:

    az extension add --name k8s-configuration
    

    Tip

    Als de k8s-configuration extensie al is geïnstalleerd, kunt u deze bijwerken naar de nieuwste versie met behulp van de volgende opdracht : az extension update --name k8s-configuration

Een configuratie maken

De voorbeeldopslagplaats die in dit artikel wordt gebruikt, is gestructureerd rond de persona van een clusteroperator. De manifesten in deze opslagplaats richten enkele naamruimten in, implementeren workloads en bieden een teamspecifieke configuratie. Als u deze opslagplaats gebruikt met GitOps, maakt u de volgende resources in uw cluster:

  • Naamruimten: cluster-config, team-a, team-b
  • Implementatie: arc-k8s-demo
  • ConfigMap: team-a/endpoints

De config-agent vraagt Azure om nieuwe of bijgewerkte configuraties. Deze taak duurt maximaal 5 minuten.

Als u een privéopslagplaats aan de configuratie wilt koppelen, voert u de onderstaande stappen uit in Configuratie toepassen vanuit een privé-Git-opslagplaats.

Azure CLI gebruiken

Gebruik de Azure CLI-extensie voor k8s-configuration om een verbonden cluster te koppelen aan de voorbeeld-Git-opslagplaats.

  1. Geef deze configuratie cluster-configde naam .

  2. Geef de agent de opdracht om de operator in de cluster-config naamruimte te implementeren.

  3. Geef de operator cluster-admin machtigingen.

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

Een openbare Git-opslagplaats gebruiken

Parameter Indeling
--repository-url http[s]://server/repo[.git]

Een privé-Git-opslagplaats gebruiken met door SSH en Flux gemaakte sleutels

Voeg de openbare sleutel die door Flux wordt gegenereerd toe aan het gebruikersaccount in uw Git-serviceprovider. Als de sleutel wordt toegevoegd aan de opslagplaats in plaats van het gebruikersaccount, gebruikt git@ u in plaats van user@ in de URL.

Ga naar de sectie Configuratie toepassen vanuit een privé-Git-opslagplaats voor meer informatie.

Parameter Indeling Notities
--repository-url ssh://user@server/repo[.git] of user@server:repo[.git] git@ kan vervangen user@

Een privé-Git-opslagplaats gebruiken met SSH en door de gebruiker verstrekte sleutels

Geef uw eigen persoonlijke sleutel rechtstreeks of in een bestand op. De sleutel moet de PEM-indeling hebben en eindigen op newline (\n).

Voeg de bijbehorende openbare sleutel toe aan het gebruikersaccount in uw Git-serviceprovider. Als de sleutel wordt toegevoegd aan de opslagplaats in plaats van het gebruikersaccount, gebruikt git@ u in plaats van user@.

Ga naar de sectie Configuratie toepassen vanuit een privé-Git-opslagplaats voor meer informatie.

Parameter Indeling Notities
--repository-url ssh://user@server/repo[.git] of user@server:repo[.git] git@ kan vervangen user@
--ssh-private-key Base64-gecodeerde sleutel in PEM-indeling Sleutel rechtstreeks opgeven
--ssh-private-key-file volledig pad naar lokaal bestand Geef het volledige pad op naar het lokale bestand dat de SLEUTEL in PEM-indeling bevat

Een privé-Git-host gebruiken met SSH en door de gebruiker verstrekte bekende hosts

De Flux-operator houdt een lijst bij met veelvoorkomende Git-hosts in het bestand met bekende hosts om de Git-opslagplaats te verifiëren voordat de SSH-verbinding tot stand wordt gebracht. Als u een ongebruikelijke Git-opslagplaats of uw eigen Git-host gebruikt, kunt u de hostsleutel opgeven, zodat Flux uw opslagplaats kan identificeren.

Net als bij persoonlijke sleutels kunt u uw known_hosts inhoud rechtstreeks of in een bestand opgeven. Gebruik bij het opgeven van uw eigen inhoud de specificaties voor known_hosts inhoudsindeling, samen met een van de bovenstaande SSH-sleutelscenario's.

Parameter Indeling Notities
--repository-url ssh://user@server/repo[.git] of user@server:repo[.git] git@ kan vervangen user@
--ssh-known-hosts base64-gecodeerd Geef rechtstreeks inhoud van bekende hosts op
--ssh-known-hosts-file volledig pad naar lokaal bestand Bekende hosts-inhoud opgeven in een lokaal bestand

Een privé-Git-opslagplaats met HTTPS gebruiken

Parameter Indeling Notities
--repository-url https://server/repo[.git] HTTPS met basisverificatie
--https-user onbewerkte of base64-gecodeerde HTTPS-gebruikersnaam
--https-key onbewerkte of base64-gecodeerde Persoonlijk HTTPS-toegangstoken of -wachtwoord

Notitie

  • Helm-operatorgrafiek versie 1.2.0+ ondersteunt de persoonlijke verificatie van de HTTPS Helm-release.
  • HTTPS Helm-release wordt niet ondersteund voor beheerde AKS-clusters.
  • Als u Flux nodig hebt om toegang te krijgen tot de Git-opslagplaats via uw proxy, moet u de Azure Arc-agents bijwerken met de proxy-instellingen. Zie Verbinding maken met een uitgaande proxyserver voor meer informatie.

Aanvullende parameters

Pas de configuratie aan met de volgende optionele parameters:

Parameter Beschrijving
--enable-helm-operator Schakel over om ondersteuning voor Helm-grafiekimplementaties in te schakelen.
--helm-operator-params Grafiekwaarden voor helm-operator (indien ingeschakeld). Bijvoorbeeld --set helm.versions=v3.
--helm-operator-chart-version Grafiekversie voor Helm-operator (indien ingeschakeld). Gebruik versie 1.2.0+. Standaardinstelling: '1.2.0'.
--operator-namespace Naam voor de operatornaamruimte. Standaardinstelling: 'default'. Max: 23 tekens.
--operator-params Parameters voor operator. Moet tussen enkele aanhalingstekens worden opgegeven. Bijvoorbeeld: --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'

Opties die worden ondersteund in --operator-params:

Optie Beschrijving
--git-branch Vertakking van Git-opslagplaats die moet worden gebruikt voor Kubernetes-manifesten. De standaardwaarde is 'master'. Nieuwere opslagplaatsen hebben een hoofdbranch met de naam main. In dat geval moet u instellen --git-branch=main.
--git-path Relatief pad binnen de Git-opslagplaats voor Flux om Kubernetes-manifesten te vinden.
--git-readonly Git-opslagplaats wordt beschouwd als alleen-lezen. Flux probeert er niet naar te schrijven.
--manifest-generation Als deze optie is ingeschakeld, zoekt Flux naar .flux.yaml en voert u Kustomize of andere manifestgeneratoren uit.
--git-poll-interval Periode waarin de Git-opslagplaats moet worden gecontroleerd op nieuwe doorvoeringen. De standaardwaarde is 5m (5 minuten).
--sync-garbage-collection Als deze optie is ingeschakeld, verwijdert Flux resources die het heeft gemaakt, maar die niet meer aanwezig zijn in Git.
--git-label Label om de voortgang van de synchronisatie bij te houden. Wordt gebruikt om de Git-vertakking te taggen. De standaardinstelling is flux-sync.
--git-user Gebruikersnaam voor Git-doorvoer.
--git-email Email te gebruiken voor Git-doorvoer.

Als u niet wilt dat Flux naar de opslagplaats schrijft en --git-user of --git-email niet is ingesteld, wordt deze --git-readonly automatisch ingesteld.

Zie de Flux-documentatie voor meer informatie.

Notitie

Flux wordt standaard gesynchroniseerd vanuit de master vertakking van de Git-opslagplaats. Nieuwere git-opslagplaatsen hebben echter de hoofdvertakking met de naam main. In dat geval moet u instellen --git-branch=main in de --operator-params.

Tip

U kunt een configuratie maken in de Azure Portal op het tabblad GitOps van de Kubernetes-resource met Azure Arc.

De configuratie valideren

Gebruik de Azure CLI om te controleren of de configuratie is gemaakt.

az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

De configuratieresource wordt bijgewerkt met nalevingsstatus, berichten en informatie over foutopsporing.

{
  "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"
}

Wanneer een configuratie wordt gemaakt of bijgewerkt, gebeurt er een aantal dingen:

  1. Azure Arc config-agent controleert Azure Resource Manager op nieuwe of bijgewerkte configuraties (Microsoft.KubernetesConfiguration/sourceControlConfigurations) en ziet de nieuwe Pending configuratie.
  2. De config-agent leest de configuratie-eigenschappen en maakt de doelnaamruimte.
  3. Azure Arc controller-manager maakt een Kubernetes-serviceaccount en wijst dit toe aan ClusterRoleBinding of RoleBinding voor de juiste machtigingen (cluster of namespace het juiste bereik). Vervolgens wordt een exemplaar van fluxgeïmplementeerd.
  4. Als u de optie van SSH gebruikt met door Flux gegenereerde sleutels, flux genereert een SSH-sleutel en registreert u de openbare sleutel.
  5. De config-agent status wordt terug gerapporteerd aan de configuratieresource in Azure.

Terwijl het inrichtingsproces plaatsvindt, doorloopt de configuratieresource enkele statuswijzigingen. Bewaak de voortgang met de az k8s-configuration show ... bovenstaande opdracht:

Fasewijziging Beschrijving
complianceStatus->Pending Vertegenwoordigt de initiële status en de status in uitvoering.
complianceStatus ->Installed config-agent het cluster is geconfigureerd en zonder fouten geïmplementeerd flux .
complianceStatus ->Failed config-agent er is een fout opgetreden bij het implementeren van flux. Details vindt u in complianceStatus.message de hoofdtekst van de reactie.

Configuratie toepassen vanuit een privé-Git-opslagplaats

Als u een persoonlijke Git-opslagplaats gebruikt, moet u de openbare SSH-sleutel in uw opslagplaats configureren. U geeft op of Flux genereert de openbare SSH-sleutel. U kunt de openbare sleutel configureren in de specifieke Git-opslagplaats of op de Git-gebruiker die toegang heeft tot de opslagplaats.

Haal uw eigen openbare sleutel op

Als u uw eigen SSH-sleutels hebt gegenereerd, hebt u al de privé en openbare sleutels.

Haal de openbare sleutel op met behulp van Azure CLI

Gebruik het volgende in Azure CLI als Flux de sleutels genereert.

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"

Haal de openbare sleutel op uit de Azure Portal

Doorloop het volgende in Azure Portal of Flux de sleutels genereert.

  1. Navigeer in de Azure Portal naar de verbonden clusterbron.
  2. Selecteer 'GitOps' op de resourcepagina en bekijk de lijst met configuraties voor dit cluster.
  3. Selecteer de configuratie die gebruikmaakt van de privé-Git-opslagplaats.
  4. Kopieer in het contextvenster dat wordt geopend onderaan het venster de openbare sleutel van de opslagplaats.

Openbare sleutel toevoegen met Behulp van GitHub

Gebruik een van de volgende opties:

  • Optie 1: Voeg de openbare sleutel toe aan uw gebruikersaccount (geldt voor alle opslagplaatsen in uw account):

    1. Open GitHub en klik op uw profielpictogram in de rechterbovenhoek van de pagina.
    2. Klik op Instellingen.
    3. Klik op SSH- en GPG-sleutels.
    4. Klik op Nieuwe SSH-sleutel.
    5. Geef een titel op.
    6. Plak de openbare sleutel zonder omringende aanhalingstekens.
    7. Klik op SSH-sleutel toevoegen.
  • Optie 2: Voeg de openbare sleutel toe als een implementatiesleutel in de Git-opslagplaats (geldt alleen voor deze opslagplaats):

    1. Open GitHub en navigeer naar uw opslagplaats.
    2. Klik op Instellingen.
    3. Klik op Sleutels implementeren.
    4. Klik op Implementatiesleutel toevoegen.
    5. Geef een titel op.
    6. Schakel Schrijftoegang toestaan in.
    7. Plak de openbare sleutel zonder omringende aanhalingstekens.
    8. Klik op Sleutel toevoegen.

Voeg openbare sleutel toe met behulp van een Azure DevOps-opslagplaats

Gebruik de volgende stappen om de sleutel toe te voegen aan uw SSH-sleutels:

  1. Klik onder Gebruikersinstellingen in de rechterbovenhoek (naast de profielafbeelding) op Openbare SSH-sleutels.
  2. Selecteer + Nieuwe sleutel.
  3. Geef een naam op.
  4. Plak de openbare sleutel zonder omringende aanhalingstekens.
  5. Klik op Add.

De Kubernetes-configuratie valideren

Nadat config-agent het flux exemplaar is geïnstalleerd, moeten resources in de Git-opslagplaats naar het cluster stromen. Controleer of de naamruimten, implementaties en resources zijn gemaakt met de volgende opdracht:

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

We kunnen zien dat team-a, team-b, itopsen cluster-config naamruimten zijn gemaakt.

De flux operator is geïmplementeerd in de cluster-config naamruimte, zoals aangegeven door de configuratieresource:

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

Verdere verkenning

U kunt de andere resources verkennen die zijn geïmplementeerd als onderdeel van de configuratieopslagplaats met behulp van:

kubectl -n team-a get cm -o yaml
kubectl -n itops get all

Resources opschonen

Verwijder een configuratie met behulp van de Azure CLI of Azure Portal. Nadat u de opdracht Verwijderen hebt uitgevoerd, wordt de configuratieresource onmiddellijk verwijderd in Azure. De volledige verwijdering van de gekoppelde objecten uit het cluster moet binnen 10 minuten plaatsvinden. Als de configuratie een mislukte status heeft wanneer deze wordt verwijderd, kan het volledig verwijderen van gekoppelde objecten maximaal een uur duren.

Wanneer een configuratie met namespace bereik wordt verwijderd, wordt de naamruimte niet verwijderd door Azure Arc om te voorkomen dat bestaande workloads worden verbroken. Indien nodig kunt u deze naamruimte handmatig verwijderen met behulp van kubectl.

az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

Notitie

Wijzigingen in het cluster die het resultaat zijn van implementaties uit de bijgehouden Git-opslagplaats, worden niet verwijderd wanneer de configuratie wordt verwijderd.

Volgende stappen

Ga naar de volgende zelfstudie voor meer informatie over het implementeren van CI/CD met GitOps.