Automatyczne zatrzymywanie uaktualnień klastra Azure Kubernetes Service (AKS) w przypadku zmian powodujących niezgodność interfejsu API

Dotyczy: ✔️ AKS Automatic AKS Standard ✔️

Important

Uaktualnienia inicjowane przez platformę AKS. Od 1 czerwca 2027 r. usługa AKS automatycznie uaktualnia wszystkie klastry, które pozostają w nieobsługiwanej wersji platformy Kubernetes po zakończeniu 60-dniowego okresu prolongaty wsparcia platformy. Uaktualnienie zainicjowane przez platformę nie jest zgodne z oknem obsługi, nie zatrzymuje się w przypadku przestarzałego użycia interfejsu API i może zastąpić budżet zakłóceń Poda, który blokuje opróżnianie węzła, w związku z czym obciążenia mogą zostać przerwane. Przed miesiącem aktualizacji zastąp interfejsy API usunięte z docelowej wersji rozwiązania Kubernetes i zaktualizuj niezgodne dodatki zarządzane samodzielnie. Zachowaj klastry w obsługiwanej wersji rozwiązania Kubernetes, aby uniknąć uaktualnienia zainicjowanego przez platformę. Aby uzyskać więcej informacji, zobacz Przygotowanie do uaktualnień zainicjowanych przez platformę w usłudze AKS.

W tym artykule pokazano, jak Azure Kubernetes Service (AKS) może automatycznie blokować uaktualnienia klastra po wykryciu przestarzałego użycia interfejsu API platformy Kubernetes.

W przypadku większości obciążeń produkcyjnych rozwiązanie AKS Automatic jest zalecanym, domyślnym rozwiązaniem gotowym do użycia produkcyjnego w usłudze AKS. Wykrywanie zmian powodujących niekompatybilność interfejsu API Kubernetes jest wstępnie skonfigurowane zarówno w klastrach AKS Automatic, jak i AKS Standard.

Zachowanie w AKS Automatic i AKS Standard

Oba tryby klastra obejmują następujące zabezpieczenia:

  • AKS Automatic: domyślnie wchodzi w skład zabezpieczeń platformy AKS Automatic gotowej do wdrożenia produkcyjnego.
  • AKS Standard: Domyślnie uwzględnione w klastrach AKS Standard.

W obu trybach usługa AKS może blokować operacje uaktualniania wersji podrzędnej, gdy wykryje niedawne użycie interfejsów API, które są przestarzałe lub zostały usunięte w docelowej wersji platformy Kubernetes.

Overview

Aby pozostać w obsługiwanej wersji rozwiązania Kubernetes, należy uaktualnić klaster co najmniej raz w roku i przygotować się do ewentualnych zakłóceń. Te zakłócenia mogą obejmować niekompatybilne zmiany w interfejsie API, wycofywanie z użycia oraz zależności, takie jak Helm i interfejs pamięci masowej kontenerów (CSI). Przewidywanie tych zakłóceń i migrowanie krytycznych obciążeń bez przestojów może być trudne.

Gdy usługa AKS wykryje użycie przestarzałej wersji interfejsu API dla wersji docelowej, może automatycznie blokować operacje uaktualniania do wersji pomocniczej i powiadamiać Cię o problemie. To zachowanie pomaga uniknąć nieoczekiwanych zakłóceń i daje czas na naprawienie przestarzałego użycia interfejsu API przed kontynuowaniem uaktualniania.

Important

To zabezpieczenie nie ma zastosowania do uaktualnień zainicjowanych przez platformę. Gdy klaster pozostaje w nieobsługiwanej wersji platformy Kubernetes po zakończeniu okresu prolongaty wsparcia platformy, usługa AKS uaktualnia go nawet w przypadku wykrycia przestarzałego użycia interfejsu API. Sprawdź, czy nie używasz przestarzałego interfejsu API, i napraw to przed miesiącem planowanej aktualizacji klastra zainicjowanej przez platformę.

Prerequisites

Upewnij się, że spełnisz następujące wymagania wstępne:

  • Operacja uaktualniania to pomocnicza zmiana wersji rozwiązania Kubernetes dla płaszczyzny sterowania klastrem.
  • Docelowa wersja platformy Kubernetes to 1.26 lub nowsza.
  • Ostatnio widoczne użycie przestarzałych interfejsów API dla wersji docelowej miało miejsce w ciągu 12 godzin przed operacją uaktualniania. Usługa AKS rejestruje użycie co godzinę, więc użycie z ostatniej godziny może nie zostać uwzględnione przez mechanizm wykrywania.

Uwaga

Nie musisz ręcznie włączać tej funkcji wykrywania. Klastry AKS Automatic i AKS Standard konfigurują to wstępnie.

Ogranicz skutki zatrzymanych operacji aktualizacji

Jeśli spełniasz wymagania wstępne, spróbuj przeprowadzić uaktualnienie i zostanie wyświetlony błąd podobny do następującego komunikatu o błędzie:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Użyj jednej z następujących opcji:

  1. W portalu Azure przejdź do zasobu klastra i wybierz pozycję Diagnozuj i rozwiąż problemy

  2. Wybierz Tworzenie, aktualizowanie, usuwanie i skalowanie>wycofania interfejsu API Kubernetes.

    Zrzut ekranu portalu Azure przedstawiający sekcję „Wybrane wycofania interfejsu API Kubernetes”.

  3. Odczekaj 12 godzin od momentu ostatniego wykrycia użycia przestarzałego interfejsu API. Operacje tylko do odczytu nie są objęte przestarzałym użyciem interfejsu API, mianowicie Get/List/Watch. Możesz też sprawdzić wcześniejsze użycie interfejsu API, włączając Szczegółowe informacje o kontenerach i przeglądając dzienniki inspekcji kube.

  4. Ponów próbę aktualizacji klastra.

Pomijanie walidacji w celu ignorowania zmian interfejsu API

Uwaga

Ta metoda wymaga Azure CLI w wersji 2.57 lub nowszej. Jeśli masz zainstalowane rozszerzenie interfejsu wiersza polecenia w wersji zapoznawczej, zaktualizuj go do wersji 3.0.0b10 lub nowszej. Ta metoda nie jest zalecana w przypadku normalnych operacji produkcyjnych, ponieważ przestarzałe interfejsy API w docelowej wersji rozwiązania Kubernetes mogą zakończyć się niepowodzeniem w dłuższej perspektywie. Usuń przestarzałe użycie interfejsu API tak szybko, jak to możliwe po uaktualnieniu.

Przeprowadź aktualizację z pominięciem walidacji, używając polecenia az aks upgrade z parametrem --enable-force-upgrade, i ustaw --upgrade-override-until, aby określić, kiedy kończy się okres pominięcia walidacji. Jeśli nie ustawisz wartości, okno domyślnie będzie mieć wartość trzy dni od bieżącego czasu. Podana data i godzina muszą być w przyszłości.

# Set environment variables
RESOURCE_GROUP_NAME=<your-resource-group-name>
CLUSTER_NAME=<your-cluster-name>
KUBERNETES_VERSION=<target-kubernetes-version>

# Run the upgrade command with validation bypass
az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z

Uwaga

Z to oznaczenie strefy dla zerowego przesunięcia względem UTC/GMT, znanego również jako czas „Zulu”. W tym przykładzie ustawiono koniec okna na 13:00:00 GMT. Aby uzyskać więcej informacji, zobacz Połączone reprezentacje daty i godziny.

Zagadnienia dotyczące środowiska produkcyjnego

W przypadku obciążeń produkcyjnych wykonaj następujące rozwiązania:

  • Traktuj blokowanie uaktualnienia jako mechanizm bezpieczeństwa, a nie stan awarii.
  • Preferuj migrację API zamiast wymuszonego obejścia.
  • Korzystaj z okien serwisowych i kontroli przed aktualizacją.
  • Monitoruj na bieżąco korzystanie z przestarzałych interfejsów API, aby uniknąć blokad aktualizacji w ostatniej chwili.

W tym artykule pokazano, jak automatycznie zatrzymać uaktualnienia klastra AKS w przypadku zmian powodujących niezgodność interfejsu API. Aby dowiedzieć się więcej o dodatkowych opcjach uaktualniania klastrów usługi AKS, zobacz Opcje uaktualniania klastrów Azure Kubernetes Service (AKS).

Aby dowiedzieć się więcej o usłudze AKS Automatic, zobacz następujące artykuły: