ArgoCD — 101

Yasintahaerol
5 min readApr 12, 2021

G ünümüzde git tabanlı versiyon kontrol sistemlerinin kullanımı her geçen gün daha da artıyor. Şirketler, bireysel kullanıcılar kodlarını burada saklıyor, yapılandırıyor ve geliştirmelerini sağlıyor. Bu sebeple herhangi bir git reposu kullanılarak merkezi yerden clusterların yönetilmesi ve otomasyonun sağlanması daha da önem kazanıyor. Bu noktada GitOps kavramı devreye giriyor. GitOps aslında Continious Deployment odaklı bir iş akışı. Bize versiyon kontrol sistemlerini kullanarak, Kubernetes için iş akışları oluşturmamıza ve bunları yönetmemize olanak sağlıyor. Ve tabiki her geçen gün Continious Deployment araçlarına ihtiyaç artıyor.(Fluxcd.io, Spinnaker.io, Codefresh.io , ArgoCD, vs).

Gittikçe popülerleşen ArgoCD toolunu kullanarak giriş niteliğinde bir çalışma yapacağım. Ama bundan önce bazı özelliklerini ve avantajlarını konuşalım. ArgoCD adı üzerinde bir Continious Deployment tool’u. ArgoCD kullanarak deploymentlarınızı ve yaşam döngülerini kolayca kontrol edebilir ve bunları otomatikleştirebilirsiniz. Önemli özelliklerinden biri de farklı kubernetes manifestleri kullanabiliyor olmanız.

  • Kustumize applications
  • Helm charts
  • Plain directory of YAML/json manifests
  • ksonnet applications
  • jsonnet files

Gördügününüz gibi argocd farklı yapılarla bütün içerisinde çalışabiliyor ve bu noktada esneklik sağlıyor.

Neden ArgoCD ?

  • Anlaşılması ve kurulumu kolay.
  • Deploymentları ve yaşam döngüsü yönetimini denetlenebilir ve otomatik hale getirmesi.
  • Çeşitli manifest bildiri yöntemleri.
  • Uygulamaları gerçek zamanlı kontrol edebildiğiniz anlaşılır arayüzü. (monitoring)
  • Prometheus metrikleri.
  • Uygulamaların manuel veya otomatik sync edilebilmesi.
  • Eksik yada hatalı deploymentlarda geri dündürülebilir olması (Rollback).
  • Çeşitli rollout stratejileri uygulayabilirsiniz (Blue/green, Canary vs).
  • Webhook desteği. (GitHub, BitBucket, GitLab)

Argo CD nin içerisinde bulunan componentlere bir göz atalım.

ArgoCD architecture

API SERVER (argocd-server)

  • Bütün ArgoCD olaylarını(instance) yönetir.
  • Uygulama yönetiminden ve durum raporlamadan sorumludur.
  • Repository ve cluster credentiallarının / secretlarının yönetilmesi.
  • RBAC yaptırımları. Kullanıcılara authentication, authorization tanımlamalarının yapılması.

Repository Server

  • Git reposunun yerel bir önbellegini tutar ve data senkronundan sorumludur.
  • Gerekli girdiler sağlandığı taktirde kubernetes manifestlerinin oluşturulmasından sorumludur.

Application Controller

  • Çalışan uygulamaların monitoringini sağlar, current statelerini desired stateleriyle karşılaştırır.
  • OutOfSync durumlarını tespit eder ve gereken işlemleri isteğe bağlı şekilde uygular.

Daha detaylı açıklamalar için : https://argoproj.github.io/argo-cd/understand_the_basics/

Haydi Başlayalım.

Ben kullanım kolaylığı açısından minikube kullanarak işlemlerimi gerçekleştireceğim. Ve driver olarak docker kullanacağım. Minikube’ yi başlatmak için şu komutu giriyoruz ve kontrol ediyoruz :

$ minikube start — driver=docker

$ kubectl get nodes

Gördügünüz gibi minikube hazır.

Namespacelerimizi kontrol edeceğiz ve argocd adında yeni bir namespace ekleyeceğiz.

$ kubectl get namespaces

$ kubectlt create namespace argocd

$ kubectl get namespaces

Namespacemiz eklenmiş durumda. ArgoCD yi bu namespace üzerinden kullanacağız.

ArgoCD ortamlarını kurabilmemiz için şu kodu giriyoruz:

$ kubectl apply -n argocd -f /

https://raw.githubusercontent.com/argoproj/argo-cd/v1.8.3/manifests/install.yaml

NOT: (-n -> namespace)

Bütün kurulumlarımız tamamlandı. Eğer dikkatli bakarsanız daha öncesinde tanıtmış olduğumuz companentleri görebilirsiniz. ( argocd-server, argocd-application-controller vb)

Hadi gelin argocd namespacemizin altında çalışan pod, servis, deployment ve replicasetlere bakalım.

$ kubectl -n argocd get all

Her şey ayağa kalkmış ve çalışır durumda. Servislerimizin typlarına baktığınızda Hepsinin ClusterIP olduğunu göreceksiniz. Bu haliyle bu servislere dışarıdan erişimimiz yok. Şimdi argocd-server servisinin tipini değiştirelim ve NodePort yapalım. Bu sayede servisimizi dışarıya açmış olacağız. Bunun için şu komutu kullanıyoruz

$ kubectl -n argocd edit service/argocd-server

Type: ClusterIP yazan yeri NodePort olarak değitirelim. Kaydedelim ve çıkış yapalım.

$ kubectl -n argocd get all

argocd-server-NodePort

Evet argocd-server ımızın tipi NodePort olarak degişmis. Şimdi sıra url bilgisini getirmek ve bağlanmak.

$ minikube service list

minikube-service-list

Minikube üstünde çalışan bütün servisleri görüyorsunuz. Bizim ilgilendiğimiz servis argocd-server. İki adet url bilgisi var. Şimdi şu komut ile servisimize giriş yapacağız.

$ minikube service argocd-server — url -n argocd

İki adet URL bilgisinden ilkini kopyalıyorum ve tarayıcımdan giriş yapıyorum.

Güvenlik uyarısı gelecek. Advanced’a tıklayıp continue dediğinizde giriş sayfasına yönlendirileceksiniz.

Username=admin

Password = < oluşturulan podun adı > Oluşturulan podumuzun adını görmek için daha önce kullandığımız get all komutunu kullanabiliriz.

(Daha sonrasında bu bilgilerimizi degistirebiliriz.)

argocd-service-password

Şimdi kendi Github hesabımı kullanarak argocd adında yeni bir repository oluşturacağım. İçerisine yaml klasörü altında bir adet nginx.yaml dosyayı commitliyorum. Repoya buradan erişebilirsiniz.

nginx-deployment

Basit bir nginx deploy edeceğim. Tekrardan ArgoCD tarafına geçelim.

Soldaki sekmelerden settingse sonrasında da repositories e girelim. CONNECT REPO USING HTTP (SSH ile de bağlantı yapabilirsiniz) seçeneğine basalım ve git repomuzu tanıtalım. (Şimdilik url bilgisi girilse yeterli).

Bağlantımız başarı ile gerçekleşti.

Sol üstteki NEW APP butonuna basalım. Sırası ile şu işlemleri yapalım.

Application Name = nginx

Project = default

Repository url girdikten sonra Path kısmına nginx.yaml ı içinde bulunduran yaml klasörünü yazalım. Namespace kısmına default giriyoruz. Create diyelim . OutOfSync olarak oluşacaktır. SYNC butonuna tıklayalım ve deploymentin sync olmasını bekleyelim.

argocd-app

Evet başarı ile gerçekleşti. Üzerine tıkladığınızda şema olarak görebilirsiniz.

Gördüğünüz gibi deployment işlemlerimizi çok hızlı ve pratik bir şekilde gerçekleştirdik. Bütün bu işlemleri CLI kullanarakta gerçekleştirebilirdik. Daha detaylı bilgilere ulaşmak isterseniz kullandığım kaynakları ekliyorum. eksik / yanlış bir şey görürseniz ulaşabilirsiniz.

Desteklerinden ötürü sevgili Can Alptekin’e teşekkür ederim.

yasintahaerol@gmail.com

KAYNAKÇA

  1. https://argoproj.github.io/argo-cd/
  2. https://itnext.io/argocd-an-overview-ssl-configuration-and-an-application-deploy-89d8947d95cf
  3. https://www.youtube.com/channel/UC6VkhPuCCwR_kG0GExjoozg
  4. https://medium.com/devopsturkiye/gitops-nedir-openshift-container-platform-%C3%BCzerine-argocd-kurulumu-2a120215e190

--

--