Samouczek: wdrażanie konfiguracji przy użyciu metodyki GitOps w klastrze Kubernetes z włączoną usługą Azure Arc

Ważne

Ten samouczek jest przeznaczony dla metodyki GitOps z rozwiązaniem Flux v1. Metodyka GitOps z rozwiązaniem Flux v2 jest teraz dostępna dla klastrów Kubernetes i Azure Kubernetes Service (AKS) z obsługą usługi Azure Arc; przejdź do samouczka dotyczącego metodyki GitOps z rozwiązaniem Flux v2. W końcu platforma Azure przestanie obsługiwać metodyki GitOps z rozwiązaniem Flux v1, więc zacznij korzystać z platformy Flux v2 tak szybko, jak to możliwe.

W tym samouczku zastosujesz konfiguracje przy użyciu metodyki GitOps w klastrze Kubernetes z włączoną usługą Azure Arc. Omawiane tematy:

  • Utwórz konfigurację w klastrze Kubernetes z włączoną usługą Azure Arc przy użyciu przykładowego repozytorium Git.
  • Sprawdź, czy konfiguracja została pomyślnie utworzona.
  • Zastosuj konfigurację z prywatnego repozytorium Git.
  • Zweryfikuj konfigurację platformy Kubernetes.

Wymagania wstępne

Tworzenie konfiguracji

Przykładowe repozytorium używane w tym artykule ma strukturę wokół osoby operatora klastra. Manifesty w tym repozytorium aprowizują kilka przestrzeni nazw, wdrażają obciążenia i udostępniają konfigurację specyficzną dla zespołu. Za pomocą tego repozytorium z usługą GitOps tworzy następujące zasoby w klastrze:

  • Przestrzenie nazw: cluster-config, , team-ateam-b
  • Wdrażania: arc-k8s-demo
  • ConfigMap: team-a/endpoints

Sonduje config-agent platformę Azure pod kątem nowych lub zaktualizowanych konfiguracji. Wykonanie tego zadania potrwa do 5 minut.

Jeśli kojarzysz repozytorium prywatne z konfiguracją, wykonaj poniższe kroki w temacie Zastosuj konfigurację z prywatnego repozytorium Git.

Interfejs wiersza polecenia platformy Azure

Użyj rozszerzenia interfejsu wiersza polecenia platformy Azure, k8s-configuration aby połączyć połączony klaster z przykładowym repozytorium Git.

  1. Nadaj tej konfiguracji cluster-confignazwę .

  2. Poinstruuj agenta, aby wdrożył operator w cluster-config przestrzeni nazw.

  3. Nadaj operatorowi cluster-admin uprawnienia.

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

Korzystanie z publicznego repozytorium Git

Parametr Format
--repository-url http[s]://serwer/repozytorium[.git] lub git://server/repo[.git]

Używanie prywatnego repozytorium Git z protokołem SSH i kluczami utworzonymi za pomocą narzędzia Flux

Dodaj klucz publiczny wygenerowany przez narzędzie Flux do konta użytkownika u dostawcy usług Git. Jeśli klucz zostanie dodany do repozytorium zamiast konta użytkownika, użyj go git@ zamiast user@ adresu URL.

Przejdź do sekcji Zastosuj konfigurację z prywatnego repozytorium Git , aby uzyskać więcej informacji.

Parametr Format Uwagi
--repository-url ssh://user@server/repo[.git] lub user@server:repo[.git] git@ może zastąpić user@

Używanie prywatnego repozytorium Git z protokołem SSH i kluczami dostarczonymi przez użytkownika

Podaj własny klucz prywatny — bezpośrednio lub w pliku. Klucz musi być w formacie PEM i kończyć się nowym wierszem (\n).

Dodaj skojarzony klucz publiczny do konta użytkownika u dostawcy usług Git. Jeśli klucz zostanie dodany do repozytorium zamiast konta użytkownika, użyj go git@ zamiast .user@

Przejdź do sekcji Zastosuj konfigurację z prywatnego repozytorium Git , aby uzyskać więcej informacji.

Parametr Format Uwagi
--repository-url ssh://user@server/repo[.git] lub user@server:repo[.git] git@ może zastąpić user@
--ssh-private-key Klucz zakodowany w formacie base64 w formacie PEM Podaj klucz bezpośrednio
--ssh-private-key-file pełna ścieżka do pliku lokalnego Podaj pełną ścieżkę do pliku lokalnego zawierającego klucz formatu PEM

Używanie prywatnego hosta Git z protokołem SSH i znanymi hostami podanymi przez użytkownika

Operator Flux przechowuje listę typowych hostów Git w pliku znanych hostów, aby uwierzytelnić repozytorium Git przed ustanowieniem połączenia SSH. Jeśli używasz nietypowego repozytorium Git lub własnego hosta Git, możesz podać klucz hosta, aby platforma Flux mogła zidentyfikować repozytorium.

Podobnie jak klucze prywatne, możesz podać known_hosts zawartość bezpośrednio lub w pliku. W przypadku udostępniania własnej zawartości użyj specyfikacji formatu zawartości known_hosts wraz z jednym z powyższych scenariuszy klucza SSH.

Parametr Format Uwagi
--repository-url ssh://user@server/repo[.git] lub user@server:repo[.git] git@ może zastąpić user@
--ssh-known-hosts Kodowanie base64 Bezpośrednie podawanie znanej zawartości hostów
--ssh-known-hosts-file pełna ścieżka do pliku lokalnego Udostępnianie znanej zawartości hostów w pliku lokalnym

Używanie prywatnego repozytorium Git z protokołem HTTPS

Parametr Format Uwagi
--repository-url https://server/repo[.git] Protokół HTTPS z podstawowym uwierzytelnianiem
--https-user nieprzetworzone lub zakodowane w formacie base64 Nazwa użytkownika HTTPS
--https-key nieprzetworzone lub zakodowane w formacie base64 Osobisty token dostępu https lub hasło

Uwaga

  • Pakiet operatorów helm w wersji 1.2.0 lub nowszej obsługuje prywatne uwierzytelnianie wersji programu Helm protokołu HTTPS.
  • Wersja narzędzia Helm protokołu HTTPS nie jest obsługiwana w przypadku klastrów zarządzanych usługi AKS.
  • Jeśli potrzebujesz usługi Flux, aby uzyskać dostęp do repozytorium Git za pośrednictwem serwera proxy, musisz zaktualizować agentów usługi Azure Arc przy użyciu ustawień serwera proxy. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia przy użyciu serwera proxy ruchu wychodzącego.

Dodatkowe parametry

Dostosuj konfigurację przy użyciu następujących parametrów opcjonalnych:

Parametr Opis
--enable-helm-operator Przełącz się, aby włączyć obsługę wdrożeń wykresów programu Helm.
--helm-operator-params Wartości wykresu dla operatora helm (jeśli jest włączone). Na przykład --set helm.versions=v3.
--helm-operator-chart-version Wersja wykresu dla operatora helm (jeśli jest włączona). Użyj wersji 1.2.0 lub nowszej. Ustawienie domyślne: "1.2.0".
--operator-namespace Nazwa przestrzeni nazw operatora. Ustawienie domyślne: "default". Maksymalna: 23 znaki.
--operator-params Parametry operatora. Musi być podane w ramach pojedynczych cudzysłowów. Na przykład --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'

Opcje obsługiwane w programie --operator-params:

Opcja Opis
--git-branch Gałąź repozytorium Git do użycia dla manifestów platformy Kubernetes. Wartość domyślna to "master". Nowsze repozytoria mają gałąź główną o nazwie main, w tym przypadku należy ustawić --git-branch=main.
--git-path Ścieżka względna w repozytorium Git dla platformy Flux w celu zlokalizowania manifestów platformy Kubernetes.
--git-readonly Repozytorium Git będzie traktowane jako tylko do odczytu. Flux nie podejmie próby zapisania w nim.
--manifest-generation Jeśli to ustawienie jest włączone, platforma Flux będzie szukać pliku .flux.yaml i uruchomić narzędzie Kustomize lub inne generatory manifestów.
--git-poll-interval Okres sondowania repozytorium Git dla nowych zatwierdzeń. Wartość domyślna to 5m (5 minut).
--sync-garbage-collection W przypadku włączenia usługi Flux usunie utworzone zasoby, ale nie są już obecne w usłudze Git.
--git-label Etykieta, aby śledzić postęp synchronizacji. Służy do tagowania gałęzi Git. Wartość domyślna to flux-sync.
--git-user Nazwa użytkownika zatwierdzenia usługi Git.
--git-email Email do użycia w celu zatwierdzenia usługi Git.

Jeśli nie chcesz, aby usługa Flux zapisywała w repozytorium i --git-user--git-email nie jest ustawiona, --git-readonly zostanie automatycznie ustawiona.

Aby uzyskać więcej informacji, zobacz dokumentację platformy Flux.

Uwaga

Wartość domyślna flux do synchronizacji z master gałęzi repozytorium git. Jednak nowsze repozytoria git mają gałąź główną o nazwie main, w tym przypadku należy ustawić --git-branch=main w parametrach --operator-params.

Porada

Konfigurację można utworzyć w Azure Portal na karcie GitOps zasobu Kubernetes z obsługą usługi Azure Arc.

Weryfikowanie konfiguracji

Użyj interfejsu wiersza polecenia platformy Azure, aby sprawdzić, czy konfiguracja została pomyślnie utworzona.

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

Zasób konfiguracji zostanie zaktualizowany przy użyciu informacji o stanie zgodności, komunikatach i debugowaniu.

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

Po utworzeniu lub zaktualizowaniu konfiguracji następuje kilka rzeczy:

  1. Usługa Azure Arc config-agent monitoruje usługę Azure Resource Manager pod kątem nowych lub zaktualizowanych konfiguracji (Microsoft.KubernetesConfiguration/sourceControlConfigurations) i zwraca uwagę na nową Pending konfigurację.
  2. Element config-agent odczytuje właściwości konfiguracji i tworzy docelową przestrzeń nazw.
  3. Usługa Azure Arc controller-manager tworzy konto usługi Kubernetes i mapuje je na klasterRoleBinding lub RoleBinding w celu uzyskania odpowiednich uprawnień (cluster lub namespace zakresu). Następnie wdraża wystąpienie klasy flux.
  4. Jeśli używasz opcji SSH z kluczami wygenerowanymi przez flux, flux generuje klucz SSH i rejestruje klucz publiczny.
  5. Raportuje config-agent stan z powrotem do zasobu konfiguracji na platformie Azure.

Podczas procesu aprowizacji zasób konfiguracji przejdzie przez kilka zmian stanu. Monitoruj postęp za pomocą powyższego az k8s-configuration show ... polecenia:

Zmiana etapu Opis
complianceStatus->Pending Reprezentuje stany początkowe i w toku.
complianceStatus ->Installed config-agent pomyślnie skonfigurowano klaster i wdrożono flux go bez błędu.
complianceStatus ->Failed config-agent Wystąpił błąd podczas wdrażania fluxelementu . Szczegóły są udostępniane w complianceStatus.message treści odpowiedzi.

Stosowanie konfiguracji z prywatnego repozytorium Git

Jeśli używasz prywatnego repozytorium Git, musisz skonfigurować klucz publiczny SSH w repozytorium. Podać lub platforma Flux generuje klucz publiczny SSH. Klucz publiczny można skonfigurować w określonym repozytorium Git lub na koncie użytkownika usługi Git, który ma dostęp do repozytorium.

Uzyskiwanie własnego klucza publicznego

Jeśli generujesz własne klucze SSH, masz już klucze prywatne i publiczne.

Uzyskiwanie klucza publicznego przy użyciu interfejsu wiersza polecenia platformy Azure

Zastosuj poniższe kroki w interfejsie wiersza polecenia platformy Azure, jeśli klucze są generowane przez narzędzie Flux.

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"

Uzyskiwanie klucza publicznego z witryny Azure Portal

Zapoznaj się z poniższymi instrukcjami w Azure Portal, jeśli usługa Flux generuje klucze.

  1. W witrynie Azure Portal przejdź do zasobu klastra połączonego.
  2. Na stronie zasobu wybierz pozycję "GitOps" i zobacz listę konfiguracji dla tego klastra.
  3. Wybierz konfigurację, która używa prywatnego repozytorium Git.
  4. W wyświetlonym oknie kontekstowym w dolnej części okna skopiuj klucz publiczny repozytorium.

Dodawanie klucza publicznego przy użyciu usługi GitHub

Skorzystaj z jednej z następujących opcji:

  • Opcja 1. Dodawanie klucza publicznego do konta użytkownika (dotyczy wszystkich repozytoriów na koncie):

    1. Otwórz usługę GitHub i kliknij ikonę profilu w prawym górnym rogu strony.
    2. Kliknij pozycję Settings (Ustawienia).
    3. Kliknij klawisze SSH i GPG.
    4. Kliknij pozycję Nowy klucz SSH.
    5. Podaj tytuł.
    6. Wklej klucz publiczny bez cudzysłowów.
    7. Kliknij pozycję Dodaj klucz SSH.
  • Opcja 2. Dodawanie klucza publicznego jako klucza wdrożenia do repozytorium Git (dotyczy tylko tego repozytorium):

    1. Otwórz usługę GitHub i przejdź do swojego repozytorium.
    2. Kliknij pozycję Settings (Ustawienia).
    3. Kliknij pozycję Wdróż klucze.
    4. Kliknij pozycję Dodaj klucz wdrożenia.
    5. Podaj tytuł.
    6. Zaznacz pozycję Zezwalaj na dostęp do zapisu.
    7. Wklej klucz publiczny bez cudzysłowów.
    8. Kliknij pozycję Dodaj klucz.

Dodawanie klucza publicznego przy użyciu repozytorium usługi Azure DevOps

Aby dodać klucz do kluczy SSH, wykonaj następujące kroki:

  1. W obszarze Ustawienia użytkownika w prawym górnym rogu (obok obrazu profilu) kliknij pozycję Klucze publiczne SSH.
  2. Wybierz pozycję + Nowy klucz.
  3. Podaj nazwę.
  4. Wklej klucz publiczny bez cudzysłowów.
  5. Kliknij pozycję Dodaj.

Weryfikowanie konfiguracji platformy Kubernetes

Po config-agent zainstalowaniu flux wystąpienia zasoby przechowywane w repozytorium Git powinny zacząć przepływać do klastra. Sprawdź, czy przestrzenie nazw, wdrożenia i zasoby zostały utworzone za pomocą następującego polecenia:

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

Widzimy, że team-azostały utworzone przestrzenie nazw , team-b, itopsi cluster-config .

flux Operator został wdrożony w cluster-config przestrzeni nazw zgodnie z zaleceniami zasobu konfiguracji:

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

Dalsza eksploracja

Inne zasoby wdrożone w repozytorium konfiguracji można eksplorować przy użyciu następujących elementów:

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

Czyszczenie zasobów

Usuń konfigurację przy użyciu interfejsu wiersza polecenia platformy Azure lub Azure Portal. Po uruchomieniu polecenia usuwania zasób konfiguracji zostanie natychmiast usunięty na platformie Azure. Pełne usunięcie skojarzonych obiektów z klastra powinno nastąpić w ciągu 10 minut. Jeśli konfiguracja jest w stanie niepowodzenia po usunięciu, pełne usunięcie skojarzonych obiektów może potrwać do godziny.

Po usunięciu konfiguracji z namespace zakresem przestrzeń nazw nie jest usuwana przez usługę Azure Arc, aby uniknąć przerywania istniejących obciążeń. W razie potrzeby możesz ręcznie usunąć tę przestrzeń nazw przy użyciu polecenia kubectl.

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

Uwaga

Wszelkie zmiany w klastrze, które były wynikiem wdrożeń z śledzonego repozytorium Git, nie są usuwane po usunięciu konfiguracji.

Następne kroki

Przejdź do następnego samouczka, aby dowiedzieć się, jak zaimplementować ciągłą integrację/ciągłe wdrażanie za pomocą usługi GitOps.