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.
- Als u nog geen verbinding hebt gemaakt met een cluster, volgt u de quickstart Een Kubernetes-cluster met Azure Arc verbinden.
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.
Geef deze configuratie
cluster-config
de naam .Geef de agent de opdracht om de operator in de
cluster-config
naamruimte te implementeren.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:
- Azure Arc
config-agent
controleert Azure Resource Manager op nieuwe of bijgewerkte configuraties (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) en ziet de nieuwePending
configuratie. - De
config-agent
leest de configuratie-eigenschappen en maakt de doelnaamruimte. - Azure Arc
controller-manager
maakt een Kubernetes-serviceaccount en wijst dit toe aan ClusterRoleBinding of RoleBinding voor de juiste machtigingen (cluster
ofnamespace
het juiste bereik). Vervolgens wordt een exemplaar vanflux
geïmplementeerd. - Als u de optie van SSH gebruikt met door Flux gegenereerde sleutels,
flux
genereert een SSH-sleutel en registreert u de openbare sleutel. - 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.
- Navigeer in de Azure Portal naar de verbonden clusterbron.
- Selecteer 'GitOps' op de resourcepagina en bekijk de lijst met configuraties voor dit cluster.
- Selecteer de configuratie die gebruikmaakt van de privé-Git-opslagplaats.
- 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):
- Open GitHub en klik op uw profielpictogram in de rechterbovenhoek van de pagina.
- Klik op Instellingen.
- Klik op SSH- en GPG-sleutels.
- Klik op Nieuwe SSH-sleutel.
- Geef een titel op.
- Plak de openbare sleutel zonder omringende aanhalingstekens.
- Klik op SSH-sleutel toevoegen.
Optie 2: Voeg de openbare sleutel toe als een implementatiesleutel in de Git-opslagplaats (geldt alleen voor deze opslagplaats):
- Open GitHub en navigeer naar uw opslagplaats.
- Klik op Instellingen.
- Klik op Sleutels implementeren.
- Klik op Implementatiesleutel toevoegen.
- Geef een titel op.
- Schakel Schrijftoegang toestaan in.
- Plak de openbare sleutel zonder omringende aanhalingstekens.
- 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:
- Klik onder Gebruikersinstellingen in de rechterbovenhoek (naast de profielafbeelding) op Openbare SSH-sleutels.
- Selecteer + Nieuwe sleutel.
- Geef een naam op.
- Plak de openbare sleutel zonder omringende aanhalingstekens.
- 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
, itops
en 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.