Kubernetes ve ArgoCD ile GitOps İş Akışı Oluşturma

Merhaba! Kubernetes kümelerini yönetmek zor olabilir, değil mi? İzlemeniz gereken çok sayıda YAML dosyanız, dağıtımınız ve değişikliğiniz var. Peki ya tüm bunları GitOps kullanarak halletmenin daha akıllı bir yolu olduğunu söylesem? GitOps ile tüm Kubernetes yapılandırmalarımız için tek veri kaynağı olarak Git’i kullanıyoruz. ArgoCD ise bunu mümkün kılan harika bir araç.

Bu makalede, Kubernetes ve ArgoCD ile basit ve adım adım bir GitOps iş akışı kurmayı adım adım anlatacağım. Hayatınızı kolaylaştıralım!GitOps with  ArgoCD, and Kubernetes cluster

GitOps Nedir ve Neden ArgoCD?

GitOps, uygulama yapılandırmalarınız, dağıtımlarınız ve daha birçok şeyin bir Git deposunda depolandığı Kubernetes’i yönetmenin bir yoludur. Bir değişiklik yapmak istediğinizde, Git deposunu güncellersiniz ve değişiklikler otomatik olarak kümenize aktarılır. Manuel komutlara gerek yok! ArgoCD, Git deponuzu izleyen ve bu değişiklikleri Kubernetes kümenize uygulayan bir araçtır. Her şeyi senkronize tutan süper akıllı bir asistana sahip olmak gibidir.

Ön koşullar

Before we start, you’ll need:

  • Bir Kubernetes kümesi (sürüm 1.21 veya üzeri). Test için Minikube’u veya AWS, GCP ya da Azure gibi herhangi bir bulut sağlayıcısını kullanabilirsiniz.
  • ArgoCD kurulu (bunu aşağıda ele alacağız).
  • Kubernetes bildirimlerinizi depolamak için bir Git deposu (GitHub veya GitLab gibi).
  • Temel Kubernetes ve Git bilgisi. Merak etmeyin, basit tutacağım!

Adım 1: ArgoCD’yi yükleyin

Öncelikle, ArgoCD’yi Kubernetes kümemizde çalıştırmamız gerekiyor. En kolay yol, ArgoCD ekibi tarafından sağlanan tek bir YAML dosyasını kullanmaktır.

1. ArgoCD Ad Alanını Oluşturun

İşleri düzenli tutmak için argocd adında bir ad alanı oluşturun:


kubectl create namespace argocd

2. ArgoCD’yi yükleyin

Tüm bileşenleri yüklemek için resmi ArgoCD bildirimini uygulayın:


kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Bu komut, argocd ad alanındaki ArgoCD kurulumunu indirir ve uygular.

3. Kurulumu Doğrulayın

ArgoCD pod’larının çalışıp çalışmadığını kontrol edin:


kubectl get pods -n argocd

Argocd-server, argocd-repo-server vb. gibi Çalışıyor durumundaki pod’ları görmelisiniz.

4. ArgoCD kullanıcı arayüzüne erişin

ArgoCD’nin hoş bir web arayüzü var. Erişim için şu portu yönlendirin:


kubectl port-forward svc/argocd-server -n argocd 8080:443

Şimdi tarayıcınızda http://localhost:8080 adresini açın. Varsayılan kullanıcı adı admin’dir ve şifreyi şu şekilde alabilirsiniz:


kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

Adım 2: ArgoCD’yi Git Deponuza Bağlayın

Şimdi, ArgoCD’ye Kubernetes manifestolarınızın nerede saklandığını söyleyelim. Bu manifestolar, uygulamalarınızı, hizmetlerinizi ve diğer kaynaklarınızı tanımlayan YAML dosyalarıdır.

1. Git deponuzu kurun

Bir Git deposu oluşturun (örneğin, GitHub’da). İçinde manifests adında bir klasör oluşturun ve basit bir Kubernetes dağıtımı ekleyin. İşte bir örnek:


# manifests/guestbook.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: guestbook
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: guestbook
  template:
    metadata:
      labels:
        app: guestbook
    spec:
      containers:
      - name: guestbook
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: guestbook-service
  namespace: default
spec:
  selector:
    app: guestbook
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

2. Depoyu ArgoCD’ye ekleyin

ArgoCD kullanıcı arayüzünde “Yeni Uygulama”ya tıklayın ve şunları doldurun:

  • Application Name: guestbook
  • Project: default
  • Sync Policy: Manual (we’ll change to auto later)
  • Repository URL: Your Git repo URL (e.g., https://github.com/your-username/your-repo.git)
  • Path: manifests
  • Cluster: https://kubernetes.default.svc (for in-cluster)
  • Namespace: default

Veya uygulamayı oluşturmak için şu YAML’ı kullanabilirsiniz:


apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-username/your-repo.git
    targetRevision: HEAD
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated: {}

Şu şekilde uygulayın:


kubectl apply -f guestbook-app.yaml -n argocd

Adım 3: True GitOps için Otomatik Senkronizasyonu Etkinleştirin

GitOps’un asıl büyüsü otomasyondur. ArgoCD’nin Git deponuzdaki değişiklikleri otomatik olarak uygulamasını sağlayalım.

1. Otomatik senkronizasyonu açın

ArgoCD kullanıcı arayüzünde, ziyaretçi defteri uygulamanıza gidin, “Uygulama Ayrıntıları”na tıklayın ve “Otomatik Eşitleme”yi etkinleştirin. Veya yukarıdaki YAML’yi aşağıdakileri içerecek şekilde güncelleyin:


syncPolicy:
  automated:
    prune: true
    selfHeal: true

prune: true Git’te artık bulunmayan kaynakları siler.
selfHeal: truekümede doğrudan yapılan tüm manuel değişiklikleri düzeltir.

2. Test edin

Git deposundaki guestbook.yaml dosyanızdaki replikaları: 2’yi replikalar: 3 olarak güncelleyin. Değişikliği gönderin:


git add .
git commit -m "Increase replicas to 3"
git push

Bir dakika içinde ArgoCD değişikliği fark edecek ve kümenizi güncelleyecektir. Senkronizasyon durumunu görmek için ArgoCD kullanıcı arayüzünü kontrol edin!

4. Adım: Profesyonel Kullanıcılar için Gelişmiş Özellikler

ArgoCD’nin bazı harika gelişmiş özellikleri var. Bunlardan birkaçından bahsedelim:

Çoklu Kümeler için ApplicationSets

Birden fazla kümeniz varsa (dev, staging, prod gibi), ApplicationSets hepsini yönetebilir. İşte bir örnek:


apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - cluster: dev
        url: https://dev-cluster:6443
      - cluster: prod
        url: https://prod-cluster:6443
  template:
    metadata:
      name: '{{cluster}}-guestbook'
    spec:
      project: default
      source:
        repoURL: https://github.com/your-username/your-repo.git
        targetRevision: HEAD
        path: manifests
      destination:
        server: '{{url}}'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true

Bu, hem geliştirme hem de üretim kümelerinde ziyaretçi defteri uygulamasını oluşturur. Harika, değil mi?

Kayma Algılama

Bazen birileri kümeyi manuel olarak değiştirebilir (örneğin, bir dağıtımı doğrudan düzenleyerek). ArgoCD’nin selfHeal: true seçeneği, bu değişiklikleri Git deposuyla eşleşecek şekilde geri alır. Kullanıcı arayüzünde kayma uyarıları görebilirsiniz.

Çoklu Kiracı

Birden fazla ekibiniz varsa, erişimi kısıtlamak için ArgoCD Projeleri’ni kullanın. Örneğin:


apiVersion: argoproj.io/v1alpha1
kind: Project
metadata:
  name: team-a
  namespace: argocd
spec:
  destinations:
  - namespace: team-a
    server: https://kubernetes.default.svc
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace

Bu, takım-a’nın yalnızca kendi ad alanını yönetebilmesini sağlar.

En İyi Uygulamalar

  • Organize your Git repo: Her ortam için dev/, staging/, prod/ gibi ayrı klasörler tutun.
  • Validate manifests: Git’e göndermeden önce hataları yakalamak için CI boru hattınızda kubeval gibi araçlar kullanın.
  • Monitor ArgoCD: Senkronizasyon durumunu ve hatalarını izlemek için Prometheus ve Grafana ile entegre edin.
  • Secure your repo: Güvenliğinizi sağlamak için Git kimlik doğrulamasında SSH anahtarlarını veya OIDC’yi kullanın.

Common Challenges and Fixes

  • Sync fails: Yanlış Git URL’leri veya izinler gibi hatalar için ArgoCD kayıtlarını (kubectl logs -n argocd) kontrol edin.
  • Drift issues:Prune: true’nun eski kaynakları temizleyecek şekilde ayarlandığından emin olun.
  • Large repos: Daha iyi ölçeklenebilirlik için ApplicationSets’i veya bölünmüş depoları kullanın.

 

 

 

 

Yazının orijinalini buradan okuyabilirsiniz.

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.