Automatyczne zatrzymywanie uaktualnień klastra usługi Azure Kubernetes Service (AKS) w przypadku zmian powodujących niezgodność interfejsu API
Aby pozostać w obsługiwanej wersji rozwiązania Kubernetes, musisz uaktualnić klaster co najmniej raz w roku i przygotować się do wszystkich możliwych zakłóceń. Te zakłócenia obejmują te, które są spowodowane zmianami powodującymi niezgodność interfejsu API, wycofywaniem i zależnościami, takimi jak helm i interfejs magazynu kontenerów (CSI). Przewidywanie tych zakłóceń i migrowanie krytycznych obciążeń bez przestojów może być trudne.
Usługa AKS automatycznie zatrzymuje operacje uaktualniania składające się z drobnej zmiany wersji z przestarzałymi interfejsami API i wysyła komunikat o błędzie, aby powiadomić Cię o problemie.
Zanim rozpoczniesz
Przed rozpoczęciem 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.
- Uaktualniona wersja platformy Kubernetes to 1.26 lub nowsza.
- Ostatnio widoczne użycie przestarzałych interfejsów API dla wersji docelowej, którą uaktualniasz, musi nastąpić w ciągu 12 godzin przed operacją uaktualniania. Usługa AKS rejestruje użycie godzinowo, więc w wykryciu nie ma gwarancji, że żadne użycie przestarzałych interfejsów API w ciągu jednej godziny nie jest gwarantowane.
Eliminowanie zatrzymanych operacji uaktualniania
Jeśli spełniasz wymagania wstępne, spróbuj przeprowadzić uaktualnienie i zostanie wyświetlony komunikat o błędzie podobny do następującego przykładowego 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"
})
Istnieją dwie opcje rozwiązania problemu. Możesz usunąć użycie przestarzałych interfejsów API (zalecane) lub obejść walidację, aby zignorować zmiany interfejsu API.
Usuwanie użycia przestarzałych interfejsów API (zalecane)
W witrynie Azure Portal przejdź do strony przeglądu klastra i wybierz pozycję Diagnozuj i rozwiąż problemy.
Przejdź do kategorii Tworzenie, uaktualnianie, usuwanie i skalowanie , a następnie wybierz pozycję Wycofanie interfejsu API Kubernetes.
Odczekaj 12 godzin od czasu ostatniego przestarzałego użycia interfejsu API. Sprawdź czasownik w przestarzałym użyciu interfejsu API, aby sprawdzić, czy jest to zegarek.
Ponów próbę uaktualnienia klastra.
Możesz również sprawdzić poprzednie użycie interfejsu API, włączając Szczegółowe informacje kontenera i eksplorując dzienniki inspekcji kube. Sprawdź czasownik w przestarzałym użyciu interfejsu API, aby dowiedzieć się, czy jest to przypadek użycia zegarka.
Pomijanie walidacji w celu ignorowania zmian interfejsu API
Uwaga
Ta metoda wymaga użycia interfejsu wiersza polecenia platformy Azure w wersji 2.53 lub nowszej. Jeśli masz zainstalowane rozszerzenie interfejsu aks-preview
wiersza polecenia, musisz przeprowadzić aktualizację do wersji lub nowszej 0.5.154
. Ta metoda nie jest zalecana, ponieważ przestarzałe interfejsy API w docelowej wersji platformy Kubernetes mogą nie działać długoterminowo. Zalecamy jak najszybsze usunięcie ich po zakończeniu uaktualniania.
Pomiń walidację, aby zignorować zmiany powodujące niezgodność interfejsu
az aks update
API przy użyciu polecenia . Określ flagęenable-force-upgrade
i ustawupgrade-override-until
właściwość, aby zdefiniować koniec okna, podczas którego walidacja jest pomijana. Jeśli żadna wartość nie jest ustawiona, domyślnie okno zostanie ustawione na trzy dni od bieżącego czasu. Określona data i godzina muszą być w przyszłości.az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
Uwaga
Z
to wyznaczanie strefy dla zerowego przesunięcia UTC/GMT, nazywanego również czasem "Zulu". W tym przykładzie ustawiono koniec okna na13:00:00
GMT. Aby uzyskać więcej informacji, zobacz Połączone reprezentacje daty i godziny.Gdy poprzednie polecenie zakończy się pomyślnie, możesz ponowić próbę wykonania operacji uaktualniania.
az aks upgrade --name myAKSCluster --resource-group myResourceGroup --kubernetes-version <KUBERNETES_VERSION>
Następne kroki
W tym artykule pokazano, jak automatycznie zatrzymywać uaktualnienia klastra usługi AKS w przypadku zmian powodujących niezgodność interfejsu API. Aby dowiedzieć się więcej na temat dodatkowych opcji uaktualniania klastrów usługi AKS, zobacz Opcje uaktualniania klastrów usługi Azure Kubernetes Service (AKS).