Aracılığıyla paylaş


Azure Kubernetes Service için Istio tabanlı hizmet ağı eklentisini yükseltme

Bu makalede, Azure Kubernetes Service (AKS) için Istio tabanlı hizmet ağı eklentisi yükseltme deneyimleri ele alınmaktadır.

Istio tabanlı hizmet ağı eklentisinde yeni küçük düzeltmelerin veya düzeltme eklerinin yayınları hakkındaki duyurular AKS sürüm notlarında yayımlanır. Sürüm zamanlaması ve hizmet ağı eklentisi düzeltmeleri için destek hakkında daha fazla bilgi edinmek için destek ilkesini okuyun.

Küçük düzeltme yükseltmesi

Istio eklentisi, kanarya yükseltme işlemini kullanarak küçük düzeltmenin yükseltilmesine izin verir. Yükseltme başlatıldığında, yeni (kanarya) düzeltmenin kontrol düzlemi, ilk (kararlı) düzeltmenin kontrol düzlemi ile birlikte dağıtılır. Ardından, bu işlem sırasında iş yüklerinin durumunu izlemek için izleme araçlarını kullanırken veri düzlemi iş yüklerini el ile devredebilirsiniz. İş yüklerinizin durumuyla ilgili herhangi bir sorun gözlemlemezseniz, kümede yalnızca yeni düzeltmenin kalması için yükseltmeyi tamamlayabilirsiniz. Aksi halde, Istio'nun önceki düzeltmesine geri dönebilirsiniz.

Küme şu anda Istio'nun desteklenen bir küçük düzeltmesini kullanıyorsa, yükseltmelere aynı anda yalnızca bir küçük düzeltmeye izin verilir. Kümede Istio'nun desteklenmeyen bir düzeltmesi kullanılıyorsa, bu Kubernetes sürümü için Istio'nun desteklenen en düşük ikincil düzeltmesine yükseltmeniz gerekir. Bundan sonra, yükseltmeler bir kerede bir küçük düzeltme yapılabilir.

Aşağıdaki örnekte, düzeltmeden asm-1-20 asm-1-21sürümüne yükseltme işlemi gösterilmektedir. Adımlar tüm küçük yükseltmelerde aynıdır.

  1. Küme için yükseltme hedefi olarak hangi düzeltmelerin kullanılabilir olduğunu denetlemek için az aks mesh get-upgrades komutunu kullanın:

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

    Bu komut tarafından döndürülmeyen daha yeni bir düzeltme görmeyi bekliyorsanız, en yeni düzeltmeyle uyumlu olması için önce AKS kümenizi yükseltmeniz gerekebilir.

  2. Kümenizdeki mevcut mesh düzeltmesi için mesh yapılandırması ayarladıysanız, sonraki adımda kanarya yükseltmesini başlatmadan önce ad alanında aks-istio-system yeni düzeltmeye karşılık gelen ayrı bir ConfigMap oluşturmanız gerekir. Bu yapılandırma, yeni düzeltmenin kontrol düzlemi kümeye dağıtıldığında geçerlidir. Daha fazla ayrıntı için buraya bakın.

  3. Az aks mesh upgrade start komutunu kullanarak düzeltmeden asm-1-20 kanarya asm-1-21 yükseltmesi başlatın:

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

    Kanarya yükseltmesi, 1.20 kontrol düzleminin 1.21 kontrol düzlemi ile birlikte dağıtılacağı anlamına gelir. Siz yükseltmeyi tamamlayana veya geri alana kadar birlikte çalışmaya devam ederler.

  4. Her ikisine karşılık asm-1-20 gelen ve asm-1-21 var olan denetim düzlemi podlarını doğrulayın:

    • Podları doğrulama istiod :

      kubectl get pods -n aks-istio-system
      

      Örnek çıkış:

      NAME                                        READY   STATUS    RESTARTS   AGE
      istiod-asm-1-20-55fccf84c8-dbzlt            1/1     Running   0          58m
      istiod-asm-1-20-55fccf84c8-fg8zh            1/1     Running   0          58m
      istiod-asm-1-21-f85f46bf5-7rwg4             1/1     Running   0          51m
      istiod-asm-1-21-f85f46bf5-8p9qx             1/1     Running   0          51m
      
    • Giriş etkinse giriş podlarını doğrulayın:

      kubectl get pods -n aks-istio-ingress
      

      Örnek çıkış:

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

      Her iki düzeltmenin giriş ağ geçidi podlarının yan yana dağıtıldığını gözlemleyin. Ancak hizmet ve IP'si sabit kalır.

  5. Tüm yeni podların yeni düzeltmeyle ilişkili Istio sepetini ve kontrol düzlemini alması için ad alanını yeniden etiketle:

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

    Yeniden etiketleme, yeniden başlatılana kadar iş yüklerinizi etkilemez.

  6. Uygulama iş yüklerinizin her birini yeniden başlatarak tek tek dağıtın. Örneğin:

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  7. yeniden başlatmadan sonra iş yüklerinizin tümünün iyi durumda çalışıp çalışmadığını belirlemek için izleme araçlarınızı ve panolarınızı denetleyin. Sonuca bağlı olarak iki seçeneğiniz vardır:

    • Kanarya yükseltmesini tamamlayın: İş yüklerinin tümünün beklendiği gibi iyi durumda çalıştığından memnunsanız, kanarya yükseltmesini tamamlayabilirsiniz. Yükseltmenin tamamlanması, önceki düzeltmenin kontrol düzlemini kaldırır ve kümede yeni düzeltmenin kontrol düzleminin arkasında kalır. Kanarya yükseltmesini tamamlamak için aşağıdaki komutu çalıştırın:

      az aks mesh upgrade complete --resource-group $RESOURCE_GROUP --name $CLUSTER
      
    • Kanarya yükseltmesini geri alma: İş yüklerinizin durumuyla ilgili herhangi bir sorun gözlemlemeniz durumunda, Istio'nun önceki düzeltmesine geri dönebilirsiniz:

      • Ad alanını önceki düzeltmeye yeniden etiketle:

        kubectl label namespace default istio.io/rev=asm-1-20 --overwrite
        
      • Bu iş yüklerini yeniden başlatarak önceki Istio düzeltmesine karşılık gelen sepet kullanmak için iş yüklerini geri alma:

        kubectl rollout restart deployment <deployment name> -n <deployment namespace>
        
      • Kontrol düzlemini önceki düzeltmeye geri alma:

        az aks mesh upgrade rollback --resource-group $RESOURCE_GROUP --name $CLUSTER
        
  8. Düzeltmeler için daha önce mesh yapılandırması ayarlandıysa, artık tamamlama/geri alma sırasında kümeden kaldırılan düzeltme için ConfigMap'i silebilirsiniz.

Not

Ad alanlarını yeni bir düzeltmeye taşırken el ile yeniden etiketlemek yorucu ve hataya açık olabilir. Düzeltme etiketleri bu sorunu çözer. Düzeltme etiketleri, düzeltmelere işaret eden kararlı tanımlayıcılardır ve ad alanlarının yeniden etiketlenmesinden kaçınmak için kullanılabilir. Bir mesh işleci, ad alanını yeniden etiketlemek yerine etiketi yeni bir düzeltmeye işaret eden şekilde değiştirebilir. Bu etiketle etiketlenen tüm ad alanları aynı anda güncelleştirilir. Ancak, sepetlerin doğru sürümünün istio-proxy eklenmiş olduğundan emin olmak için iş yüklerini yeniden başlatmanız gerektiğini unutmayın.

Giriş ağ geçidi ile küçük düzeltme yükseltmeleri

Şu anda Istio giriş ağ geçitlerini kullanıyorsanız ve küçük bir düzeltme yükseltmesi gerçekleştiriyorsanız, Istio giriş ağ geçidi podlarının /dağıtımlarının düzeltme başına dağıtıldığını unutmayın. Ancak, birden çok düzeltme üzerinden tüm giriş ağ geçidi podlarında tek bir LoadBalancer hizmeti sağlıyoruz, bu nedenle giriş ağ geçitlerinin dış/iç IP adresi yükseltme boyunca değişmez.

Bu nedenle, kanarya yükseltmesi sırasında kümede aynı anda iki düzeltme mevcut olduğunda, her iki düzeltmenin giriş ağ geçidi podları gelen trafiğe hizmet eder.

Yatay pod otomatik ölçeklendirme özelleştirmeleri ile küçük düzeltme yükseltmeleri

Istiod veya giriş ağ geçitleri için yatay pod otomatik ölçeklendirme (HPA) ayarlarını özelleştirdiyseniz, kanarya yükseltmesi sırasında tutarlılığı korumak için HPA ayarlarının her iki düzeltmeye nasıl uygulandığına ilişkin aşağıdaki davranışa dikkat edin:

  • Yükseltme başlatmadan önce HPA belirtimini güncelleştirirseniz, yeni kontrol düzlemi yüklendiğinde mevcut (kararlı) düzeltmedeki ayarlar kanarya düzeltmesinin HPA'larına uygulanır.
  • Bir kanarya yükseltmesi devam ederken HPA belirtimini güncelleştirirseniz kararlı düzeltmenin HPA belirtimi öncelikli olur ve kanarya düzeltmesinin HPA'sına uygulanır.
    • Yükseltme sırasında kararlı düzeltmenin HPA'sını güncelleştirirseniz, kanarya düzeltmesinin HPA belirtimi kararlı düzeltmeye uygulanan yeni ayarları yansıtacak şekilde güncelleştirilir.
    • Bir yükseltme sırasında kanarya düzeltmesinin HPA'sını güncelleştirirseniz, kanarya düzeltmesinin HPA belirtimi kararlı düzeltmenin HPA belirtimine geri döndürülür.

Düzeltme eki sürümü yükseltme

  • Istio eklenti düzeltme eki sürümü kullanılabilirlik bilgileri AKS sürüm notlarında yayımlanır.
  • Düzeltme ekleri, küme için ayarlanan planlı bakım penceresine uygun default olan bu AKS sürümlerinin bir parçası olarak istiod ve giriş podları için otomatik olarak dağıtılır.
  • Kullanıcının yeniden sorgulama için podları yeniden başlatarak iş yüklerinde Istio proxy'sine düzeltme eki başlatması gerekir:
    • Yeni veya yeniden başlatılan podlar için tasarlanan Istio proxy sürümünü denetleyin. Bu sürüm, düzeltme eki uygulamadan sonra istiod ve Istio giriş podlarının sürümüyle aynıdır:

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

      Örnek çıkış:

      "image": "mcr.microsoft.com/oss/istio/proxyv2:1.20.6-distroless",
      "image": "mcr.microsoft.com/oss/istio/proxyv2:1.20.6-distroless"
      
    • Ad alanı içindeki tüm podlar için Istio proxy görüntüsü sürümünü denetleyin:

      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"
      

      Örnek çıkış:

      productpage-v1-979d4d9fc-p4764:	docker.io/istio/examples-bookinfo-productpage-v1:1.20.0, mcr.microsoft.com/oss/istio/proxyv2:1.20.6-distroless
      
    • Yeniden değerlendirmeyi tetikleme için iş yüklerini yeniden başlatın. Örneğin:

      kubectl rollout restart deployments/productpage-v1 -n default
      
    • Artık daha yeni sürümlerde olduklarını doğrulamak için ad alanı içindeki tüm podlar için Istio proxy görüntüsü sürümünü yeniden denetleyin:

      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"
      

      Örnek çıkış:

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

Not

Yükseltmeler sırasında karşılaşılan herhangi bir sorun olması durumunda mesh düzeltme yükseltmelerinin sorunlarını giderme makalesine bakın