Argo Rollouts, bir Kubernetes denetleyicisi ve CRD kümesidir. Alibaba Cloud Service Mesh (ASM) ile birlikte kullanıldığında uygulamaları güvenli bir şekilde güncellemek için güçlü kanarya sürümleri uygulamanıza olanak tanır. Bu strateji, kullanıcı trafiğinin küçük bir yüzdesini kademeli olarak yeni bir sürüme yönlendirmenize, performansını izlemenize ve ardından tüm kullanıcılara aşamalı olarak yaymanıza imkan verir. Bu yaklaşım dağıtım hatalarının riskini en aza indirir, hizmet kararlılığını sağlar ve iş sürekliliğini korurken uygulamalar üzerinde yineleme yapmanıza olanak tanıyan sorunsuz bir kullanıcı deneyimi sunar.
Ön koşullar
Sürüm 1.12.4.50 veya üzeri bir ASM örneği oluşturulmuştur. Daha fazla bilgi için bkz. ASM örneği oluşturma.
kubectl kullanarak ASM örneğine bağlanılmıştır. Daha fazla bilgi için bkz. Istio kaynaklarına erişmek için kontrol düzleminde kubectl kullanma.
Hazırlıklar
Argo Rollouts'u yükleme
Argo Rollouts'u yüklemek için aşağıdaki adımları izleyin. Daha fazla bilgi için resmi Argo Rollouts belgelerine bakın.
-
Argo Rollouts denetleyicisini yüklemek için aşağıdaki komutları çalıştırın.
kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml -
kubectl için Argo Rollouts eklentisini yüklemek için aşağıdaki komutu çalıştırın.
Bu eklenti, kubectl ile dağıtım yönetimini basitleştirir.
brew install argoproj/tap/kubectl-argo-rollouts
Veri düzlemi KubeAPI erişimini etkinleştirme
ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
Enable Data-plane KubeAPI access öğesinin sağ tarafında Enable öğesini tıklayın.
Açılan iletişim kutusunda Submit öğesini tıklayın.
Kanarya sürümü
Bu konuda, bir uygulamanın kararlı ve kanarya sürümlerini oluşturup trafiği kademeli olarak kanarya sürümüne kaydırarak kanarya sürümünün nasıl gerçekleştirileceği gösterilmektedir. Kanarya sürümleri hakkında daha fazla bilgi için bkz. ve Kanarya sürümü yapılandırma.
Adım 1: Rollout ve Service kaynaklarını oluşturma
-
Rollout kaynağını oluşturun.
-
Aşağıdaki içeriğe sahip rollout.yaml adlı bir dosya oluşturun.
strategyalanı dağıtım stratejisini tanımlar. Aşağıda anahtar parametreler açıklanmıştır:setWeight: Kanarya sürümüne yönlendirilecek trafik yüzdesini belirtir.pause:durationayarlanmazsa manuel güncelleme gerekir.durationayarlanırsa sistem belirtilendurationsüresini bekleyerek otomatik güncelleme gerçekleştirir.
-
Rollout kaynağını kümeye dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f rollout.yaml
-
-
Service kaynaklarını oluşturun.
-
Aşağıdaki içeriğe sahip service.yaml adlı bir dosya oluşturun.
apiVersion: v1 kind: Service metadata: name: istio-rollout-canary spec: ports: - port: 80 targetPort: http protocol: TCP name: http selector: app: istio-rollout --- apiVersion: v1 kind: Service metadata: name: istio-rollout-stable spec: ports: - port: 80 targetPort: http protocol: TCP name: http selector: app: istio-rollout -
Service kaynaklarını kümeye dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f service.yaml
-
Adım 2: Istio kaynaklarını oluşturma
-
Sanal hizmet oluşturun.
Veri düzlemi KubeAPI erişimini etkinleştirdiğiniz için veri düzleminin KubeConfig dosyasını kullanarak VirtualService, Gateway ve DestinationRule gibi ASM'deki Istio kaynaklarına erişebilirsiniz. Alternatif olarak Istio kaynaklarını ASM konsolu üzerinden veya ASM KubeConfig kullanarak da oluşturabilirsiniz.
-
Aşağıdaki içeriğe sahip istio-rollout-vsvc.yaml adlı bir dosya oluşturun.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: istio-rollout-vsvc spec: gateways: - istio-rollout-gateway hosts: - '*' http: - match: - uri: prefix: / name: primary route: - destination: host: istio-rollout-stable weight: 100 - destination: host: istio-rollout-canary -
istio-rollout-vsvc sanal hizmetini dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f istio-rollout-vsvc.yaml
-
-
Ağ geçidi oluşturun.
-
Aşağıdaki içeriğe sahip istio-rollout-gateway.yaml adlı bir dosya oluşturun.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: istio-rollout-gateway spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP -
istio-rollout-gateway ağ geçidini dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f istio-rollout-gateway.yaml
-
Adım 3: ASM Ağ Geçidi oluşturma
Test trafiği için giriş noktası olarak hizmet verecek şekilde 80 numaralı bağlantı noktasını dinleyen bir ASM Ağ Geçidi oluşturun.
ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
-
Ingress Gateway sayfasında Create öğesini tıklayın. Ağ geçidi için temel parametreleri ayarlayın ve ardından Create öğesini tıklayın.
Aşağıdaki tabloda anahtar parametreler açıklanmaktadır. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma.
Parametre
Açıklama
Name
ingressgateway girin.
Gateway types
North-South IngressGateway seçeneğini belirleyin.
Port Mapping
Add Port öğesini tıklayın. Yeni satırda Protocol değerini HTTP ve Service Port değerini 80 olarak ayarlayın.
Adım 4: Rollout durumunu kontrol etme
Rollout kaynağının durumunu kontrol etmek için aşağıdaki komutu çalıştırın.
kubectl argo rollouts get rollout istio-rollout
Beklenen çıktı:
kubectl argo rollouts get rollout istio-rollout
Name: istio-rollout
Namespace: default
Status: Healthy
Strategy: Canary
Step: 18/18
SetWeight: 100
ActualWeight: 100
Images: argoproj/rollouts-demo:blue (stable)
Replicas:
Desired: 1
Current: 1
Updated: 1
Ready: 1
Available: 1
NAME KIND STATUS AGE INFO
⟳ istio-rollout Rollout Healthy 52s
└──# revision:1
└──⧉ istio-rollout-7f96d86486 ReplicaSet Healthy 52s stable
└──□ istio-rollout-7f96d86486-vpqvb Pod Running 52s ready:2/2
Adım 5: Rollout'un ilk durumunu test etme
-
ASM Ağ Geçidinin IP adresini alın.
ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
Hedef ağ geçidini bulun ve IP adresini Service address sütunundan alın.
-
Web tarayıcınızda http://<ASM_Ağ_Geçidi_IP_adresi>/ adresine gidin.
Sayfada karelerden oluşan bir ızgara görüntülenir. Bu sayfa, kareleri döndürülen renkle doldurmak için http://<ASM_Ağ_Geçidi_IP_adresi>/color adresine eşzamanlı olarak çağrı yapar.
istio-rolloutRollout'unda belirtilen renkbluerengidir. Kanarya sürümü henüz başlamadığından tüm kareler mavidir.LATENCY kaydırıcısı 0 saniyeye ve ERROR kaydırıcısı %0'a ayarlanmıştır. Tüm kareler maviyle doldurulmuş olup bu durum ilk durumun normal olduğunu gösterir.
Adım 6: Rollout'u güncelleme
Bu örnekte sarı renk kanarya sürümünü temsil eder. http://<ASM_Ağ_Geçidi_IP_adresi>/ adresindeki karelerin rengini mavidan sarıya kademeli olarak değiştirerek kanarya sürümünü göstereceksiniz.
-
Görüntü sürümünü güncelleyin.
-
Görüntü sürümünü güncellemek için aşağıdaki komutu çalıştırın.
kubectl argo rollouts set image istio-rollout "*=argoproj/rollouts-demo:yellow" -
Konteyner görüntüsü sürümlerini kontrol edin.
ACK konsolu adresinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında kümenizin adını tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
-
Name sütununda hedef podların görüntü sürümlerini kontrol edin.
Sarı sürüm (kanarya sürümü) için bir pod oluşturulurken mavi sürüm (kararlı sürüm) için pod hala mevcuttur.
-
-
Tarayıcınızda http://<ASM_Ağ_Geçidi_IP_adresi>/ adresine gidin.
Sonuçta karelerin %10'unun artık sarı olduğu görülür. Service Mesh içinde VirtualService kaynağındaki ağırlıklar güncellenmiştir. Kararlı (mavi) sürümün ağırlığı 100'den 90'a, kanarya (sarı) sürümün ağırlığı ise 0'dan 10'a değiştirilmiştir. Argo Rollouts denetleyicisi, Rollout'un ilk adımındaki
setWeightdeğeri10olduğuna göre VirtualService ağırlıklarını otomatik olarak değiştirir. Bu adım içinpausealanı boş olduğundan dağıtımı bir sonraki adıma ilerletmek için manuel olarak tanıtmanız gerekir. -
Kanarya sürümünü tanıtın.
-
Kanarya sürümünü tanıtmak için aşağıdaki komutu çalıştırın.
kubectl argo rollouts promote istio-rollout -
Tarayıcınızda http://<ASM_Ağ_Geçidi_IP_adresi>/ adresine gidin.
VirtualService kaynağındaki ağırlıklar Rollout'ta tanımlanan adımlara göre güncellenmeye devam eder. Adım 1 bölümündeki sonraki adımlarda
pausealanı için birdurationbelirtildiğinden dağıtım her belirtilen gecikmeden sonra otomatik olarak ilerler.Izgarada mavi ve sarı-yeşil karelerin karışımı görüntülenir; bu durum eski sürümün (mavi) ve kanarya sürümünün (sarı-yeşil) aynı anda trafiği işlediğini gösterir.
-
-
Kanarya sürümünün tamamlandığını doğrulayın.
-
Bir süre sonra http://<ASM_Ağ_Geçidi_IP_adresi>/ adresindeki tarayıcı sayfasını yenileyin.
Tüm kareler artık sarıdır.

-
Rollout kaynağının son durumunu kontrol etmek için aşağıdaki komutu çalıştırın.
kubectl argo rollouts get rollout istio-rollout --watchBeklenen çıktı:
Name: istio-rollout Namespace: default Status: Healthy Strategy: Canary Step: 18/18 SetWeight: 100 ActualWeight: 100 Images: argoproj/rollouts-demo:yellow (stable) Replicas: Desired: 1 Current: 1 Updated: 1 Ready: 1 Available: 1 NAME KIND STATUS AGE INFO ⟳ istio-rollout Rollout Healthy 48m ├──# revision:4 │ └──⧉ istio-rollout-5fcf5864c4 ReplicaSet Healthy 27m stable │ └──□ istio-rollout-5fcf5864c4-vw6kh Pod Running 26m ready:2/2 ├──# revision:3 │ └──⧉ istio-rollout-897cb5b6d ReplicaSet • ScaledDown 27m └──# revision:1 └──⧉ istio-rollout-7f96d86486 ReplicaSet • ScaledDown 48mÇıktı, kararlı sürüm için görüntünün
yellowolarak güncellendiğini gösterir.
-
Otomatik geri alma işlemi için Prometheus kullanma
Kanarya sürümü sırasında kararlı sürüme manuel olarak geri dönmek için kubectl argo rollouts abort istio-rollout komutunu çalıştırabilirsiniz. Ayrıca sağlık ölçümleri anormal hale gelirse uygulamayı otomatik olarak geri almak için Prometheus ile entegrasyon sağlayabilirsiniz. Otomatik geri alma gerçekleştiğinde dağıtım Degraded olarak işaretlenir.
ASM'de Prometheus'u etkinleştirin. Daha fazla bilgi için bkz. ASM örneklerini izlemek için Managed Service for Prometheus'u entegre etme veya Kendi kendine yönetilen bir Prometheus örneği ile ASM örneklerini izleme.
-
Bir Argo AnalysisTemplate yapılandırın.
-
Aşağıdaki içeriğe sahip istio-success-rate.yaml adlı bir dosya oluşturun.
AnalysisTemplate içindeki
addressalanını ASM Prometheus uç noktanıza ayarlayın.apiVersion: argoproj.io/v1alpha1 kind: AnalysisTemplate metadata: name: istio-success-rate spec: args: - name: service - name: namespace metrics: - name: success-rate initialDelay: 60s interval: 20s successCondition: result[0] > 0.90 provider: prometheus: address: http://xxx.aliyuncs.com:9090/api/v1/prometheus/ query: >+ sum(irate(istio_requests_total{ reporter="source", destination_service=~"{{args.service}}.{{args.namespace}}.svc.cluster.local", response_code!~"5.*"}[40s]) ) / sum(irate(istio_requests_total{ reporter="source", destination_service=~"{{args.service}}.{{args.namespace}}.svc.cluster.local"}[40s]) ) -
Argo AnalysisTemplate'i dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f istio-success-rate.yaml
-
-
AnalysisTemplate'i Rollout kaynağıyla ilişkilendirin.
-
Aşağıdaki içeriğe sahip rollout.yaml adlı bir dosya oluşturun.
strategybölümünde ikinci adımdan başlayarak izlemeyi ve otomatik geri almayı etkinleştirmek için biranalysisbloğu ekleyin. İlk görüntü sarı olarak ayarlanır. -
Rollout kaynağını güncellemek için aşağıdaki komutu çalıştırın.
kubectl apply -f rollout.yaml
-
-
Görüntüyü turuncu sürüme güncellemek için aşağıdaki komutu çalıştırın.
kubectl argo rollouts set image istio-rollout "*=argoproj/rollouts-demo:orange"Tarayıcınızda http://<ASM_Ağ_Geçidi_IP_adresi>/ adresine gidin.
Argo Rollouts Demo sayfasındaki ızgarada çoğunlukla sarı-yeşil kareler (kararlı sürüm) ve birkaç turuncu kare (kanarya sürümü) görülür; bu durum kanarya sürümünün başladığını ve yeni sürümün trafiğin küçük bir yüzdesini aldığını gösterir. LATENCY değeri 0 saniye ve ERROR değeri %0'dır.
-
Dağıtımı manuel olarak tanıtın.
-
Kanarya sürümünü tanıtmak için aşağıdaki komutu çalıştırın.
Komutu çalıştırdıktan sonra dağıtım otomatik olarak ilerler. İkinci adımdan itibaren Prometheus dağıtımı izler. Kanarya sürümünün başarı oranı %90 veya altına düşerse otomatik geri alma tetiklenir.
kubectl argo rollouts promote istio-rollout -
Dağıtımın durumunu izlemek için aşağıdaki komutu çalıştırın.
kubectl argo rollouts get rollout istio-rollout --watchBeklenen çıktı:
Name: istio-rollout Namespace: default Status: ◌ Progressing Message: waiting for all steps to complete Strategy: Canary Step: 5/18 SetWeight: 30 ActualWeight: 30 Images: argoproj/rollouts-demo:orange (canary) argoproj/rollouts-demo:yellow (stable) Replicas: Desired: 1 Current: 2 Updated: 1 Ready: 2 Available: 2 NAME KIND STATUS AGE INFO ⟳ istio-rollout Rollout ◌ Progressing 2m23s ├──# revision:2 │ ├──⧉ istio-rollout-5b7b8669fb ReplicaSet Healthy 107s canary │ │ └──□ istio-rollout-5b7b8669fb-c7w5q Pod Running 107s ready:2/2 │ └──α istio-rollout-5b7b8669fb-2 AnalysisRun ◌ Running 78s 4 └──# revision:1 └──⧉ istio-rollout-5fcf5864c4 ReplicaSet Healthy 2m23s stable └──□ istio-rollout-5fcf5864c4-z8l8n Pod Running 2m23s ready:2/2
-
-
Arıza simülasyonu yapın.
Aşamalı dağıtım sırasında otomatik geri almayı test etmek için manuel olarak hata enjekte edebilirsiniz. Hata oranını %100'e çıkardıktan sonra tüm kanarya (turuncu) kareler kırmızı çerçeveli görünür; bu bir hatayı gösterir. Kısa bir süre sonra uygulama otomatik olarak kararlı (sarı) sürüme geri döner.