Udostępnij za pośrednictwem


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

Ważne

Ten samouczek dotyczy metodyki GitOps z rozwiązaniem Flux w wersji 1. Usługa 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 w wersji 2. Zalecamy jak najszybsze przeprowadzenie migracji do wersji Flux v2 .

Obsługa zasobów konfiguracji klastra opartych na platformie Flux w wersji 1 utworzonych przed 1 stycznia 2024 r. zakończy się 24 maja 2025 r. Od 1 stycznia 2024 r. nie będzie można utworzyć nowych zasobów konfiguracji klastra opartego na platformie Flux w wersji 1.

W tym samouczku zastosujesz konfiguracje platformy Flux w wersji 1 przy użyciu metodyki GitOps w klastrze Kubernetes z obsługą usługi Azure Arc. Dowiesz się, jak:

  • Utwórz konfigurację w klastrze Kubernetes z obsługą usługi 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

  • Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.

  • Istniejący połączony klaster Kubernetes z włączoną usługą Azure Arc.

    • Jeśli klaster nie został jeszcze połączony, zapoznaj się z przewodnikiem Szybki start Connect an Azure Arc-enabled Kubernetes cluster (Łączenie klastra Kubernetes z włączoną usługą Azure Arc).
  • Zrozumienie korzyści i architektury tej funkcji. Przeczytaj więcej w artykule Configurations and GitOps - Azure Arc-enabled Kubernetes (Konfiguracje i GitOps — platforma Kubernetes z obsługą usługi Azure Arc).

  • Zainstaluj rozszerzenie interfejsu k8s-configuration wiersza polecenia platformy Azure w wersji >= 1.0.0:

    az extension add --name k8s-configuration
    

    Napiwek

    k8s-configuration Jeśli rozszerzenie jest już zainstalowane, możesz zaktualizować je do najnowszej wersji przy użyciu następującego polecenia :az extension update --name k8s-configuration

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 zapewniają 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 sekcji Zastosuj konfigurację z prywatnego repozytorium Git.

Ważne

Ten samouczek dotyczy metodyki GitOps z rozwiązaniem Flux w wersji 1. Usługa 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 w wersji 2. Zalecamy jak najszybsze przeprowadzenie migracji do wersji Flux v2 .

Obsługa zasobów konfiguracji klastra opartych na platformie Flux w wersji 1 utworzonych przed 1 stycznia 2024 r. zakończy się 24 maja 2025 r. Od 1 stycznia 2024 r. nie będzie można utworzyć nowych zasobów konfiguracji klastra opartego na platformie Flux w wersji 1.

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 flux 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]

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.

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

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 zamiast user@.git@

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

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, który zawiera 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ć zawartość known_hosts bezpośrednio lub w pliku. Podczas udostępniania własnej zawartości należy użyć 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 kodowane w formacie base64 Bezpośrednie udostępnianie 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 chart operatora programu Helm w wersji 1.2.0 lub nowszej obsługuje prywatne uwierzytelnianie wersji programu Helm https.
  • Wersja programu Helm 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ń pakietu Helm na wykresie.
--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 programu 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ć podana 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ć wartość --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 do niego.
--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 pod kątem nowych zatwierdzeń. Wartość domyślna to 5m (5 minut).
--sync-garbage-collection Jeśli to ustawienie jest włączone, platforma Flux usunie utworzone zasoby, ale nie jest już obecna w usłudze Git.
--git-label Etykieta do śledzenia postępu 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 Wiadomość e-mail do użycia na potrzeby zatwierdzenia usługi Git.

Jeśli nie chcesz, aby aplikacja 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

Ustawienie domyślne 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.

Napiwek

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

Weryfikacja 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 zauważa 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 clusterRoleBinding 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 generowanymi 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 fluxwdrażania elementu . 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. Podajesz 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 witrynie Azure Portal, jeśli platforma 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 klucze 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 wdrażania.
    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 przycisk 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 .

Operator flux 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 witryny Azure Portal. Po uruchomieniu polecenia delete 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.

Ważne

Ten samouczek dotyczy metodyki GitOps z rozwiązaniem Flux w wersji 1. Usługa 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 w wersji 2. Zalecamy jak najszybsze przeprowadzenie migracji do wersji Flux v2 .

Obsługa zasobów konfiguracji klastra opartych na platformie Flux w wersji 1 utworzonych przed 1 stycznia 2024 r. zakończy się 24 maja 2025 r. Od 1 stycznia 2024 r. nie będzie można utworzyć nowych zasobów konfiguracji klastra opartego na platformie Flux w wersji 1.

Następne kroki

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