Kurz: Nasazení konfigurací pomocí GitOps v clusteru Kubernetes s podporou Azure Arc

Důležité

Tento kurz je určený pro GitOps s flux v1. GitOps s Flux v2 je teď k dispozici pro clustery Kubernetes a Azure Kubernetes Service (AKS) s podporou Azure Arc. přejděte na kurz pro GitOps s Flux v2. Doporučujeme migrovat na Flux v2 co nejdříve.

Podpora prostředků konfigurace clusteru založených na Flux v1 vytvořených před 1. lednem 2024 skončí 24. května 2025. Od 1. ledna 2024 nebudete moct vytvářet nové prostředky konfigurace clusteru založené na Flux v1.

V tomto kurzu použijete konfigurace pomocí GitOps v clusteru Kubernetes s podporou Azure Arc. Dozvíte se, jak:

  • Vytvořte konfiguraci v clusteru Kubernetes s podporou Azure Arc pomocí ukázkového úložiště Git.
  • Ověřte, že se konfigurace úspěšně vytvořila.
  • Použijte konfiguraci z privátního úložiště Git.
  • Ověřte konfiguraci Kubernetes.

Požadavky

Vytvoření konfigurace

Ukázkové úložiště použité v tomto článku je strukturováno podle osoby operátora clusteru. Manifesty v tomto úložišti zřizují několik oborů názvů, nasazují úlohy a poskytují konfiguraci pro konkrétní tým. Použití tohoto úložiště s GitOps vytvoří v clusteru následující prostředky:

  • Obory názvů: cluster-config, , team-ateam-b
  • Nasazení: arc-k8s-demo
  • ConfigMap: team-a/endpoints

Dotazuje config-agent Azure na nové nebo aktualizované konfigurace. Tento úkol bude trvat až 5 minut.

Pokud ke konfiguraci přidružujete privátní úložiště, proveďte následující kroky v tématu Použití konfigurace z privátního úložiště Git.

Použití Azure CLI

K propojení připojeného clusteru s ukázkovým úložištěm Git použijte rozšíření Azure CLI prok8s-configuration.

  1. Pojmenujte tuto konfiguraci cluster-config.

  2. Požádejte agenta, aby nasadil operátor v cluster-config oboru názvů.

  3. Udělte operátorovi cluster-admin oprávnění.

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

Použití veřejného úložiště Git

Parametr Formát
--repository-url http[s]://server/repo[.git]

Použití privátního úložiště Git s protokolem SSH a klíči vytvořenými nástrojem Flux

Přidejte veřejný klíč vygenerovaný nástrojem Flux do uživatelského účtu u vašeho poskytovatele služeb Git. Pokud se klíč přidá do úložiště místo uživatelského účtu, použijte git@ v adrese URL místo klíče user@ .

Další podrobnosti najdete v části Použití konfigurace z privátního úložiště Git .

Parametr Formát Poznámky
--repository-url ssh://user@server/repo[.git] nebo user@server:repo[.git] git@ může nahradit user@

Použití privátního úložiště Git s protokolem SSH a klíči poskytnutými uživatelem

Zadejte svůj vlastní privátní klíč přímo nebo do souboru. Klíč musí být ve formátu PEM a musí končit novým řetězcem (\n).

Přidejte přidružený veřejný klíč do uživatelského účtu u vašeho poskytovatele služeb Git. Pokud se klíč přidá do úložiště místo uživatelského účtu, použijte git@ místo .user@

Další podrobnosti najdete v části Použití konfigurace z privátního úložiště Git .

Parametr Formát Poznámky
--repository-url ssh://user@server/repo[.git] nebo user@server:repo[.git] git@ může nahradit user@
--ssh-private-key klíč s kódováním base64 ve formátu PEM Přímé zadání klíče
--ssh-private-key-file úplná cesta k místnímu souboru Zadejte úplnou cestu k místnímu souboru, který obsahuje klíč formátu PEM.

Použití privátního hostitele Git s protokolem SSH a uživatelem zadanými známými hostiteli

Operátor Flux udržuje ve svém souboru známých hostitelů seznam známých hostitelů Git, aby mohl před navázáním připojení SSH ověřit úložiště Git. Pokud používáte neobvyklé úložiště Git nebo vlastního hostitele Gitu, můžete zadat klíč hostitele, aby flux mohl identifikovat vaše úložiště.

Stejně jako soukromé klíče můžete known_hosts obsah poskytnout přímo nebo v souboru. Při poskytování vlastního obsahu použijte specifikace known_hosts formátu obsahu spolu s některým z výše uvedených klíčových scénářů SSH.

Parametr Formát Poznámky
--repository-url ssh://user@server/repo[.git] nebo user@server:repo[.git] git@ může nahradit user@
--ssh-known-hosts kódování base64 Přímé poskytování obsahu známých hostitelů
--ssh-known-hosts-file úplná cesta k místnímu souboru Poskytnutí obsahu známých hostitelů v místním souboru

Použití privátního úložiště Git s HTTPS

Parametr Formát Poznámky
--repository-url https://server/repo[.git] HTTPS se základním ověřováním
--https-user kódování raw nebo base64 Uživatelské jméno HTTPS
--https-key kódování raw nebo base64 Token nebo heslo pro osobní přístup HTTPS

Poznámka

  • Chart operátora Helm verze 1.2.0+ podporuje privátní ověřování https Helm verze.
  • Verze HTTPS Helm se u spravovaných clusterů AKS nepodporuje.
  • Pokud potřebujete flux pro přístup k úložišti Git prostřednictvím proxy serveru, budete muset aktualizovat agenty Azure Arc nastavením proxy serveru. Další informace najdete v tématu Připojení pomocí odchozího proxy serveru.

Další parametry

Přizpůsobte konfiguraci pomocí následujících volitelných parametrů:

Parametr Popis
--enable-helm-operator Přepněte na podporu nasazení chartů Helm.
--helm-operator-params Hodnoty grafu pro operátor Helm (pokud je povolená) Například, --set helm.versions=v3.
--helm-operator-chart-version Verze grafu pro operátor Helm (pokud je povolená) Použijte verzi 1.2.0 nebo novější. Výchozí hodnota: 1.2.0.
--operator-namespace Název oboru názvů operátoru Výchozí: "výchozí". Maximálně: 23 znaků.
--operator-params Parametry pro operátor. Musí být zadané v jednoduchých uvozovkách. Například --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'.

Podporované možnosti v --operator-params:

Možnost Popis
--git-branch Větev úložiště Git, která se má používat pro manifesty Kubernetes. Výchozí hodnota je "master". Novější úložiště mají kořenovou větev s názvem main, v takovém případě musíte nastavit --git-branch=main.
--git-path Relativní cesta v úložišti Git pro Flux k vyhledání manifestů Kubernetes
--git-readonly Úložiště Git bude považováno za jen pro čtení. Flux se do něj nepokusí psát.
--manifest-generation Pokud je povoleno, flux vyhledá .flux.yaml a spustí Kustomize nebo jiné generátory manifestu.
--git-poll-interval Období, ve kterém se má v úložišti Git dotazovat na nová potvrzení Výchozí hodnota je 5m (5 minut).
--sync-garbage-collection Pokud je povoleno, flux odstraní prostředky, které vytvořil, ale už nejsou v Gitu.
--git-label Popisek pro sledování průběhu synchronizace. Používá se k označení větve Gitu. Výchozí je flux-sync.
--git-user Uživatelské jméno pro potvrzení Gitu
--git-email Email použít pro potvrzení Gitu.

Pokud nechcete, aby flux zapisovat do úložiště a --git-user nebo --git-email není nastavený, nastaví --git-readonly se automaticky.

Další informace najdete v dokumentaci k fluxu.

Poznámka

Flux se ve výchozím nastavení synchronizuje master z větve úložiště Git. Novější úložiště Git však mají kořenovou větev s názvem main, v takovém případě je potřeba nastavit --git-branch=main v parametru --operator-params.

Tip

Konfiguraci můžete vytvořit v Azure Portal na kartě GitOps prostředku Kubernetes s podporou Azure Arc.

Ověření konfigurace

Pomocí Azure CLI ověřte, že se konfigurace úspěšně vytvořila.

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

Prostředek konfigurace se aktualizuje o stav dodržování předpisů, zprávy a informace o ladění.

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

Při vytvoření nebo aktualizaci konfigurace se stane několik věcí:

  1. Azure Arc config-agent monitoruje nové nebo aktualizované konfigurace AzureMicrosoft.KubernetesConfiguration/sourceControlConfigurations Resource Manager a všimne si nové Pending konfigurace.
  2. Načte config-agent vlastnosti konfigurace a vytvoří cílový obor názvů.
  3. Azure Arc controller-manager vytvoří účet služby Kubernetes a namapuje ho na ClusterRoleBinding nebo RoleBinding pro příslušná oprávnění (cluster nebo namespace obor). Pak nasadí instanci nástroje flux.
  4. Pokud použijete možnost SSH s klíči vygenerovanými fluxem, flux vygeneruje klíč SSH a protokoluje veřejný klíč.
  5. Stav config-agent hlásí zpět do konfiguračního prostředku v Azure.

Během procesu zřizování bude prostředek konfigurace procházet několika změnami stavu. Průběh monitorujte pomocí výše uvedeného az k8s-configuration show ... příkazu:

Změna fáze Popis
complianceStatus->Pending Představuje počáteční a probíhající stavy.
complianceStatus ->Installed config-agent cluster úspěšně nakonfiguroval a nasadil flux se bez chyby.
complianceStatus ->Failed config-agent při nasazování fluxdošlo k chybě . Podrobnosti jsou uvedeny v complianceStatus.message textu odpovědi.

Použití konfigurace z privátního úložiště Git

Pokud používáte privátní úložiště Git, musíte ve svém úložišti nakonfigurovat veřejný klíč SSH. Buď zadáte, nebo Flux vygeneruje veřejný klíč SSH. Veřejný klíč můžete nakonfigurovat pro konkrétní úložiště Git, nebo pro uživatele Gitu, který má k úložišti přístup.

Získání vlastního veřejného klíče

Pokud jste si vygenerovali vlastní klíče SSH, pak již máte privátní i veřejné klíče.

Získání veřejného klíče pomocí Azure CLI

Pokud klíče generuje nástroj Flux, použijte v Azure CLI následující postup.

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"

Získání veřejného klíče z webu Azure Portal

Projděte si následující informace v Azure Portal, jestli flux generuje klíče.

  1. Na webu Azure Portal přejděte k prostředku připojeného clusteru.
  2. Na stránce prostředku vyberte GitOps a podívejte se na seznam konfigurací pro tento cluster.
  3. Vyberte konfiguraci, ve které se používá privátní úložiště Git.
  4. V kontextovém okně, které se otevře, zkopírujte v dolní části okna veřejný klíč úložiště.

Přidání veřejného klíče pomocí GitHubu

Použijte jednu z následujících možností:

  • Možnost 1: Přidání veřejného klíče do vašeho uživatelského účtu (platí pro všechna úložiště ve vašem účtu):

    1. Otevřete GitHub a klikněte na ikonu svého profilu v pravém horním rohu stránky.
    2. Klikněte na Nastavení.
    3. Klikněte na klíče SSH a GPG.
    4. Klikněte na Nový klíč SSH.
    5. Zadejte název.
    6. Vložte veřejný klíč bez okolních uvozovek.
    7. Klikněte na Přidat klíč SSH.
  • Možnost 2: Přidání veřejného klíče jako klíče nasazení do úložiště Git (platí pouze pro toto úložiště):

    1. Otevřete GitHub a přejděte do svého úložiště.
    2. Klikněte na Nastavení.
    3. Klikněte na Nasadit klíče.
    4. Klikněte na Přidat klíč nasazení.
    5. Zadejte název.
    6. Zaškrtněte možnost Povolit přístup pro zápis.
    7. Vložte veřejný klíč bez okolních uvozovek.
    8. Klikněte na Přidat klíč.

Přidání veřejného klíče pomocí úložiště Azure DevOps

K přidání klíče mezi vaše klíče SSH použijte následující postup:

  1. V části Uživatelská nastavení v pravém horním rohu (vedle profilového obrázku) klikněte na Veřejné klíče SSH.
  2. Vyberte + Nový klíč.
  3. Zadejte název.
  4. Vložte veřejný klíč bez okolních uvozovek.
  5. Klikněte na Přidat.

Ověření konfigurace Kubernetes

Po config-agent instalaci flux instance by prostředky uchovávané v úložišti Git měly začít proudit do clusteru. Pomocí následujícího příkazu zkontrolujte, jestli se vytvořily obory názvů, nasazení a prostředky:

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

Vidíme, že team-ase vytvořily obory názvů , team-bitops, a cluster-config .

Operátor flux se nasadil do cluster-config oboru názvů podle pokynů prostředku konfigurace:

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

Další průzkum

Další prostředky nasazené jako součást úložiště konfigurace můžete prozkoumat pomocí následujících možností:

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

Vyčištění prostředků

Odstraňte konfiguraci pomocí Azure CLI nebo Azure Portal. Po spuštění příkazu delete se prostředek konfigurace okamžitě odstraní v Azure. K úplnému odstranění přidružených objektů z clusteru by mělo dojít během 10 minut. Pokud je konfigurace po odebrání ve stavu selhání, úplné odstranění přidružených objektů může trvat až hodinu.

Při odstranění konfigurace s oborem namespace azure Arc obor názvů neodstraní, aby nedošlo k narušení stávajících úloh. V případě potřeby můžete tento obor názvů odstranit ručně pomocí .kubectl

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

Poznámka

Při odstranění konfigurace se neodstraní žádné změny clusteru, které byly výsledkem nasazení ze sledovaného úložiště Git.

Další kroky

V dalším kurzu se dozvíte, jak implementovat CI/CD pomocí GitOps.