Wdrażanie klastra Kubernetes przy użyciu 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 bazy danych 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 usługi AKS można znaleźć w przypadku ostatnich wydań w aks engine 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 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 przedstawiono 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

    W przypadku rozłączenia możesz pobrać plik 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ć nano:

    nano ./kubernetes-azurestack.json
    

    Uwaga

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

  3. W pliku kubernetes-azurestack.json znajdź plik orchestratorRelease i orchestratorVersion. Wybierz jedną z obsługiwanych wersji platformy Kubernetes; tabelę wersji można znaleźć w informacjach o wersji. orchestratorRelease Określ jako 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 Microsoft Entra 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, który będzie służyć do identyfikowania nazwy hosta maszyn wirtualnych. Na przykład nazwa oparta na nazwie grupy zasobów.
    count Wprowadź liczbę wzorców, które chcesz wykonać we wdrożeniu. Minimalna wartość wdrożenia wysokiej dostępności to 3, ale 1 jest dozwolone w przypadku wdrożeń innych niż ha.
    vmSize Wprowadź rozmiar obsługiwany przez usługę Azure Stack Hub, na przykład Standard_D2_v2.
    Dystrybucji 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.
    Dystrybucji Wprowadź aks-ubuntu-18.04wartość , aks-ubuntu-20.04 lub Windows.
    Służy Windows do agentów, którzy będą działać w systemie Windows. Zobacz na przykład plik 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 klawisza , a następnie klawisza . 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 wymaganego klucza 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 na temat modelu interfejsu API

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, zaproponuj 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, które mają być używane, jest wystarczająca ilość miejsca.

Przejdź do wdrożenia klastra:

  1. Zapoznaj się z dostępnymi parametrami 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.
    system tożsamości Programu adfs Opcjonalny. Określ rozwiązanie do zarządzania tożsamościami, jeśli używasz usług Federacyjnych Active Directory (AD FS).
    location local Nazwa regionu usługi Azure Stack Hub. W przypadku zestawu ASDK region jest ustawiony na local.
    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 zawierającego 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.
    klucz tajny klienta xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wprowadź wpis tajny jednostki usługi. Klucz tajny klienta jest konfigurowany podczas tworzenia usługi.
    identyfikator subskrypcji 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żyto 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ź plik apimodel.json. 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, wpis tajny i klucz publiczny SSH używany w modelu interfejsu API danych wejściowych. Plik zawiera również wszystkie inne metadane potrzebne 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 katalogu, .kube 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 polecenia "azureuser" i pliku klucza prywatnego pary kluczy podanej do 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ła:

    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 prawidłowych 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 klucza tajnego jednostki usługi

Po wdrożeniu klastra Kubernetes z aparatem AKS jednostka usługi (SPN) jest używana do zarządzania interakcjami z platformą Azure Resource Manager w wystąpieniu usługi Azure Stack Hub. W pewnym momencie wpis tajny dla tej jednostki usługi może wygaśnieć. 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ć plik /etc/kubernetes/azure.json w każdym węźle. Po wprowadzeniu aktualizacji uruchom ponownie elementy kubele i kube-controller-manager.

Aktualizowanie klastra za pomocą aktualizacji aks-engine

Alternatywnie możesz zastąpić poświadczenia w pliku 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