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.

  1. W witrynie Azure Portal przejdź do strony przeglądu klastra i wybierz pozycję Diagnozuj i rozwiąż problemy.

  2. Przejdź do kategorii Tworzenie, uaktualnianie, usuwanie i skalowanie , a następnie wybierz pozycję Wycofanie interfejsu API Kubernetes.

    A screenshot of the Azure portal showing the 'Selected Kubernetes API deprecations' section.

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

  4. 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 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 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 na 13: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).