Udostępnij za pośrednictwem


Uaktualnianie klastra usługi Azure Kubernetes Service (AKS)

Część cyklu życia klastra usługi AKS obejmuje okresowe uaktualnianie do najnowszej wersji rozwiązania Kubernetes. Ważne jest zastosowanie najnowszych wersji zabezpieczeń i uaktualnień, aby uzyskać najnowsze funkcje. W tym artykule pokazano, jak sprawdzić i zastosować uaktualnienia do klastra usługi AKS.

Uaktualnienia wersji platformy Kubernetes

Ważne

Podczas uaktualniania obsługiwanego klastra usługi AKS nie można pominąć wersji pomocniczych platformy Kubernetes. Wszystkie uaktualnienia należy wykonać sekwencyjnie według pomocniczego numeru wersji. Na przykład uaktualnienia między 1.14.x ->1.15.x lub 1.15.x ->1.16.x są dozwolone. 1.14.x ->1.16.x nie jest dozwolony. Można pominąć tylko wiele wersji podczas uaktualniania z nieobsługiwanej wersji z powrotem do obsługiwanej wersji. Na przykład można wykonać uaktualnienie z nieobsługiwanej wersji 1.10.x do obsługiwanej wersji 1.12.x , jeśli jest dostępna.

Po wykonaniu uaktualnienia z nieobsługiwanej wersji , która pomija co najmniej dwie wersje pomocnicze, uaktualnienie nie gwarantuje funkcjonalności i jest wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Jeśli twoja wersja jest nieaktualna, zalecamy ponowne utworzenie klastra.

Zanim rozpoczniesz

  • Jeśli używasz interfejsu wiersza polecenia platformy Azure, ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.34.1 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli musisz zainstalować lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Jeśli używasz programu Azure PowerShell, ten artykuł wymaga programu Azure PowerShell w wersji 5.9.0 lub nowszej. Uruchom polecenie Get-InstalledModule -Name Az, aby dowiedzieć się, jaka wersja jest używana. Jeśli musisz zainstalować lub uaktualnić, zobacz Instalowanie programu Azure PowerShell.
  • Wykonywanie operacji uaktualniania Microsoft.ContainerService/managedClusters/agentPools/write wymaga roli RBAC. Aby uzyskać więcej informacji na temat ról RBAC platformy Azure, zobacz operacje dostawcy zasobów platformy Azure.
  • Począwszy od wersji 1.30 kubernetes i 1.27 LTS, interfejsy API beta będą domyślnie wyłączone podczas uaktualniania do nich.

Ostrzeżenie

Uaktualnianie klastra usługi AKS wyzwala proces izolowania i opróżniania węzłów. Jeśli masz dostępny niski limit przydziału zasobów obliczeniowych, uaktualnienie może zakończyć się niepowodzeniem. Aby uzyskać więcej informacji, zobacz Zwiększanie limitów przydziału.

Sprawdzanie dostępnych uaktualnień klastra usługi AKS

Uwaga

Aby być na bieżąco z poprawkami, wydaniami i aktualizacjami usługi AKS, zobacz monitor wersji usługi AKS.

  • Sprawdź, które wersje platformy Kubernetes są dostępne dla klastra az aks get-upgrades , używając polecenia .

    az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
    

    Poniższe przykładowe dane wyjściowe pokazują bieżącą wersję jako 1.26.6 i wyświetla listę dostępnych wersji w obszarze upgrades:

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.26.6",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.3"
          }
        ]
      },
      ...
    }
    

Rozwiązywanie problemów z komunikatami o błędach uaktualniania klastra usługi AKS

Następujące przykładowe dane wyjściowe oznaczają, appservice-kube że rozszerzenie nie jest zgodne z wersją interfejsu wiersza polecenia platformy Azure (wymagana jest minimalna wersja 2.34.1):

The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Jeśli otrzymasz te dane wyjściowe, musisz zaktualizować wersję interfejsu wiersza polecenia platformy Azure. Polecenie az upgrade zostało dodane w wersji 2.11.0 i nie działa z wersjami wcześniejszymi niż 2.11.0. Starsze wersje można zaktualizować, ponownie zainstaluj interfejs wiersza polecenia platformy Azure zgodnie z opisem w temacie Instalowanie interfejsu wiersza polecenia platformy Azure. Jeśli interfejs wiersza polecenia platformy Azure ma wersję 2.11.0 lub nowszą, uruchom polecenie az upgrade , aby uaktualnić interfejs wiersza polecenia platformy Azure do najnowszej wersji.

Jeśli interfejs wiersza polecenia platformy Azure zostanie zaktualizowany i otrzymasz następujące przykładowe dane wyjściowe, oznacza to, że żadne uaktualnienia nie są dostępne:

ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Jeśli nie są dostępne żadne uaktualnienia, utwórz nowy klaster z obsługiwaną wersją platformy Kubernetes i zmigruj obciążenia z istniejącego klastra do nowego klastra. Usługa AKS nie obsługuje uaktualniania klastra do nowszej wersji rozwiązania Kubernetes, gdy az aks get-upgrades pokazuje, że nie są dostępne żadne uaktualnienia.

Uaktualnianie klastra AKS

Podczas procesu uaktualniania klastra usługa AKS wykonuje następujące operacje:

  • Dodaj nowy węzeł buforu (lub tyle węzłów, ile skonfigurowano w maksymalnym wzroście) do klastra uruchamiającego określoną wersję Kubernetes.
  • Odizolować oraz opróżnij jeden ze starych węzłów, aby zminimalizować zakłócenia działań aplikacji. Jeśli używasz maksymalnej fali, izoluje i opróżnia tyle węzłów w tym samym czasie, ile wynosi liczba określona dla węzłów buforu.
  • W przypadku zasobników o długim czasie działania można skonfigurować limit czasu odłączenia węzła, co pozwala na niestandardowy czas oczekiwania na eksmisję zasobników oraz ich bezpieczne zakończenie na węzłach. Jeśli nie zostanie określony, wartość domyślna to 30 minut. Minimalna dozwolona wartość limitu czasu wynosi 5 minut. Maksymalny limit limitu czasu opróżniania wynosi 24 godziny.
  • Gdy stary węzeł zostanie w pełni opróżniony, zostanie ponownie wyświetlony obraz, aby otrzymać nową wersję i staje się węzłem buforu dla następującego węzła, który ma zostać uaktualniony.
  • Opcjonalnie możesz ustawić czas oczekiwania między opróżnianiem węzła i przejściem do obrazu i przejściem do następnego węzła. Krótki interwał umożliwia wykonywanie innych zadań, takich jak sprawdzanie kondycji aplikacji z pulpitu nawigacyjnego narzędzia Grafana podczas procesu uaktualniania. Zalecamy krótki przedział czasu dla procesu uaktualniania, tak blisko 0 minut, jak to możliwe. W przeciwnym razie czas moczenia wyższego węzła wpływa na czas, na jaki długo przed wykryciem problemu. Minimalna wartość czasu moczenia wynosi 0 minut, maksymalnie 30 minut. Jeśli nie zostanie określony, wartość domyślna to 0 minut.
  • Ten proces powtarza się do momentu uaktualnienia wszystkich węzłów w klastrze.
  • Na końcu procesu ostatni węzeł buforu jest usuwany, zachowując istniejącą liczbę węzłów agenta i równoważenie strefy.

Uwaga

Jeśli nie określono poprawki, klaster automatycznie uaktualnia do najnowszej ogólnie dostępnej poprawki określonej wersji pomocniczej. Na przykład ustawienie powoduje --kubernetes-version1.28 uaktualnienie klastra do 1.28.9.

Aby uzyskać więcej informacji, zobacz Obsługiwane uaktualnienia mniejszych wersji Kubernetes dla usługi AKS.

  1. Uaktualnij klaster przy użyciu az aks upgrade polecenia .

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version <KUBERNETES_VERSION>
    
  2. Upewnij się, że uaktualnienie zakończyło się pomyślnie, używając az aks show polecenia .

    az aks show --resource-group myResourceGroup --name myAKSCluster --output table
    

    Następujące przykładowe dane wyjściowe pokazują, że klaster działa teraz w wersji 1.27.3:

    Name          Location    ResourceGroup    KubernetesVersion    ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  -------------------  ----------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.27.3               Succeeded            myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
    

Ustawianie kanału automatycznego uaktualniania

Możesz ustawić kanał automatycznego uaktualniania w klastrze. Aby uzyskać więcej informacji, sprawdź Automatyczne uaktualnianie klastra AKS.

Dostosowywanie uaktualniania skoków węzłów

Ważne

  • Wzrosty węzłów wymagają limitu przydziału subskrypcji dla żądanej maksymalnej liczby wzrostów dla każdej operacji uaktualniania. Na przykład klaster, który ma pięć pul węzłów, z których każda ma liczbę czterech węzłów, ma łącznie 20 węzłów. Jeśli każda pula węzłów ma maksymalną wartość wzrostu 50%, do ukończenia uaktualnienia wymagane jest dodatkowe przydziały zasobów obliczeniowych i adresów IP 10 węzłów (2 węzły * 5 pul).

  • Ustawienie maksymalnego wzrostu w puli węzłów jest trwałe. Kolejne uaktualnienia platformy Kubernetes lub uaktualnienia wersji węzła będą używać tego ustawienia. Wartość maksymalnego wzrostu dla pul węzłów można zmienić w dowolnym momencie. W przypadku pul węzłów produkcyjnych zalecamy ustawienie maksymalnego wzrostu o wartości 33%.

  • Jeśli używasz usługi Azure CNI, sprawdź, czy w podsieci są dostępne adresy IP, aby spełnić wymagania dotyczące adresów IP usługi Azure CNI.

Usługa AKS domyślnie konfiguruje uaktualnienia w celu zwiększenia z jednym dodatkowym węzłem. Domyślna wartość jeden dla ustawień maksymalnego wzrostu umożliwia usłudze AKS zminimalizowanie zakłóceń obciążenia przez utworzenie dodatkowego węzła przed kordonem/rozładowywaniem istniejących aplikacji w celu zastąpienia starszego węzła. Możesz dostosować maksymalną wartość skoku na pulę węzłów. Po zwiększeniu maksymalnej wartości wzrostu proces uaktualniania zostanie ukończony szybciej i może wystąpić zakłócenia w procesie uaktualniania.

Na przykład wartość maksymalnego wzrostu 100% zapewnia najszybsze możliwe uaktualnienie, ale także może powodować jednoczesne rozładowanie wszystkich węzłów w puli węzłów. W środowiskach testowych warto użyć takiej wyższej wartości. W przypadku pul węzłów produkcyjnych zalecamy ustawienie max_surge33%.

Usługa AKS akceptuje zarówno wartości całkowite, jak i wartość procentową dla maksymalnego wzrostu. Na przykład, wartość całkowita 5 oznacza pięć dodatkowych węzłów do zwiększenia. Wartość procentowa 50% wskazuje na wartość wzrostu równą połowie bieżącej liczby węzłów w puli. Maksymalna wartość procentowa wzrostu może wynosić minimalnie 1% i maksymalnie 100%. Wartość procentowa jest zaokrąglona do najbliższej liczby węzłów. Jeśli maksymalna wartość skoku jest wyższa niż wymagana liczba węzłów do uaktualnienia, liczba węzłów do uaktualnienia jest używana dla maksymalnej wartości wzrostu. Podczas aktualizacji maksymalna wartość przeskoku może mieć minimalną wartość 0 i maksymalną wartość równą liczbie węzłów w puli węzłów. Można ustawić większe wartości, ale nie można ustawić maksymalnej liczby węzłów używanych do maksymalnego wzrostu wyższego niż liczba węzłów w puli w momencie uaktualniania.

Ustawianie maksymalnej wartości skoku

  • Ustaw maksymalne wartości skoków dla nowych lub istniejących pul węzłów przy użyciu az aks nodepool add polecenia lub az aks nodepool update .

    # Set max surge for a new node pool
    az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
    
    # Update max surge for an existing node pool 
    az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
    

Dostosowywanie niedostępnych węzłów podczas uaktualniania

Ważne

  • maxSurge musi być ustawione na 0, aby można było ustawić maxUnavailable. Obie wartości nie mogą być aktywne w tym samym czasie.
  • maxUnavailable podczas procesu uaktualniania nie będą tworzone węzły przepięcia. Zamiast tego AKS odgradza nmaxUnavailable węzłów jednocześnie i przenosi zasobniki do innych węzłów w puli agentów. Może to spowodować zakłócenia w pracy, jeśli nie można zaplanować podów.
  • maxUnavailable może spowodować więcej awarii z powodu niespełnionych PodDisruptionBudgets (PDB), ponieważ będzie mniej zasobów dostępnych do przydzielania zasobnikom. Zobacz rozwiązywanie problemów z zasobem PodDisruptionBudgets, aby uzyskać sugestie dotyczące łagodzenia problemów, jeśli występują błędy podczas korzystania z tej funkcji.
  • Nie można ustawić maxUnavailable w pulach węzłów systemowych.

Usługa AKS może również skonfigurować uaktualnienia, aby nie używać tymczasowego węzła i aktualizować węzły na miejscu. Wartość maxUnavailable może służyć do określenia, ile węzłów można odizolować i oczyścić z istniejącej puli węzłów.

Usługa AKS akceptuje zarówno wartości całkowite, jak i wartość procentową dla elementu maxUnavailable. Na przykład, wartość całkowita 5 wskazuje, że pięć węzłów zostanie odizolowanych od istniejących węzłów w puli węzłów. Wartość procentowa 50% oznacza wartość maxUnavailable odpowiadającą połowie bieżącej liczby węzłów w puli. maxUnavailable wartości procentowe mogą być co najmniej wartością 1% i maksymalną wartością 100%. Wartość procentowa jest zaokrąglona do najbliższej liczby węzłów. Podczas uaktualniania, wartość maxUnavailable może wynosić co najmniej 0 i maksymalnie tyle, ile wynosi liczba węzłów w puli węzłów.

Ustaw wartość maxUnavailable

  • Ustaw maxUnvailable wartości dla nowych lub istniejących pul węzłów za pomocą polecenia az aks nodepool add lub az aks nodepool update.

    # Set maxUnavailable for a new node pool
    az aks nodepool add --name mynodepool --resource-group myResourceGroup --cluster-name myManagedCluster --max-surge 0 --max-unavailable 5
    # Update maxUnavailable for an existing node pool 
    az aks nodepool update --name mynodepool --resource-group myResourceGroup --cluster-name myManagedCluster --max-surge 0 --max-unavailable 5
    # Set maxUnavailable at upgrade time for an existing node pool
    az aks nodepool upgrade --name mynodepool --resource-group myResourceGroup --cluster-name myManagedCluster --max-surge 0 --max-unavailable 5
    

Ustawianie wartości limitu czasu opróżniania węzła

Czasami może istnieć długotrwałe obciążenie na określonym zasobniku i nie można go ponownie planować w innym węźle w czasie wykonywania, na przykład obciążenia stanowego intensywnie korzystającego z pamięci, które musi zostać zakończone. W takich przypadkach można skonfigurować limit czasu opróżniania węzła, którego AKS będzie przestrzegać podczas procesu aktualizacji. Jeśli nie określono wartości limitu czasu opróżniania węzła, wartość domyślna to 30 minut. Minimalna dozwolona wartość limitu czasu opróżniania wynosi 5 minut, a maksymalny limit limitu czasu opróżniania wynosi 24 godziny.

Jeśli wartość limitu czasu opróżniania upłynie, a zasobniki są nadal uruchomione, operacja uaktualniania zostanie zatrzymana. Każda kolejna operacja PUT wznowi zatrzymaną modernizację. Zaleca się również, aby długo działające zasobniki skonfigurować [terminationGracePeriodSeconds][https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/].

  • Ustaw limit czasu opróżniania węzła dla nowych lub istniejących pul węzłów przy użyciu az aks nodepool add, lub az aks nodepool update polecenia.

    # Set drain time-out for a new node pool
    az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster  --drain-time-out 100
    
    # Update drain time-out for an existing node pool
    az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-time-out 45
    

Ustawianie wartości czasu moczenia węzła

Aby umożliwić czas oczekiwania między opróżnianiem węzła i przejściem do obrazu i przejściem do następnego węzła, możesz ustawić czas moczenia na wartość z zakresu od 0 do 30 minut. Jeśli nie określono wartości czasu moczenia węzła, wartość domyślna to 0 minut.

  • Ustaw czas moczenia węzła dla nowych lub istniejących pul węzłów przy użyciu az aks nodepool addpolecenia , az aks nodepool updatelub az aks nodepool upgrade .

    # Set node soak time for a new node pool
    az aks nodepool add --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10
    
    # Update node soak time for an existing node pool
    az aks nodepool update --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5
    
    # Set node soak time when upgrading an existing node pool
    az aks nodepool upgrade --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
    

Aktualizacja przy dużej różnicy wersji

Podczas uaktualniania z nieobsługiwanej wersji platformy Kubernetes do obsługiwanej wersji ważne jest przetestowanie obciążeń w wersji docelowej. Usługa AKS dokłada wszelkich starań, aby uaktualnić płaszczyznę sterowania i płaszczyznę danych, ale nie gwarantuje to, że obciążenia będą nadal działać. Jeśli twoje obciążenia bazują na przestarzałych interfejsach API platformy Kubernetes, platforma mogła wprowadzić istotne zmiany lub nowe zachowania (udokumentowane w informacjach o wersji usługi AKS), które należy rozwiązać.

W takich sytuacjach zalecamy przetestowanie obciążeń w nowej wersji i rozwiązanie wszelkich problemów z wersją przed przeprowadzeniem uaktualnienia klastra.

Typowym wzorcem w tej sytuacji jest przeprowadzenie niebieskiego/zielonego wdrożenia zmodyfikowanych obciążeń w nowym klastrze, który znajduje się w obsługiwanej wersji platformy Kubernetes i kierowanie żądań do nowego klastra.

Wyświetlanie zdarzeń uaktualniania

  • Wyświetl zdarzenia uaktualniania kubectl get events przy użyciu polecenia .

    kubectl get events 
    

    W poniższych przykładowych danych wyjściowych przedstawiono niektóre z powyższych zdarzeń wymienionych podczas uaktualniania:

    ...
    default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
    ...
    default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001   Soak duration 5m0s after draining node: aks-nodepool1-96663640-vmss000001
    ...
    default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool nodepool1
    ...
    

Następne kroki

Aby dowiedzieć się, jak skonfigurować automatyczne uaktualnienia, zobacz Konfigurowanie automatycznych uaktualnień dla klastra usługi AKS.

Szczegółowe omówienie najlepszych rozwiązań dotyczących uaktualniania i innych zagadnień można znaleźć w artykule AKS patch and upgrade guidance (Wskazówki dotyczące poprawek i uaktualniania usługi AKS).