İçerik
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.
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.
Bu kısımda ben doğrudan HTTPS kullanıcı adı ve parola kullanarak git repoma bağlanacağım.
Ayarlarınızı girdikten sonra “Connect” butonuna basıp git reponuzu ekleyin.
“Connection Status” sütunundaki durumun “Successful” olduğundan emin olun.
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.
SYNC Süreci
Dilerseniz manuel, dilerseniz de otomatik bir şekilde SYNC işlemini yaptırabilirsiniz.
Son olarak uygulamanın CLUSTER üzerinde aktif bir şekilde dağıldığını görebiliyorsunuz.