Bu yazılımda HELM ile Kubernetes Üzerinde Argo CD Kurulumunu bulabileceksiniz. Öncelikle nedir bu Argo CD?

Argo CD Nedir?

Argo CD, Kubernetes’te kullanılan en popüler sürekli dağıtım araçlarından biridir. Kullanımı çok basit ve oldukça güçlüdür. Şahsen Kubernetes GitOps’u düşündüğümde aklıma gelen ilk araçtır.

Argo CD, Kubernetes ortamları için kullanılan bir GitOps Continuous Deployment aracıdır. Argo CD, GitOps’un temel yapıtaşı olan Single Source of Truth modelini referans alan bir mimariye sahiptir. Kubernetes tanım dosyalarını birçok farklı yöntemle yazabilir ve bu Kubernetes objelerini Argo CD aracılığıyla Kubernetes ortamlarına deploy edebiliriz. Örneğin; yalın yaml/json tanım dosyaları, Helm Charts, Kustomize vs.

Argo CD belirli periyotlarda Kubernetes’e deploy edilmiş uygulamaları izler ve Git reposunda yer alan tanım dosyalarıyla karşılaştırmalar yapar. Herhangi bir farklılık durumunu kullanıcıyı bildirir veya istenilirse otomatik olarak senkronizasyon işlemini gerçekleştirir.

argo cd

Temel Özellikleri

· Uygulamaların hedef ortamlara otomatize ve sürekli dağıtımı yapılır.

· Birden fazla Kubernetes Cluster’a dağıtım ve yönetim kolaylığı sağlar.

· Kullanıcı tanımlamaları ve yetkilendirme işlemleri yapılabilir.

· SSO entegrasyonu yapılabilir.

· Git reposunda herhangi bir commit’e rollback yapılabilir.

· Kubernetes objelerinin Git reposunda belirlenen ve istenilen duruma manuel veya otomatik olarak senkronizasyonu yapılabilir.

· Continuous Integration otomasyonu için Argo CD CLI’ı yer almaktadır.

ArgoCD Uygulama Deployment Aşamaları

Adım 1: ArgoCD kullanan uygulamalarınız için CICD ardışık düzenleri istiyorsanız, Jenkins CI aracını ArgoCD ile entegre etmeniz gerekir.

Adım 2: Yukarıda belirtildiği gibi, uygulama deposunu bildirim deposundan ayırabilirsiniz.

Adım 3: Ana uygulama havuzunda yapılan değişiklikler, işlem hattınızı tetikleyecek ve bir liman işçisi görüntüsü oluşturacaktır.

Adım 4: Bir liman işçisi görüntüsü oluşturulduktan sonra, Jenkins onu bir Docker kayıt defterine gönderir ve ilgili liman işçisi görüntü etiketlerini bir GitOps deposuna işler.

Adım 5: Otomatik tamamlama, bildirim deposundaki liman görüntüsü sürümünü güncelleyecek ve değiştirilen kümeler hakkında ArgoCD’yi bilgilendirecektir.

Adım 6: Argo CD bu değişikliği otomatik olarak algılar ve Git deposuna göre kaynakların durumunu değiştirmek için senkronizasyonu tetikler.

7. Adım: Senkronizasyon eylemi, taahhütten sonra veya düzenli bir yoklama aralığından sonra Jenkins CI’den gelen bir web isteği  aracılığıyla tetiklenir.

Adım 8: Argo CD, çalışan uygulamaları sürekli olarak izleyen ve mevcut durumu istenen hedef durumla (GitOps deposunda belirtildiği gibi) karşılaştıran Kubernetes kümesinde bir denetleyici olarak çalışır.

Adım 9: Denetleyici, diff-in Helm bildirim şablonu çıktıları tarafından yapılan ve isteğe bağlı olarak düzeltici eylemi gerçekleştiren bir senkronizasyon dışı uygulama durumunu algılar.

Argo CD Kurulumu

Helm Reposunun Eklenmesi

Helm repomuzu aşağıdaki komut ile ekliyoruz.

helm repo add bitnami https://charts.bitnami.com/bitnami

Ardından helm repomuzu güncelliyoruz.

helm repo update
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

Kubernetes Üzerinde Namespace Oluşturulması

Kuracağımız Argo CD uygulamasını aşağıda oluşturacağımız Namespace üzerine kuracağız.

kubectl create ns argocd

Helm ile Argo CD’nin Kurulması

Daha önce HELM paket yöneticisini kurmadıysanız bu yazımdaki komut ile basitçe kurabilirsiniz. Aşağıdaki komut ile Argo CD kurulumunu başlatıyoruz.

Hostname, ServerAdminPassword gibi kısımları kendinize göre değiştirmeyi unutmayın.

helm upgrade --install argocd \
--set config.secret.argocdServerAdminPassword=sezer.in \
--set server.ingress.enabled=true \
--set server.ingress.ingressClassName=nginx \
--set server.service.type=ClusterIP \
--set server.ingress.pathType=Prefix \
--set server.ingress.hostname=argocd.sezer.test \
bitnami/argo-cd --namespace argocd

Kurulumdan sonra Web arayüzüne belirlediğiniz hostname ile girebilirsiniz.

NOT: Eğer Redirect hatası alırsanız ingress üzerinde annotations kısmına aşağıdaki 2 tanımı eklemeniz gerekir.

nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"

Argo CD Yönetimi

Git Reposunda YML Dosyasının Oluşturulması

Argo CD üzerine bağlayacağımız ilgili projeye ait repoda dosya.yml dosyasının olması gerekir. Bu nedenle deployment için daha önce oluşturmuş olduğum YAML dosyasını git reposuna test.yml olarak ekliyorum.

apiVersion: v1
kind: Namespace
metadata:
  name: myweb
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myweb
  name: myweb
  namespace: myweb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myweb
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - image: harbor.sezer.test:443/library/test-image:latest
        imagePullPolicy: Always
        name: myweb
        env:
        - name: BUILD_DATE
          value: 'THIS_STRING_IS_REPLACED_DURING_BUILD'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: myweb
  name: myweb
  namespace: myweb
spec:
  ports:
  - nodePort: 32223
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: myweb
  type: NodePort
--- 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: 
  name: myweb
  namespace: myweb
spec: 
  ingressClassName: nginx
  rules: 
    - 
      host: myweb.test
      http: 
        paths: 
          - 
            backend: 
              service: 
                name: myweb
                port: 
                  number: 80
            path: /
            pathType: Prefix

Argo CD Üzerinde Git Bağlantısı

Arayüze giriş yaptıktan sonra “Manage your repositories, projects settings” butonuna soldan basın ve “Repositories” kısmından git bağlantınızı yapın.

image 1

Bu kısımda ben doğrudan HTTPS kullanıcı adı ve parola kullanarak git repoma bağlanacağım.

image 2

Ayarlarınızı girdikten sonra “Connect” butonuna basıp git reponuzu ekleyin.

image 3

“Connection Status” sütunundaki durumun “Successful” olduğundan emin olun.

image 4

Argo CD Üzerinde Projenin Oluşturulması

Git repomuzda dosyamızı oluşturduk, ardından Argo CD’ye bağladık. Şimdi Argo CD’nin deployment yapması için Proje oluşturup bir kaç ayar yapacağız. Aşağıda gösterdiğim kısımlara tıklayarak proje oluşturma için ilgili alanı açabilirsiniz. Ayrıca diğer seçeneklerin detaylı açıklamalarını da bu adresten bulabilirsiniz.

image 5
image 6
image 7
image 8

SYNC Süreci

Dilerseniz manuel, dilerseniz de otomatik bir şekilde SYNC işlemini yaptırabilirsiniz.

image 9

Son olarak uygulamanın CLUSTER üzerinde aktif bir şekilde dağıldığını görebiliyorsunuz.

image 10