Automatyczne zatrzymywanie uaktualnień klastra usługi Azure Kubernetes Service (AKS) w przypadku zmian powodujących niezgodność interfejsu API
W tym artykule pokazano, jak automatycznie zatrzymywać uaktualnienia klastra usługi Azure Kubernetes Service (AKS) w przypadku zmian powodujących niezgodność interfejsu API.
Omówienie
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.
Klaster usługi AKS można skonfigurować tak, aby automatycznie zatrzymywał operacje uaktualniania składające się z drobnej zmiany wersji z przestarzałymi interfejsami API i powiadamiał o problemie. Ta funkcja pomaga uniknąć nieoczekiwanych zakłóceń i zapewnia czas na rozwiązanie przestarzałych interfejsów API przed kontynuowaniem uaktualniania.
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 pominąć walidację, aby zignorować zmiany interfejsu API.
Usuwanie użycia przestarzałych interfejsów API (zalecane)
W witrynie Azure Portal przejdź do zasobu klastra i wybierz pozycję Diagnozowanie i rozwiązywanie problemów
Wybierz pozycję Tworzenie, uaktualnianie, usuwanie i skalowanie>wycofań interfejsu API kubernetes.
Odczekaj 12 godzin od czasu ostatniego przestarzałego użycia interfejsu API. Czasowniki tylko do odczytu są wykluczone z przestarzałego użycia interfejsu API, czyli Get/List/Watch.( Możesz również sprawdzić wcześniejsze użycie interfejsu API, włączając szczegółowe informacje o kontenerze i eksplorując dzienniki inspekcji kube.
Ponów próbę uaktualnienia klastra.
Pomijanie walidacji w celu ignorowania zmian interfejsu API
Uwaga
Ta metoda wymaga użycia interfejsu wiersza polecenia platformy Azure w wersji 2.57 lub nowszej. Jeśli masz zainstalowane rozszerzenie interfejsu wiersza polecenia w wersji zapoznawczej, musisz przeprowadzić aktualizację do wersji 3.0.0b10
lub nowszej. 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 API i wywołać uaktualnienie. 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 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 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.
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).
Azure Kubernetes Service