Ulepszanie klastra Kubernetes za pomocą silnika AKS w środowisku Azure Stack Hub
Silnik AKS umożliwia aktualizację klastra Kubernetes, który został pierwotnie wdrożony przy użyciu tego narzędzia w usłudze Azure Stack Hub. Klastry można obsługiwać przy użyciu silnika AKS. Zadania konserwacji są podobne do dowolnego systemu IaaS. Powinieneś być świadomy dostępności nowych aktualizacji i używać silnika AKS, aby je zastosować.
Uaktualnianie klastra
Polecenie uaktualnienia aktualizuje wersję platformy Kubernetes i podstawowy obraz systemu operacyjnego. Za każdym razem, gdy uruchamiasz polecenie uaktualniania dla każdego węzła klastra, aparat usługi AKS tworzy nową maszynę wirtualną przy użyciu obrazu podstawowego usługi AKS skojarzonego z wersją używanego aparatu Aks.
W przypadku wersji aparatu AKS 0.73.0 lub starszej można użyć polecenia aks-engine upgrade
, aby zachować aktualność każdego węzła głównego i węzła agenta w klastrze.
W przypadku AKS Engine w wersji 0.75.3 lub nowszej można użyć polecenia aks-engine-azurestack upgrade
do utrzymania aktualności każdego węzła głównego i agenta w klastrze.
Firma Microsoft nie zarządza klastrem. Firma Microsoft udostępnia jednak narzędzie i obraz maszyny wirtualnej, których można użyć do zarządzania klastrem.
W przypadku wdrożonego klastra uaktualnienia obejmują:
- Kubernetes
- Dostawca Kubernetes Azure Stack Hub
- Podstawowy system operacyjny
Podczas uaktualniania klastra produkcyjnego należy wziąć pod uwagę następujące kwestie:
- Czy używasz poprawnej specyfikacji klastra (
apimodel.json
) i grupy zasobów dla klastra docelowego? - Czy używasz niezawodnej maszyny jako maszyny klienckiej do uruchamiania silnika AKS i z której przeprowadzasz operacje uaktualniania?
- Upewnij się, że masz klaster kopii zapasowych i że działa.
- Jeśli to możliwe, uruchom polecenie z maszyny wirtualnej w środowisku usługi Azure Stack Hub, aby zmniejszyć przeskoki sieciowe i potencjalne błędy łączności.
- Upewnij się, że twoja subskrypcja ma wystarczającą ilość miejsca na cały proces. Proces przydziela nowe maszyny wirtualne podczas procesu.
- Nie są planowane żadne aktualizacje systemu ani zaplanowane zadania.
- Skonfiguruj uaktualnienie etapowe w klastrze, który jest skonfigurowany dokładnie jako klaster produkcyjny i przetestuj uaktualnienie przed wykonaniem tego zadania w klastrze produkcyjnym
Kroki uaktualniania do nowszej wersji rozwiązania Kubernetes
Uwaga
Obraz podstawowy usługi AKS jest również aktualizowany, jeśli używasz nowszej wersji aks-engine i obraz jest dostępny w sklepie.
Poniższe instrukcje korzystają z minimalnych kroków, aby przeprowadzić uaktualnienie. Jeśli chcesz uzyskać więcej szczegółów, zobacz artykuł Uaktualnianie klastrów Kubernetes.
Najpierw należy określić wersje, które można aktualizować. Ta wersja zależy od aktualnie używanej wersji, a następnie użyj tej wartości wersji do przeprowadzenia uaktualnienia. Wersje platformy Kubernetes obsługiwane przez aparat usługi AKS można wymienić, uruchamiając następujące polecenie:
Uwaga
W przypadku usługi AKSe w wersji 0.75.3 lub nowszej polecenie pobierania wersji silnika usługi AKS to
aks-engine-azurestack get-versions
.aks-engine get-versions --azure-env AzureStackCloud
Aby uzyskać pełne mapowanie silnika AKS, obrazu bazowego AKS i wersji platformy Kubernetes, zobacz Obsługiwane wersje silnika AKS.
Zbierz informacje potrzebne do uruchomienia
upgrade
polecenia. Polecenieupgrade
używa następujących parametrów:Parametr Przykład opis azure-env AzureStackCloud Aby wskazać silnik AKS, że platforma docelowa to Azure Stack Hub, użyj AzureStackCloud
.lokalizacja lokalny Nazwa regionu usługi Azure Stack Hub. W przypadku ASDK region jest ustawiony na local
.grupa zasobów kube-rg Wprowadź nazwę nowej grupy zasobów lub wybierz istniejącą grupę zasobów. Nazwa zasobu powinna być alfanumeryczna i pisana małymi literami. identyfikator subskrypcji xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wprowadź identyfikator subskrypcji. Aby uzyskać więcej informacji, zobacz Subskrybowanie oferty api-model ./kubernetes-azurestack.json Ścieżka do pliku konfiguracji klastra lub modelu interfejsu API. identyfikator klienta 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ź tajny klucz jednostki usługi. Jest to tajny klucz klienta, który skonfigurowałeś podczas tworzenia usługi. system tożsamości adfs Opcjonalny. Określ rozwiązanie do zarządzania tożsamościami, jeśli używasz usług Federacyjnych Active Directory (AD FS). Po ustawieniu swoich wartości, uruchom następujące polecenie:
Uwaga
W przypadku usługi AKSe w wersji 0.75.3 lub nowszej, polecenie aktualizacji silnika AKS to
aks-engine-azurestack upgrade
.aks-engine upgrade \ --azure-env AzureStackCloud \ --location <for an ASDK is local> \ --resource-group kube-rg \ --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --api-model kube-rg/apimodel.json \ --upgrade-version 1.18.15 \ --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --identity-system adfs # required if using AD FS
Jeśli z jakiegokolwiek powodu operacja uaktualniania napotka błąd, możesz ponownie uruchomić
upgrade
polecenie po rozwiązaniu problemu. Silnik AKS wznowi operację w miejscu, w którym poprzednio zawiodła.
Kroki do aktualizacji tylko obrazu systemu operacyjnego
- Przejrzyj tabelę supported-kubernetes-versions i ustal, czy masz wersję aks-engine i podstawowego obrazu AKS, które planujesz użyć do uaktualnienia. Jeśli korzystasz z AKS Engine w wersji 0.73.0 lub starszej, aby wyświetlić wersję aks-engine, uruchom:
aks-engine version
. Jeśli korzystasz z AKS Engine w wersji 0.75.3 lub nowszej, aby wyświetlić wersję AKS Engine, uruchom:aks-engine-azurestack version
. - Uaktualnij zgodnie silnik AKS na maszynie, na której zainstalowano silnik AKS:
./get-akse.sh --version vx.xx.x
zastępując x.xx.x wersją docelową. - Poproś operatora usługi Azure Stack Hub o dodanie potrzebnej wersji obrazu podstawowego AKS do Azure Stack Hub Marketplace, z którego planujesz korzystać.
-
aks-engine upgrade
Uruchom polecenie przy użyciu tej samej wersji platformy Kubernetes, której już używasz, ale dodaj element--force
. Przykład można zobaczyć w temacie Wymuszanie uaktualnienia.
Kroki aktualizacji klastra do systemu operacyjnego Ubuntu 20.04
Silnik AKS w wersji 0.75.3 lub nowszej umożliwia zaktualizowanie maszyn wirtualnych klastra z systemu Ubuntu 18.04 do wersji 20.04. Wykonaj te kroki:
- Znajdź i zmodyfikuj
api-model.json
plik, który został wygenerowany podczas wdrażania. Powinien to być ten sam plik używany do każdej operacji uaktualniania lub skalowania za pomocą poleceniaaks-engine
. W aKS Engine w wersji 0.75.3 lub nowszej użyj poleceniaaks-engine-azurestack
. - Znajdź sekcje dla
masterProfile
iagentPoolProfiles
, w tych sekcjach zmień wartośćdistro
naaks-ubuntu-20.04
. - Zapisz plik
api-model.json
i użyj plikuapi-model.json
w poleceniuaks-engin upgrade
, tak jak w sekcji Kroki aktualizacji do nowszej wersji Kubernetes.
Kroki aktualizacji klastra w przypadku używania woluminów przechowywania z silnikiem AKS w wersji 0.70.0 lub nowszej
Dostawca chmury dla projektu platformy Azure (znany również jako cloud-controller-manager
zewnętrzny dostawca chmury lub niezależny dostawca chmury) implementuje interfejs dostawcy chmury Kubernetes dla chmur platformy Azure. Implementacja poza drzewem zastępuje przestarzałą implementację drzewa.
W usłudze Azure Stack Hub, począwszy od platformy Kubernetes w wersji 1.21, klastry oparte na AKS Engine będą używać wyłącznie cloud-controller-manager
. W związku z tym w celu wdrożenia klastra Kubernetes w wersji 1.21 lub nowszej wymagane jest ustawienie orchestratorProfile.kubernetesConfig.useCloudControllerManager
na true
w modelu API (na przykład). Proces aktualizacji aparatu AKS automatycznie uaktualni flagę useCloudControllerManager
.
Uwaga
Zagadnienia dotyczące uaktualniania: proces uaktualniania klastra Kubernetes z wersji 1.20 (lub niższej) do wersji 1.21 (lub wyższej) spowoduje przestój obciążeń opartych na wewnętrznym dostawcy woluminów kubernetes.io/azure-disk
. Przed uaktualnieniem do platformy Kubernetes w wersji 1.21 lub nowszej zdecydowanie zaleca się wykonanie pełnej kopii zapasowej danych aplikacji i zweryfikowanie w środowisku przedprodukcyjnym, że zasoby magazynu klastra (PV i PVC) można migrować do nowego dostawcy woluminów. Dowiedz się, jak przeprowadzić migrację do sterownika CSI dysku platformy Azure tutaj.
Dostawcy woluminów
Prowizjonowanie wbudowanych woluminów jest zgodne tylko z wbudowanym dostawcą chmury. W związku z tym klaster w wersji 1.21 lub nowszej musi zawierać sterownik interfejsu magazynu kontenerów (CSI), jeśli obciążenia użytkowników korzystają z magazynu trwałego. Poniżej wymieniono kilka rozwiązań dostępnych w usłudze Azure Stack Hub.
AKS Engine domyślnie nie włączy żadnego sterownika CSI na platformie Azure Stack Hub. W przypadku obciążeń, które wymagają sterownika CSI, można jawnie włączyć
Migrowanie magazynu trwałego do sterownika CSI dysku platformy Azure
Proces uaktualniania klastra opartego na AKS Engine z wersji 1.20 (lub starszej) do wersji 1.21 (lub nowszej) spowoduje przestój obciążeń polegających na kubernetes.io/azure-disk
wbudowanym aprowizatorze woluminów, ponieważ ten aprowizator nie jest częścią dostawcy usług w chmurze dla platformy Azure.
Jeśli dane utrwalone na podstawowych dyskach platformy Azure powinny zostać zachowane, po zakończeniu procesu uaktualniania klastra wymagane są następujące dodatkowe kroki:
- Instalowanie sterownika CSI dysku platformy Azure
- Usuń przestarzałe wewnątrzsystemowe klasy pamięci
- Ponownie utwórz woluminy trwałe i żądania
1. Ręczne instalowanie sterownika CSI dysku platformy Azure
Poniższy skrypt używa Helm
do zainstalowania sterownika CSI dysku platformy Azure:
DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
--namespace kube-system \
--set cloud=AzureStackCloud \
--set controller.runOnMaster=true \
--version ${DRIVER_VERSION}
2. Zastępowanie klas przechowywania
Funkcja kube-addon-manager
automatycznie utworzy klasy magazynu sterowników CSI dysku platformy Azure (disk.csi.azure.com
) po ręcznym usunięciu klas magazynu w drzewie (kubernetes.io/azure-disk
):
IN_TREE_SC="default managed-premium managed-standard"
# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}
# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses
3. Ponowne tworzenie woluminów trwałych
Po zainstalowaniu sterownika CSI dysku platformy Azure i zastąpieniu klas magazynu, następnym krokiem jest ponowne utworzenie woluminów trwałych (PV) i żądań woluminów trwałych (PVC) przy użyciu sterownika CSI dysku platformy Azure (lub alternatywnego rozwiązania CSI).
Jest to wieloetapowy proces, który może być różny w zależności od tego, jak te zasoby zostały początkowo wdrożone. Kluczowe kroki to:
- Usuń wdrożenie lub StatefulSet, które odwołuje się do par PV + PVC do migracji (utwórz kopię zapasową definicji zasobów, jeśli to konieczne).
- Upewnij się, że właściwość PVs
persistentVolumeReclaimPolicy
jest ustawiona na wartośćRetain
(przykład). - Usuń pary PV + PVC, aby przeprowadzić migrację (w razie potrzeby definicje zasobów kopii zapasowej).
- Aby przeprowadzić migrację, zaktualizuj definicję zasobu, usuwając obiekt
azureDisk
i dodając obiektcsi
z odwołaniem do oryginalnego AzureDisk (przykład). - Utwórz ponownie zasoby PV w następującej kolejności, następnie, w razie potrzeby, zasoby PVC, a na koniec wdrożenie lub StatefulSet.
Poniższy skrypt migracji jest dostarczany jako szablon.
Jeśli po uruchomieniu skryptu migracji zasobnik utknął na błędzie "Nie można dołączyć lub zamontować woluminów", upewnij się, że sterownik CSI dysku platformy Azure został zainstalowany i klasy magazynowania zostały odtworzone.
Wymuszanie uaktualnienia
Mogą istnieć warunki, w których należy wymusić uaktualnienie klastra. Na przykład pierwszego dnia wdrożysz klaster w środowisku odłączonym przy użyciu najnowszej wersji platformy Kubernetes. Następnego dnia Ubuntu wyda poprawkę do luki w zabezpieczeniach, dla której firma Microsoft generuje nowy AKS Base Image. Nowy obraz można zastosować, wymuszając uaktualnienie przy użyciu tej samej wdrożonej wersji rozwiązania Kubernetes.
Uwaga
W przypadku AKS w wersji 0.75.3 lub nowszej polecenie aktualizacji silnika AKS to aks-engine-azurestack upgrade
.
aks-engine upgrade \
--azure-env AzureStackCloud
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force
Aby uzyskać instrukcje, sprawdź Wymuszona aktualizacja.