Stoppa uppgraderingar av Azure Kubernetes Service-kluster (AKS) automatiskt vid icke-bakåtkompatibla API-ändringar

Gäller för: ✔️ AKS Automatic ✔️ AKS Standard

Den här artikeln visar hur Azure Kubernetes Service (AKS) automatiskt kan blockera klusteruppgraderingar när den identifierar föråldrad Kubernetes API-användning.

För de flesta produktionsarbetsbelastningar är AKS Automatic den rekommenderade produktionsklara standardupplevelsen för AKS. Identifiering av icke-bakåtkompatibla ändringar i Kubernetes-API:er är förkonfigurerad i både AKS Automatic- och AKS Standard-kluster.

Beteende i AKS Automatic och AKS Standard

Båda klusterlägena omfattar följande skydd:

  • AKS Automatic: Ingår som standard som en del av AKS Automatics produktionsfärdiga plattformsskydd.
  • AKS Standard: Ingår som standard i AKS Standard-kluster.

I båda lägena kan AKS blockera mindre versionsuppgraderingsåtgärder när den identifierar den senaste användningen av API:er som är inaktuella eller borttagna i kubernetes-målversionen.

Översikt

Om du vill hålla dig inom en Kubernetes-version som stöds måste du uppgradera klustret minst en gång per år och förbereda dig för eventuella störningar. Dessa störningar kan omfatta icke bakåtkompatibla API-ändringar, utfasningar och beroenden såsom Helm och Container Storage Interface (CSI). Det kan vara svårt att förutse dessa störningar och migrera kritiska arbetsbelastningar utan driftstopp.

När AKS identifierar inaktuell API-användning för målversionen kan den automatiskt blockera mindre versionsuppgraderingsåtgärder och varna dig om problemet. Det här beteendet hjälper dig att undvika oväntade störningar och ger dig tid att åtgärda inaktuell API-användning innan du fortsätter uppgraderingen.

Prerequisites

Se till att du uppfyller följande krav:

  • Uppgraderingsåtgärden är en kubernetes-delversionsändring för klusterkontrollplanet.
  • Kubernetes-målversionen är 1.26 eller senare.
  • Den senaste användningen av inaktuella API:er för målversionen inträffade inom 12 timmar före uppgraderingen. AKS registrerar användning en gång i timmen, så användning under den senaste timmen kommer därför inte nödvändigtvis att visas i identifieringen.

Kommentar

Du behöver inte aktivera den här identifieringsfunktionen manuellt. AKS Automatic- och AKS Standard-kluster förkonfigurerar det.

Begränsa effekterna av avbrutna uppgraderingsåtgärder

Om du uppfyller kraven kan du försöka uppgradera och få ett felmeddelande som liknar följande felmeddelande:

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"
})

Använd något av följande alternativ:

  1. I Azure Portal navigerar du till klusterresursen och väljer Diagnostisera och lösa problem

  2. Välj Skapa, uppgradera, ta bort och skala>Kubernetes API-utfasningar.

    En skärmbild av Azure Portal som visar avsnittet

  3. Vänta 12 timmar från det att den senaste inaktuella API-användningen sågs. Skrivskyddade verb undantas från den inaktuella API-användningen, nämligen Get/List/Watch. Du kan också kontrollera tidigare API-användning genom att aktivera containerinsikter och utforska kube-granskningsloggar.

  4. Försök uppgradera klustret igen.

Kringgå verifiering för att ignorera API-ändringar

Kommentar

Den här metoden kräver Azure CLI version 2.57 eller senare. Om du har installerat CLI-tillägget för förhandsversionen uppdaterar du till version 3.0.0b10 eller senare. Den här metoden rekommenderas inte för normala produktionsåtgärder eftersom inaktuella API:er i kubernetes-målversionen kan misslyckas på lång sikt. Ta bort inaktuell API-användning så snart som möjligt efter uppgraderingen.

Kör uppgraderingen och kringgå valideringen med kommandot az aks upgrade tillsammans med --enable-force-upgrade, och ange --upgrade-override-until för att definiera när tidsfönstret för förbigåendet upphör. Om du inte anger något värde är fönstret som standard tre dagar från aktuell tid. Angivet datum och tid måste vara i framtiden.

# 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

Kommentar

Z är zonbeteckningen för nollförskjutningen från UTC/GMT, även kallad ”Zulu”-tid. I det här exemplet anges slutet av fönstret till 13:00:00 GMT. Mer information finns i Kombinerade datum- och tidsrepresentationer.

Produktionsöverväganden

Följ dessa metoder för produktionsarbetsbelastningar:

  • Behandla uppgraderingsblockering som en säkerhetsmekanism, inte ett feltillstånd.
  • Föredrar API-migrering framför force bypass.
  • Använd planerade underhållsperioder och kontroller före uppgraderingen.
  • Övervaka inaktuell API-användning kontinuerligt för att undvika uppgraderingsblock i sista minuten.

Den här artikeln visade hur du automatiskt stoppar uppgraderingar av AKS-kluster vid icke bakåtkompatibla API-ändringar. Mer information om fler uppgraderingsalternativ för AKS-kluster finns i Uppgraderingsalternativ för AKS-kluster (Azure Kubernetes Service).

Mer information om AKS Automatic finns i följande artiklar: