Jenkins-X Istio Flagger'ı kullanarak Canary Dağıtımı
Kanarya Dağıtımı
Umarız okursunuz ilk bölümKanarya Dağıtımlarının ne olduğunu kısaca açıklamıştık. Ayrıca standart Kubernetes kaynakları kullanılarak nasıl uygulanacağını da gösterdik.
Argo Sunumları
Argo Rollouts, bir Kubernetes yerel dağıtım denetleyicisidir. Kubernetes için bir CRD (Özel Kaynak Tanımı) sağlar. Onun sayesinde yeni bir varlık kullanabiliriz: Rollout, çeşitli yapılandırma seçenekleriyle mavi-yeşil ve kanarya dağıtımlarını yöneten.
Özel bir kaynak tarafından kullanılan Argo Rollouts denetleyicisi Rollout, Kubernetes için mavi-yeşil ve kanarya gibi ek dağıtım stratejilerine olanak tanır. Kaynak Rollout işlevsellik eşdeğeri sağlar Deployment, yalnızca ek dağıtım stratejileriyle.
Kaynak Deployments dağıtım için iki strateji vardır: RollingUpdate и Recreate. Bu stratejiler çoğu durum için uygun olsa da, çok büyük ölçekteki sunuculara dağıtım için, Dağıtım denetleyicisinde bulunmayan mavi-yeşil veya kanarya gibi ek stratejiler kullanılır. Bu stratejileri Kubernetes'te kullanmak için kullanıcıların Dağıtımlarının üzerine komut dosyaları yazmaları gerekiyordu. Argo Rollouts Controller, bu stratejileri basit, bildirimsel, yapılandırılabilir parametreler olarak sunar. https://argoproj.github.io/argo-rollouts
Ayrıca Rollouts ile kullanım için kullanışlı bir web arayüzü sağlayan Argo CI da var, bir sonraki makalede buna göz atacağız.
Altyapı şalgamımızda (aşağıya bakın) install.yaml'ı zaten i/k8s/argo-rollouts/install.yaml olarak ekledik. Bu şekilde GitlabCI onu kümeye yükleyecektir.
Bu, JSON olarak yanıt döndüren çok basit bir Python+Flask API'sidir. Paketi GitlabCI kullanarak oluşturacağız ve sonucu Gitlab Registry'ye aktaracağız. Kayıt defterinde iki farklı yayın sürümümüz var:
wuestkamp/k8s-dağıtım-örnek-uygulama:v1
wuestkamp/k8s-dağıtım-örnek-uygulama:v2
Aralarındaki tek fark döndürülen JSON dosyasıdır. Hangi sürümle iletişim kurduğumuzu mümkün olduğunca kolay görselleştirmek için bu uygulamayı kullanıyoruz.
Altyapı deposu
Bu depoda Kubernetes'e dağıtım için GitlabCI'yı kullanacağız, .gitlab-ci.yml şuna benzer:
Rollout Dağıtım ile aynı şekilde çalışır. Bir güncelleme stratejisi belirlemezsek (buradaki kanarya gibi), varsayılan kapsamlı güncelleme Dağıtımı gibi davranacaktır.
Canary konuşlandırması için yaml'de iki adım tanımlıyoruz:
Kanaryaya giden trafiğin %10'u (manuel OK'i bekleyin)
Kanaryaya giden trafiğin %50'si (2 dakika bekledikten sonra %100'e devam edin)
İlk dağıtımın gerçekleştirilmesi
İlk dağıtımdan sonra kaynaklarımız şöyle görünecek:
Ve uygulamanın yalnızca ilk sürümünden yanıt alıyoruz:
Kanarya Dağıtımının Gerçekleştirilmesi
1. Adım: %10 trafik
Canary dağıtımını başlatmak için genellikle dağıtımlarda yaptığımız gibi görüntü sürümünü değiştirmemiz yeterlidir:
Bu videoyu gerçekten öneriyorum; Argo Rollouts ve Argo CI'nin birlikte nasıl çalıştığını gösteriyor:
sonuç
Ek dağıtım veya kopya kümesi türlerinin oluşturulmasını yöneten, trafiği yeniden yönlendiren vb. CRD'leri kullanma fikrini gerçekten seviyorum. Onlarla çalışmak sorunsuz gidiyor. Daha sonra Argo CI ile entegrasyonu test etmek istiyorum.
Ancak Argo CI ile Flux CI arasında büyük bir birleşme olacak gibi görünüyor, bu yüzden yeni sürüm çıkana kadar bekleyebilirim: Argo Akısı.
Argo Rollouts veya Argo CI ile herhangi bir deneyiminiz oldu mu?