Upgrade doplňku Istio service mesh pro Azure Kubernetes Service

Tento článek se zabývá možnostmi upgradu doplňku Istio service mesh pro Službu Azure Kubernetes Service (AKS).

Oznámení o vydání nových dílčích revizí nebo oprav doplňku Istio service mesh se publikují v poznámkách k verzi AKS.

Upgrade podverze

Doplněk Istio umožňuje upgrade dílčí revize pomocí kanárského procesu upgradu. Při zahájení upgradu se řídicí rovina nové (kanárové) revize nasadí spolu s řídicí rovinou staré (stabilní) revize. Úlohy roviny dat pak můžete ručně převést pomocí monitorovacích nástrojů ke sledování stavu úloh během tohoto procesu. Pokud se nezobrazí žádné problémy se stavem úloh, můžete upgrade dokončit, aby v clusteru zůstala jenom nová revize. Jinak se můžete vrátit k předchozí revizi Istio.

Pokud cluster aktuálně používá podporovanou dílčí revizi Istio, upgrady jsou povoleny pouze jednu dílčí revizi najednou. Pokud cluster používá nepodporovanou revizi Istio, musíte upgradovat na nejnižší podporovanou dílčí revizi Istio pro tuto verzi Kubernetes. Potom je možné upgrady znovu provést jednu dílčí revizi najednou.

Následující příklad ukazuje, jak upgradovat z revize asm-1-18 na asm-1-19. Postup je stejný pro všechny dílčí upgrady.

  1. Pomocí příkazu az aks mesh get-upgrades zkontrolujte, které revize jsou pro cluster k dispozici jako cíle upgradu:

    az aks mesh get-upgrades --resource-group $RESOURCE_GROUP --name $CLUSTER
    

    Pokud očekáváte, že se v tomto příkazu nezobrazí novější revize, možná budete muset nejprve upgradovat cluster AKS tak, aby byl kompatibilní s nejnovější revizí.

  2. Pokud jste nastavili konfiguraci sítě pro existující revizi sítě v clusteru, musíte před zahájením kanárového upgradu v dalším kroku vytvořit samostatnou mapu ConfigMap odpovídající nové revizi v aks-istio-system oboru názvů. Tato konfigurace platí v okamžiku, kdy se v clusteru nasadí řídicí rovina nové revize. Další podrobnosti najdete tady.

  3. Zahájení kanárného upgradu z revize asm-1-18 na asm-1-19 spuštění upgradu az aks mesh:

    az aks mesh upgrade start --resource-group $RESOURCE_GROUP --name $CLUSTER --revision asm-1-19
    

    Kanárový upgrade znamená, že řídicí rovina 1.18 je nasazena spolu s řídicí rovinou 1.17. Budou dál existovat, dokud upgrade nedokončíte nebo nevrátíte zpět.

  4. Ověřte pody řídicí roviny odpovídající oběma asm-1-18 a asm-1-19 existují:

    • Ověření istiod podů:

      kubectl get pods -n aks-istio-system
      

      Příklad výstupu:

      NAME                                        READY   STATUS    RESTARTS   AGE
      istiod-asm-1-18-55fccf84c8-dbzlt            1/1     Running   0          58m
      istiod-asm-1-18-55fccf84c8-fg8zh            1/1     Running   0          58m
      istiod-asm-1-19-f85f46bf5-7rwg4             1/1     Running   0          51m
      istiod-asm-1-19-f85f46bf5-8p9qx             1/1     Running   0          51m
      
    • Pokud je povolený příchozí přenos dat, ověřte pody příchozího přenosu dat:

      kubectl get pods -n aks-istio-ingress
      

      Příklad výstupu:

      NAME                                                          READY   STATUS    RESTARTS   AGE
      aks-istio-ingressgateway-external-asm-1-18-58f889f99d-qkvq2   1/1     Running   0          59m
      aks-istio-ingressgateway-external-asm-1-18-58f889f99d-vhtd5   1/1     Running   0          58m
      aks-istio-ingressgateway-external-asm-1-19-7466f77bb9-ft9c8   1/1     Running   0          51m
      aks-istio-ingressgateway-external-asm-1-19-7466f77bb9-wcb6s   1/1     Running   0          51m
      aks-istio-ingressgateway-internal-asm-1-18-579c5d8d4b-4cc2l   1/1     Running   0          58m
      aks-istio-ingressgateway-internal-asm-1-18-579c5d8d4b-jjc7m   1/1     Running   0          59m
      aks-istio-ingressgateway-internal-asm-1-19-757d9b5545-g89s4   1/1     Running   0          51m
      aks-istio-ingressgateway-internal-asm-1-19-757d9b5545-krq9w   1/1     Running   0          51m
      

      Všimněte si, že pody brány příchozího přenosu dat obou revizí se nasazují souběžně. Služba a její IP adresa ale zůstávají neměnné.

  5. Znovu oznamte obor názvů tak, aby všechny nové pody získaly sajdkára Istio přidružená k nové revizi a jeho řídicí rovině:

    kubectl label namespace default istio.io/rev=asm-1-19 --overwrite
    

    Opětovné označování nemá vliv na vaše úlohy, dokud se nerestartují.

  6. Jednotlivé úlohy aplikace se převrácejí jednotlivě tak, že je restartuje. Příklad:

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  7. Zkontrolujte monitorovací nástroje a řídicí panely a zjistěte, jestli jsou vaše úlohy spuštěné v dobrém stavu po restartování. Na základě výsledku máte dvě možnosti:

    • Dokončete kanárný upgrade: Pokud jste spokojeni s tím, že všechny úlohy běží v dobrém stavu podle očekávání, můžete dokončit kanárný upgrade. Dokončení upgradu odebere řídicí rovinu předchozí revize a ponechá řídicí rovinu nové revize v clusteru. Spuštěním následujícího příkazu dokončete kanárný upgrade:

      az aks mesh upgrade complete --resource-group $RESOURCE_GROUP --name $CLUSTER
      
    • Vrácení zpět kanárného upgradu: V případě, že zaznamenáte problémy se stavem úloh, můžete se vrátit k předchozí revizi Istio:

      • Znovu oznamte obor názvů předchozí revizi:

        kubectl label namespace default istio.io/rev=asm-1-18 --overwrite
        
      • Vrácením úloh zpět použijte sajdkár odpovídající předchozí revizi Istio opětovným restartováním těchto úloh:

        kubectl rollout restart deployment <deployment name> -n <deployment namespace>
        
      • Vrácení řídicí roviny zpět na předchozí revizi:

        az aks mesh upgrade rollback --resource-group $RESOURCE_GROUP --name $CLUSTER
        
  8. Pokud byla konfigurace sítě dříve nastavená pro revize, můžete nyní odstranit objekt ConfigMap pro revizi, která byla odebrána z clusteru během dokončení nebo vrácení zpět.

Poznámka:

Ruční opětovné označování oborů názvů při jejich přesunutí na novou revizi může být zdlouhavé a náchylné k chybám. Značky revizí tento problém řeší. Značky revizí jsou stabilní identifikátory, které odkazují na revize a lze je použít, aby se zabránilo opětovnému označení oborů názvů. Místo opětovného označení oboru názvů může operátor sítě jednoduše změnit značku tak, aby odkazovat na novou revizi. Všechny obory názvů označené danou značkou se aktualizují současně. Mějte ale na paměti, že stále potřebujete restartovat úlohy, abyste měli jistotu, že se vloží správná verze istio-proxy sajdkár.

Menší upgrady revizí s bránou příchozího přenosu dat

Pokud aktuálně používáte brány příchozího přenosu dat Istio a provádíte menší upgrade revizí, mějte na paměti, že pody nebo nasazení brány příchozího přenosu dat Istio se nasazují podle revize. Poskytujeme však jednu službu LoadBalancer napříč všemi pody brány příchozího přenosu dat přes více revizí, takže se v průběhu upgradu nezmění externí/interní IP adresa bran příchozího přenosu dat.

Pokud tedy v clusteru existují dvě revize současně, bude příchozí provoz obsluhovat pody příchozí brány příchozího přenosu dat obou revizí.

Upgrade verze opravy

  • Informace o dostupnosti verze doplňku Istio se publikuje ve zprávě k vydání verze AKS.
  • Opravy se automaticky nasadí pro pody istiod a ingress v rámci těchto verzí AKS, které respektují defaultčasové období plánované údržby nastavené pro cluster.
  • Uživatel musí ve svých úlohách inicializovat opravy proxy serveru Istio restartováním podů pro opětovnou instalaci:
    • Zkontrolujte verzi proxy serveru Istio určeného pro nové nebo restartované pody. Tato verze je stejná jako verze podů istiod a Istio ingress po jejich opravě:

      kubectl get cm -n aks-istio-system -o yaml | grep "mcr.microsoft.com\/oss\/istio\/proxyv2"
      

      Příklad výstupu:

      "image": "mcr.microsoft.com/oss/istio/proxyv2:1.18.2-distroless",
      "image": "mcr.microsoft.com/oss/istio/proxyv2:1.18.2-distroless"
      
    • Zkontrolujte verzi image proxy istio pro všechny pody v oboru názvů:

      kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
      sort |\
      grep "mcr.microsoft.com\/oss\/istio\/proxyv2"
      

      Příklad výstupu:

      productpage-v1-979d4d9fc-p4764:	docker.io/istio/examples-bookinfo-productpage-v1:1.18.0, mcr.microsoft.com/oss/istio/proxyv2:1.18.1-distroless
      
    • Pokud chcete aktivovat opětovné spuštění, restartujte úlohy. Příklad:

      kubectl rollout restart deployments/productpage-v1 -n default
      
    • Pokud chcete ověřit, že jsou teď v novějších verzích, zkontrolujte znovu verzi image proxy istio pro všechny pody v oboru názvů:

      kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
      sort |\
      grep "mcr.microsoft.com\/oss\/istio\/proxyv2"
      

      Příklad výstupu:

      productpage-v1-979d4d9fc-p4764:	docker.io/istio/examples-bookinfo-productpage-v1:1.18.0, mcr.microsoft.com/oss/istio/proxyv2:1.18.2-distroless