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

Dotyczy: ✔️ AKS Automatic AKS Standard ✔️

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.

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: