Udostępnij za pośrednictwem


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.

  1. W witrynie Azure Portal przejdź do zasobu klastra i wybierz pozycję Diagnozowanie i rozwiązywanie problemów

  2. Wybierz pozycję Tworzenie, uaktualnianie, usuwanie i skalowanie>wycofań interfejsu API kubernetes.

    Zrzut ekranu witryny Azure Portal przedstawiający sekcję

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

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

  1. Pomiń walidację, aby zignorować zmiany powodujące niezgodność interfejsu API i wywołać uaktualnienie. Określ flagę enable-force-upgrade i ustaw upgrade-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 na 13: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).