ArgoCD ile GitOps ve Continues Deployment

ArgoCD ismini çoğu yerde siz de görüyorsunuzdur, nedir bu argocd.
bir continues deployment aracı diyebiliriz hali hazırda bir CI(continues integration) nız varsa kubernetes deploymenti için kullanabilceğiniz mükemmel bir tool.
ArgoCD yi tam anlamak ve kurgulamak için anlamamız gereken şeylerin başında GitOps gelmektedir.
GitOps Nedir?

GitOps uygulamalarınızı git altyapısı ile yönetmenizi sağlar. git reposunda bulunan kaynak kodlarınızı kubernetes ortamında çalıştırmanıza yarar böylece tek bir kaynaktan “single source of truth” ilkesine göre bir süreç işlemiş olursunuz.
Argo CD avantajları
ArgoCD neden güzel bir tool dersek şunları sıralayabiliriz;
- Kuberentes clusterınızı virtualize edebiliyorsunuz, yani bir deploymentinizi replicaset service pod şeklinde görebiliyorsunuz.
- Helm, kustomize, yaml manifestlerini destekliyor.
- Kolay bir şekilde entegrasyon yapılabiliyor.
- Birden fazla kubernetes clusterla entegre edilebiliyor.
- Direk kuberentes clusterınıza erişip işlem yapmıyorsunuz bu yüzden jenkins gibi bir usera yetkilendirme gibi işlemlere girmiyorsunuz.
- imperative bir şekilde kubectl kullanmıyorsunuz, yapınızı declaretive yapıyorsunuz yani yaptığınız değişikliği argocd algılayıp kubernetese yüklenmesini sağlıyor.
- En önemlilerinden biri de kubernetes clusterınızda bir deployment sildiniz ya da biri sildi. ve bir kesinti yaşarsınız çünkü bir kontrolü yoktur. argocd hem git reposu hem kubernetesi sürekli monitor ettiğinden ikisi arasında fark olduğunu anlayıp silinen deploymenti tekrar yerine gelmesini hızlıca sağlar.
ArgoCD ile continues deployment
Belirli bir CI süreciniz varsa ve uygulamanız için docker image build ve push işlemi sonrası kubernetes manifest fileınızda image versiyonu güncellediğimiz anda geri kalan bütün işlemi ArgoCD halletmektedir. Buradaki yapılan değişikliği anlayıp kubernetes clusterınızda uygulamanızın yeni versiyonunu çalışmasını sağlar. bunu kubernetes üzerine kurduğu agent sayesinde yapmaktadır.
ArgoCD Kurulum
Kubernetes Cluster olarak NGN Cloud Kubernetes kullanacağım. NGN Cloud kubernetes clusterı hızlı ve diğer yabancı providerlara göre latency daha az. komutları hızlı koşabiliyorsunuz. 3–4 dakikada stabil bir kubernetes cluster ayağa kaldırabiliyorsunuz.
Clusterı kurup kubeconfig file ı alarak lokalden erişebiliyoruz.


Cluster kurduktan sonra ilk önce namespace yaratıyoruz daha sonra crd olan manifesti apply ediyoruz.
kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

namespace e baktığımızda bir kaç dk içinde podların running olduğunu göreceksiniz.

argocd-server servisini nodeport yaparak argocd UI yına erişeceğiz.

admin password ü secret olarak eklenmiş bulunuyor bunu almak için de aşağıdaki komutu çalıştırabilirsiniz,
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
!! eğer windows cmd de çalıştırıyorsanız base64 windows desteklemediğinden pipe dan sonrasını silip base64 converter sitesinde passwordü alabilirsiniz.

giriş yaptıktan sonra güzel bir arayüz gelmiş oluyor. bundan sonra applikasyon ekleyerek devam edeceğiz.
ArgoCD APP eklemek
argocd ye applikasyon ekleyeceğimiz zaman kubernetes manifestlerimizin bulunduğu github repomuzu ve branch ismini veriyoruz. argocd gidip bu yaml fileları kullanarak kubernetes e deploy yapıyor.

31000 nodeportundan erişilen uygulamamız kubernetes ortamında çalışmakta.
manuel sync derseniz manuel bi şekilde syn yaptıktan sonra github a gidip bakar.
automatic derseniz 3dk aralıkla gidip repoyu kontrol eder.
continues deployment işimiz bu kadar. artık argocd sürekli hem repoya hem kubernetes clustera bakacak. mesela pod sayımızı ve versiyonumuzu değiştirelim.

peki yanlışlıkla biri gitti ve kubernetes ortamından deployment objemizi sildi argocd davranışı ne olacak ona bakalım.

gördüğünüz gibi tek bir repodan beslendiği için kubernetes ortamında da olmaması gereken bir değişikliği algılayıp çalışması gereken haline getirebiliyoruz ben hızlı olsun diye manuel sync seçtim automatic sync olsaydı 3dk içinde kendi de düzeltecekti.
sonuç
belirli bir Continues integration ve Delivery adımınız varsa Jenkinsle ya da Gitlab, azuredevops; deploymet adımında ArgoCD ye güvenebilirsiniz.
argocd yi CLI üzerinden de kullanabiliyorsunuz. CI/CD sürecinizde applikasyonu ekleme kısmını da automation a dahil etmek isterseniz argocli kullanabilirsiniz sitesinde detayları mevcut.
kaynak:
umarım yararlı bir yazı olmuştur. bir sonraki yazımda görüşmek üzere.
sağlıklar.
h.a.s.
PS : argocd ile ilgili canlı lab yapmak isterseniz codefreshde güzel bir kurs var. size lab ortamı açarak anlık argocd gerçekleyebiliyorsunuz. lab sonunda sertifikanızı da alıyorsunuz.