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

Podczas uaktualniania obsługiwanego klastra usługi AKS nie można pominąć wersji pomocniczych platformy Kubernetes. Wszystkie uaktualnienia należy wykonać sekwencyjnie według numeru wersji głównej. 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 wersja jest znacznie 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 konieczna będzie instalacja lub uaktualnienie, 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 konieczna będzie instalacja lub uaktualnienie, 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 dowolną liczbę węzłów skonfigurowanych w maksymalnym wzroście) do klastra z uruchomioną określoną wersją platformy Kubernetes.
  • Cordon i opróżnić jeden ze starych węzłów, aby zminimalizować zakłócenia działania aplikacji. Jeśli używasz maksymalnego wzrostu, kordony i opróżniają tyle węzłów w tym samym czasie co określona liczba węzłów buforu.
  • W przypadku długotrwałych zasobników można skonfigurować limit czasu opróżniania węzła, co pozwala na niestandardowy czas oczekiwania na eksmisję zasobników i bezpieczne zakończenie na węzeł. 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-version 1.28 uaktualnienie klastra do 1.28.9.

Aby uzyskać więcej informacji, zobacz Obsługiwane uaktualnienia wersji pomocniczej Kubernetes w usłudze 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, zobacz Automatyczne uaktualnianie klastra usługi 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. Wartość domyślna jednej dla ustawień maksymalnego wzrostu umożliwia usłudze AKS zminimalizowanie zakłóceń obciążenia przez utworzenie dodatkowego węzła przed kordonem/opróżnianie istniejących aplikacji w celu zastąpienia starszego węzła w wersji. 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 maksymalna wartość wzrostu 100% zapewnia najszybszy możliwy proces uaktualniania, ale także powoduje jednoczesne opróżnianie wszystkich węzłów w puli węzłów. Możesz użyć wyższej wartości, takiej jak w środowiskach testowych. W przypadku pul węzłów produkcyjnych zalecamy max_surge ustawienie 33%.

Usługa AKS akceptuje zarówno wartości całkowite, jak i wartość procentową dla maksymalnego wzrostu. Liczba całkowita, taka jak 5 , wskazuje pięć dodatkowych węzłów do zwiększenia. Wartość 50% oznacza wzrost o połowę bieżącej liczby węzłów w puli. Maksymalna wartość procentowa wzrostu może wynosić co najmniej 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 uaktualniania maksymalna wartość wzrostu może wynosić co najmniej 1 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
    

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óry będzie uwzględniany przez usługę AKS w przepływie pracy uaktualniania. 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ż skonfigurowanie zasobników długotrwałych w celu skonfigurowania [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 polecenia lub az aks nodepool update .

    # Set drain timeout for a new node pool
    az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster  --drain-timeout 100
    
    # Update drain timeout for an existing node pool
    az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 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
    

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).