Udostępnij za pośrednictwem


Wdrażanie klastra Kubernetes za pomocą aparatu AKS w usłudze Azure Stack Hub

Klaster Kubernetes można wdrożyć w usłudze Azure Stack Hub z poziomu maszyny wirtualnej klienckiej z uruchomionym aparatem usługi AKS. W tym artykule przyjrzymy się pisaniu specyfikacji klastra, wdrażaniu klastra przy użyciu pliku apimodel.json i sprawdzaniu klastra przez wdrożenie programu MySQL za pomocą programu Helm.

Definiowanie specyfikacji klastra

Specyfikację klastra można określić w pliku dokumentu przy użyciu formatu JSON nazywanego modelem interfejsu API. Aparat usługi AKS używa specyfikacji klastra w modelu interfejsu API do utworzenia klastra.

Przykłady modelu interfejsu API dla systemu operacyjnego i numeru wersji aparatu AKS można znaleźć w artykule Aparat usługi AKS i odpowiednie mapowanie obrazów.

  1. Znajdź numer wersji aparatu usługi AKS, na przykład , v.0.63.0w tabeli.
  2. W tabeli przykładów dla modelu interfejsu API wybierz i otwórz link dla systemu operacyjnego.
  3. Wybierz pozycję Nieprzetworzone. Adres URL można użyć w poniższych instrukcjach.

Adres URL modelu interfejsu API może wyglądać następująco:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

Dla każdego z poniższych przykładów zastąp <URL for the API Model> ciąg adresem URL.

Aktualizowanie modelu interfejsu API

W tej sekcji omówiono tworzenie modelu interfejsu API dla klastra.

  1. Zacznij od użycia pliku modelu interfejsu API usługi Azure Stack Hub dla systemu Linux lub Windows. Na maszynie zainstalowano aparat usługi AKS, uruchom polecenie:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Uwaga

    Jeśli plik zostanie odłączony, możesz pobrać go i ręcznie skopiować go na odłączony komputer, na którym planujesz go edytować. Plik można skopiować na maszynę z systemem Linux przy użyciu narzędzi, takich jak PuTTY lub WinSCP.

  2. Aby otworzyć model interfejsu API w edytorze, możesz użyć systemu nano:

    nano ./kubernetes-azurestack.json
    

    Uwaga

    Jeśli nie masz zainstalowanego systemu Nano, możesz zainstalować system Nano w systemie Ubuntu: sudo apt-get install nano.

  3. W pliku kubernetes-azurestack.json znajdź element orchestratorRelease i orchestratorVersion. Wybierz jedną z obsługiwanych wersji platformy Kubernetes; Tabelę wersji można znaleźć w informacjach o wersji. orchestratorRelease Określ wartość x.xx i orchestratorVersion jako x.xx.x. Aby uzyskać listę bieżących wersji, zobacz Obsługiwane wersje aparatu usługi AKS

  4. Znajdź customCloudProfile i podaj adres URL portalu dzierżawy. Na przykład https://portal.local.azurestack.external.

  5. Dodaj "identitySystem":"adfs" , jeśli używasz usług AD FS. Na przykład:

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Uwaga

    Jeśli używasz identyfikatora Entra firmy Microsoft dla systemu tożsamości, nie musisz dodawać pola identitySystem .

  6. W masterProfilepliku ustaw następujące pola:

    Pole opis
    dnsPrefix Wprowadź unikatowy ciąg służący do identyfikowania nazwy hosta maszyn wirtualnych. Na przykład nazwa oparta na nazwie grupy zasobów.
    count Wprowadź liczbę wzorców, które mają być używane do wdrożenia. Minimalna wartość wdrożenia wysokiej dostępności to 3, ale 1 jest dozwolone w przypadku wdrożeń innych niż wysoka dostępność.
    vmSize Wprowadź rozmiar obsługiwany przez usługę Azure Stack Hub, na przykład Standard_D2_v2.
    dystrybucja Wprowadź aks-ubuntu-18.04 lub aks-ubuntu-20.04.
  7. W agentPoolProfiles aktualizacji:

    Pole opis
    count Wprowadź liczbę agentów, których chcesz użyć do wdrożenia. Maksymalna liczba węzłów do użycia w ramach subskrypcji wynosi 50. Jeśli wdrażasz więcej niż jeden klaster na subskrypcję, upewnij się, że łączna liczba agentów nie przekracza 50. Upewnij się, że używasz elementów konfiguracji określonych w przykładowym pliku JSON modelu interfejsu API.
    vmSize Wprowadź rozmiar obsługiwany przez usługę Azure Stack Hub, na przykład Standard_D2_v2.
    dystrybucja Wprowadź wartość aks-ubuntu-18.04, aks-ubuntu-20.04 lub Windows.
    Służy Windows do agentów, którzy będą uruchamiani w systemie Windows. Zobacz na przykład kubernetes-windows.json
  8. W linuxProfile aktualizacji:

    Pole opis
    adminUsername Wprowadź nazwę użytkownika administratora maszyny wirtualnej.
    SSH Wprowadź klucz publiczny, który będzie używany do uwierzytelniania SSH z maszynami wirtualnymi. Użyj ssh-rsa , a następnie . Aby uzyskać instrukcje dotyczące tworzenia klucza publicznego, zobacz Tworzenie klucza SSH dla systemu Linux.

    Jeśli wdrażasz w niestandardowej sieci wirtualnej, możesz znaleźć instrukcje dotyczące znajdowania i dodawania wymaganych kluczy i wartości do odpowiednich tablic w modelu interfejsu API w temacie Wdrażanie klastra Kubernetes w niestandardowej sieci wirtualnej.

    Uwaga

    Aparat usługi AKS dla usługi Azure Stack Hub nie umożliwia udostępniania własnych certyfikatów na potrzeby tworzenia klastra.

  9. Jeśli używasz systemu Windows, zaktualizuj windowsProfile wartości adminUsername: i adminPassword:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Więcej informacji o modelu interfejsu API

  • Aby uzyskać pełną dokumentację wszystkich dostępnych opcji w modelu interfejsu API, zapoznaj się z definicjami klastra.
  • Aby uzyskać najważniejsze informacje na temat konkretnych opcji usługi Azure Stack Hub, zapoznaj się z specyfiką definicji klastra usługi Azure Stack Hub.

Dodawanie certyfikatu podczas korzystania z zestawu ASDK

Jeśli wdrażasz klaster w zestawie Azure Stack Development Kit (ASDK) i korzystasz z systemu Linux, musisz dodać certyfikat główny do zaufanego magazynu certyfikatów maszyny wirtualnej klienckiej z uruchomionym aparatem usługi AKS.

  1. Znajdź certyfikat główny na maszynie wirtualnej w tym katalogu: /var/lib/waagent/Certificates.pem.
  2. Skopiuj plik certyfikatu:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Wdrażanie klastra Kubernetes

Po zebraniu wszystkich wymaganych wartości w modelu interfejsu API możesz utworzyć klaster. W tym momencie należy:

Poproś operatora usługi Azure Stack Hub o:

  • Sprawdź kondycję systemu, zasugeruj uruchomienie Test-AzureStack i narzędzie do monitorowania sprzętu dostawcy OEM.
  • Sprawdź pojemność systemu, w tym zasoby, takie jak pamięć, magazyn i publiczne adresy IP.
  • Podaj szczegóły limitu przydziału skojarzonego z subskrypcją, aby sprawdzić, czy liczba maszyn wirtualnych, z których planujesz korzystać, jest wystarczająca ilość miejsca.

Przejdź do wdrożenia klastra:

  1. Przejrzyj dostępne parametry dla aparatu usługi AKS w flagach interfejsu wiersza polecenia usługi Azure Stack Hub.

    Parametr Przykład opis
    azure-env AzureStackCloud Aby wskazać aparat usługi AKS, że platforma docelowa to Azure Stack Hub, użyj polecenia AzureStackCloud.
    identity-system adfs Opcjonalny. Określ rozwiązanie do zarządzania tożsamościami, jeśli używasz usług Federacyjnych Active Directory (AD FS).
    lokalizacja local Nazwa regionu usługi Azure Stack Hub. W przypadku zestawu ASDK region jest ustawiony na localwartość .
    resource-group kube-rg Wprowadź nazwę nowej grupy zasobów lub wybierz istniejącą grupę zasobów. Nazwa zasobu musi być alfanumeryczna i mała.
    api-model ./kubernetes-azurestack.json Ścieżka do pliku konfiguracji klastra lub modelu interfejsu API.
    output-directory kube-rg Wprowadź nazwę katalogu, który będzie zawierać plik wyjściowy apimodel.json i inne wygenerowane pliki.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wprowadź identyfikator GUID jednostki usługi. Identyfikator klienta zidentyfikowany jako identyfikator aplikacji, gdy administrator usługi Azure Stack Hub utworzył jednostkę usługi.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wprowadź wpis tajny jednostki usługi. Klucz tajny klienta należy skonfigurować podczas tworzenia usługi.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wprowadź identyfikator subskrypcji. Musisz podać subskrypcję dla dzierżawy. Wdrażanie w subskrypcji administracyjnej nie jest obsługiwane. Aby uzyskać więcej informacji, zobacz Subskrybowanie oferty

    Oto przykład:

    Uwaga

    W przypadku usługi AKSe w wersji 0.75.3 lub nowszej polecenie wdrożenia klastra aparatu usługi AKS to aks-engine-azurestack deploy.

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Jeśli z jakiegoś powodu wykonanie zakończy się niepowodzeniem po utworzeniu katalogu wyjściowego, możesz rozwiązać ten problem i ponownie uruchomić polecenie. Jeśli ponownie uruchamiasz wdrożenie i wcześniej używasz tego samego katalogu wyjściowego, aparat usługi AKS zwróci błąd informujący, że katalog już istnieje. Istniejący katalog można zastąpić za pomocą flagi : --force-overwrite.

  3. Zapisz konfigurację klastra aparatu AKS w bezpiecznej, zaszyfrowanej lokalizacji.

    Znajdź apimodel.json pliku. Zapisz go w bezpiecznej lokalizacji. Ten plik będzie używany jako dane wejściowe we wszystkich innych operacjach aparatu AKS.

    Wygenerowany plik apimodel.json zawiera jednostkę usługi, klucz tajny i klucz publiczny SSH używany w modelu wejściowego interfejsu API. Plik zawiera również wszystkie inne metadane wymagane przez aparat usługi AKS do wykonywania wszystkich innych operacji. Jeśli utracisz plik, aparat usługi AKS nie będzie mógł skonfigurować klastra.

    Wpisy tajne są niezaszyfrowane. Zachowaj plik w zaszyfrowanym, bezpiecznym miejscu.

Weryfikowanie klastra

Sprawdź klaster, łącząc kubectlsię z usługą , uzyskując informacje, a następnie uzyskując stany węzłów.

  1. Pobierz plik, kubeconfig aby nawiązać połączenie z płaszczyzną sterowania.

    • Jeśli został kubectl już zainstalowany, sprawdź kubeconfig plik dla nowo utworzonego klastra w tej ścieżce /kubeconfig/kubeconfig.jsonkatalogu . Możesz dodać element /kubeconfig.json do .kube katalogu i zmienić jego nazwę na "config", aby uzyskać dostęp do nowego klastra.
      Jeśli nie zainstalowano kubectlprogramu , odwiedź stronę Instalowanie narzędzi , aby zainstalować narzędzie wiersza polecenia Kubernetes. W przeciwnym razie postępuj zgodnie z poniższymi instrukcjami, aby uzyskać dostęp do klastra z jednego z węzłów płaszczyzny sterowania.
  2. Uzyskaj publiczny adres IP jednego z węzłów płaszczyzny sterowania przy użyciu portalu usługi Azure Stack Hub.

  3. Z komputera z dostępem do wystąpienia usługi Azure Stack Hub połącz się za pośrednictwem protokołu SSH z nowym węzłem płaszczyzny sterowania przy użyciu klienta, takiego jak PuTTY lub MobaXterm.

  4. W przypadku nazwy użytkownika SSH użyj wartości "azureuser" i pliku klucza prywatnego pary kluczy podanej na potrzeby wdrożenia klastra.

  5. Sprawdź, czy punkty końcowe klastra są uruchomione:

    kubectl cluster-info
    

    Dane wyjściowe powinny wyglądać mniej więcej tak:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. Następnie przejrzyj stany węzłów:

    kubectl get nodes
    

    Dane wyjściowe będą podobne do następujących:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

Rozwiązywanie problemów z wdrażaniem klastra

Podczas napotkania błędów podczas wdrażania klastra Kubernetes przy użyciu aparatu AKS można sprawdzić:

  1. Czy używasz poprawnych poświadczeń jednostki usługi (SPN)?
  2. Czy nazwa SPN ma rolę "Współautorzy" w subskrypcji usługi Azure Stack Hub?
  3. Czy masz wystarczająco duży limit przydziału w planie usługi Azure Stack Hub?
  4. Czy wystąpienie usługi Azure Stack Hub ma zastosowaną poprawkę lub uaktualnienie?

Aby uzyskać więcej informacji, zobacz artykuł Dotyczący rozwiązywania problemów w repozytorium GitHub Azure/aks-engine-azurestack .

Obracanie wpisu tajnego jednostki usługi

Po wdrożeniu klastra Kubernetes za pomocą aparatu AKS jednostka usługi (SPN) jest używana do zarządzania interakcjami z usługą Azure Resource Manager w wystąpieniu usługi Azure Stack Hub. W pewnym momencie wpis tajny dla tej jednostki usługi może wygasnąć. Jeśli wpis tajny wygaśnie, możesz odświeżyć poświadczenia, wykonując następujące czynności:

  • Aktualizowanie każdego węzła przy użyciu nowego wpisu tajnego jednostki usługi.
  • Możesz też zaktualizować poświadczenia modelu interfejsu API i uruchomić uaktualnienie.

Ręczne aktualizowanie każdego węzła

  1. Uzyskaj nowy wpis tajny dla jednostki usługi od operatora chmury. Aby uzyskać instrukcje dotyczące usługi Azure Stack Hub, zobacz Używanie tożsamości aplikacji do uzyskiwania dostępu do zasobów usługi Azure Stack Hub.
  2. Użyj nowych poświadczeń dostarczonych przez operatora chmury, aby zaktualizować /etc/kubernetes/azure.json w każdym węźle. Po wprowadzeniu aktualizacji uruchom ponownie elementy i kubele kube-controller-manager.

Aktualizowanie klastra za pomocą aktualizacji aparatu aks-engine

Alternatywnie możesz zastąpić poświadczenia w apimodel.json i uruchomić uaktualnienie przy użyciu zaktualizowanego pliku .json do tej samej lub nowszej wersji platformy Kubernetes. Aby uzyskać instrukcje dotyczące uaktualniania modelu, zobacz Uaktualnianie klastra Kubernetes w usłudze Azure Stack Hub

Następne kroki