Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:ASM ve Argo Rollouts ile kanarya sürümü kullanma

Son Güncelleme:Oct 07, 2026

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

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.

  1. 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
  2. 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

  1. ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

  2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde Instance Information > Base Information seçeneğini belirleyin.

  3. Enable Data-plane KubeAPI access öğesinin sağ tarafında Enable öğesini tıklayın.

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

  1. Rollout kaynağını oluşturun.

    1. Aşağıdaki içeriğe sahip rollout.yaml adlı bir dosya oluşturun.

      Örnek: rollout.yaml

      apiVersion: argoproj.io/v1alpha1
      kind: Rollout
      metadata:
        name: istio-rollout
      spec:
        revisionHistoryLimit: 2
        selector:
          matchLabels:
            app: istio-rollout
        template:
          metadata:
            annotations:
              sidecar.istio.io/inject: "true"
            labels:
              app: istio-rollout
          spec:
            containers:
            - name: istio-rollout
              image: argoproj/rollouts-demo:blue
              ports:
              - name: http
                containerPort: 8080
                protocol: TCP
              resources:
                requests:
                  memory: 32Mi
                  cpu: 5m
        strategy:
          canary:
            canaryService: istio-rollout-canary
            stableService: istio-rollout-stable
            trafficRouting:
              istio:
                virtualService:
                  name: istio-rollout-vsvc
                  routes:
                  - primary
            steps:
            - setWeight: 10
            - pause: {}         # A step for manual promotion.
            - setWeight: 20
            - pause: {duration: 20s}
            - setWeight: 30
            - pause: {duration: 20s}
            - setWeight: 40
            - pause: {duration: 20s}
            - setWeight: 50
            - pause: {duration: 20s}
            - setWeight: 60
            - pause: {duration: 20s}
            - setWeight: 70
            - pause: {duration: 20s}
            - setWeight: 80
            - pause: {duration: 20s}
            - setWeight: 90
            - pause: {duration: 20s}

      strategy alanı 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: duration ayarlanmazsa manuel güncelleme gerekir. duration ayarlanırsa sistem belirtilen duration süresini bekleyerek otomatik güncelleme gerçekleştirir.

    2. Rollout kaynağını kümeye dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f rollout.yaml
  2. Service kaynaklarını oluşturun.

    1. 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
    2. 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

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

    1. 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
    2. istio-rollout-vsvc sanal hizmetini dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f istio-rollout-vsvc.yaml
  2. Ağ geçidi oluşturun.

    1. 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
                                      
    2. 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.

  1. ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

  2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Ingress Gateway seçeneğini belirleyin.

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

  1. ASM Ağ Geçidinin IP adresini alın.

    1. ASM konsolu adresinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.

    2. Mesh Management sayfasında ASM örneğinin adını tıklayın. Sol gezinme bölmesinde ASM Gateways > Ingress Gateway seçeneğini belirleyin.

    3. Hedef ağ geçidini bulun ve IP adresini Service address sütunundan alın.

  2. 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-rollout Rollout'unda belirtilen renk blue rengidir. 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.

  1. Görüntü sürümünü güncelleyin.

    1. 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"
    2. Konteyner görüntüsü sürümlerini kontrol edin.

      1. ACK konsolu adresinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

      2. Clusters sayfasında kümenizin adını tıklayın. Sol gezinme bölmesinde Workloads > Pods seçeneğini belirleyin.

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

  2. 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 setWeight değeri 10 olduğuna göre VirtualService ağırlıklarını otomatik olarak değiştirir. Bu adım için pause alanı boş olduğundan dağıtımı bir sonraki adıma ilerletmek için manuel olarak tanıtmanız gerekir.

  3. Kanarya sürümünü tanıtın.

    1. Kanarya sürümünü tanıtmak için aşağıdaki komutu çalıştırın.

      kubectl argo rollouts promote istio-rollout
    2. 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 pause alanı için bir duration belirtildiğ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.

  4. Kanarya sürümünün tamamlandığını doğrulayın.

    1. 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.黄色效果

    2. 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 --watch

      Beklenen çı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 yellow olarak 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.

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

  2. Bir Argo AnalysisTemplate yapılandırın.

    1. Aşağıdaki içeriğe sahip istio-success-rate.yaml adlı bir dosya oluşturun.

      AnalysisTemplate içindeki address alanı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])
                )
    2. Argo AnalysisTemplate'i dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f istio-success-rate.yaml
  3. AnalysisTemplate'i Rollout kaynağıyla ilişkilendirin.

    1. Aşağıdaki içeriğe sahip rollout.yaml adlı bir dosya oluşturun.

      strategy bölümünde ikinci adımdan başlayarak izlemeyi ve otomatik geri almayı etkinleştirmek için bir analysis bloğu ekleyin. İlk görüntü sarı olarak ayarlanır.

      Örnek: rollout.yaml

      apiVersion: argoproj.io/v1alpha1
      kind: Rollout
      metadata:
        name: istio-rollout
      spec:
        revisionHistoryLimit: 2
        selector:
          matchLabels:
            app: istio-rollout
        template:
          metadata:
            annotations:
              sidecar.istio.io/inject: "true"
            labels:
              app: istio-rollout
          spec:
            containers:
            - name: istio-rollout
              image: argoproj/rollouts-demo:yellow
              ports:
              - name: http
                containerPort: 8080
                protocol: TCP
              resources:
                requests:
                  memory: 32Mi
                  cpu: 5m
        strategy:
          canary:
            canaryService: istio-rollout-canary
            stableService: istio-rollout-stable
            analysis:
              startingStep: 1
              templates:
              - templateName: istio-success-rate
              args:
              - name: service
                value: canary
              - name: namespace
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
            trafficRouting:
              istio:
                virtualService:
                  name: istio-rollout-vsvc
                  routes:
                  - primary
            steps:
            - setWeight: 10
            - pause: {}         # A step for manual promotion.
            - setWeight: 20
            - pause: {duration: 20s}
            - setWeight: 30
            - pause: {duration: 20s}
            - setWeight: 40
            - pause: {duration: 20s}
            - setWeight: 50
            - pause: {duration: 20s}
            - setWeight: 60
            - pause: {duration: 20s}
            - setWeight: 70
            - pause: {duration: 20s}
            - setWeight: 80
            - pause: {duration: 20s}
            - setWeight: 90
            - pause: {duration: 20s}
    2. Rollout kaynağını güncellemek için aşağıdaki komutu çalıştırın.

      kubectl apply -f rollout.yaml
  4. 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.

  5. Dağıtımı manuel olarak tanıtın.

    1. 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
    2. Dağıtımın durumunu izlemek için aşağıdaki komutu çalıştırın.

      kubectl argo rollouts get rollout istio-rollout --watch

      Beklenen çı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
  6. 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.