ArgoCD ile GitOps
Bu sayfada
ArgoCD ile GitOps
GitOps, CI/CD yaklaşımını tersine çeviriyor: harici bir otomasyon sunucusunun değişiklikleri kümeye göndermesi yerine, kümenin içindeki bir araç bir Git reposunu izleyip değişiklikleri çekiyor.
Bu, kümenizin daha temiz biçimde güvenceye alınabileceği anlamına geliyor; çünkü otomasyon sunucusu için küme yöneticisi bir kullanıcıya ihtiyacınız kalmıyor. Ayrıca uygulama tanımlarınız — hatta bulut servislerinin altyapı kurulumu — kesin olarak Git repolarında saklanabiliyor. Tüm dağıtımınızı sıfırdan yeniden oluşturabilirsiniz.
Kaynaklar
- GitOps — yaklaşımı ve benimsenmesini anlatıyor
- ArgoCD — CNCF'deki GitOps
projesi
- Kubernetes ve Argo ile GitOps —
YouTube anlatımı
ArgoCD kurulumu
ArgoCD'nin kümede çalışan ve projeleriniz için yapılandırılmış Git repolarını izleyen bir sunucu tarafı bileşeni var. Projeleri kurmak ve yönetmek için kullanabileceğiniz bir komut satırı aracı da var.
Komut satırını kurarak başlayın — tam kurulum dökümanlarını kullanın ya da şu hızlı seçeneklerden birini:
# Windows:
choco install argocd-cli
# Mac:
brew install argocd
# Linux:
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocdKurulumunuzu kontrol edin:
argocd versionİstemci sürümünü, ardından bir sunucu hatası göreceksiniz — komut satırı ArgoCD sunucusuna bağlanamıyor, çünkü onu henüz dağıtmadık.
Argo CD belirtiminin yerel bir kopyası burada:
- argocd/v3.5.5.yaml — bol miktarda kaynak
kuruyor; Kubernetes'in işlevselliğini genişleten CustomResourceDefinition'lar (CRD'ler) dahil. ArgoCD kümeye bir
Applicationkaynağı ekliyor.
Sunucu bileşenlerini dağıtın:
kubectl apply -n argocd -f labs/argo/specs/argocdArgo, Application adında yeni bir özel nesne tipi kuruyor.
📋 Kümedeki tüm application nesnelerini listeleyin.
Nasıl yapılacağını bilmiyor musunuz?
Özel nesneler Kubectl'de sıradan nesneler gibi kullanılabiliyor:
kubectl get applicationsBu ArgoCD kurulumu bir web arayüzü içeriyor. İlk yönetici parolası bir Secret'ta saklanıyor — parolayı düz metin olarak görmek için şunu çalıştırın:
kubectl -n argocd get secret argocd-initial-admin-secret -o go-template="{{.data.password | base64decode}}"Arayüzü http://localhost:30881 adresinde açın, admin kullanıcı adı ve
Secret'tan aldığınız parolayla giriş yapın.
Kendinden imzalı bir sertifikayla HTTPS'e yönlendirileceksiniz, dolayısıyla tarayıcınızdaki güvenlik uyarısını kabul etmeniz gerekecek.
https://localhost:30881/settings/clusters adresini açın — ArgoCD yerel kümeye kayıtlı, dolayısıyla uygulamaları yönetebiliyor, ama henüz hiç uygulama yok.
Git sunucusunu yapılandırmak
ArgoCD uygulamaları, izlenecek bir kaynak kod reposuyla yapılandırılmış birimler olarak dağıtıyor. Reponun içeriği standart Kubernetes YAML'ı, Helm chart'ı veya Kustomize olabiliyor.
ArgoCD repoyu izliyor ve bir değişiklik olduğunda — yani çalışan uygulama kaynak repodaki belirtimlerle senkron olmaktan çıktığında — değişiklikleri çekip uygulamayı güncelliyor.
Dağıtımı basit tutmak için yerel bir Git sunucusu çalıştıracağız:
- gitea/gitea.yaml, Jenkins lab'ında kullandığımız
Gitea sunucusunun Kubernetes'te çalışacak şekilde yapılandırılmış hâli
Git sunucusunu dağıtın:
kubectl apply -f labs/argo/specs/giteahttp://localhost:30300/ adresini açın ve site hazır olduğunda student
kullanıcı adı ve student parolasıyla giriş yapın.
Yeni Git sunucusunu bu repo için remote olarak ekleyip içeriğin bir kopyasını gönderin:
# yerel Git sunucusunu ekle:
git remote add labs-argo http://localhost:30300/student/labs.git
git push labs-argo mainBu lab'ın eski sürümü
main:mastergönderiyordu, çünkü o günün ArgoCD sürümü varsayılan olarakmasterdalını bekliyordu. ArgoCD artık varsayılan olarakHEAD'i — yani Git sunucusunun kendi varsayılan dalını — izliyor; dolayısıylamaingöndermek yeterli ve ikinci bir dal adına gerek yok.
Şimdi ArgoCD komut satırını ArgoCD sunucusuna bağlayın, Secret'tan aldığınız parolayı kullanarak:
argocd login localhost:30881 --insecure --username admin --password <parolaniz>
argocd cluster listUzak bir Kubernetes kümesine dağıtım yapmak için yeni kümeler ekleyebilirsiniz. Uygulamalar komut satırıyla veya arayüzle yönetilebilir.
Uygulama dağıtmak
labs/argo/project/whoami klasöründeki uygulama için bir application
oluşturun — o klasör basit bir whoami uygulama belirtimi içeriyor:
argocd app create whoami --repo http://gitea.infra.svc.cluster.local:3000/student/labs.git --path labs/argo/project/whoami --dest-server https://kubernetes.default.svc --dest-namespace default --sync-policy auto --self-healApplication oluşturmak tanımı Kubernetes'te saklıyor ve senkronizasyon politikasını auto olarak ayarladık — dolayısıyla hemen dağıtılacak.
Uygulamaları Kubernetes YAML'ı dağıtarak da oluşturabilirsiniz. Aynı
uygulamanın Application nesnesi hâli burada —
targetRevision: HEAD kullanıyor, dolayısıyla Git sunucusunun varsayılan
dalının adı ne olursa olsun onu izliyor.
📋 Yeni application'ın ayrıntılarını Argo komut satırıyla kontrol edin.
Nasıl yapılacağını bilmiyor musunuz?
Application'lar da birer Kubernetes nesnesi — onları Kubectl ile sorgulayabilirsiniz. Ama temel bilgiyi okunabilir biçimde Argo komut satırından alıyorsunuz:
argocd app list
argocd app get whoamiYeni application'ı arayüzde de görebilirsiniz: https://localhost:30881/applications. Durumun Synced olduğunu göreceksiniz ve uygulamayı açarsanız tüm Kubernetes kaynaklarını göreceksiniz.
ArgoCD uygulamayı repodaki YAML belirtimlerinden dağıtıyor — bakımı gereken pipeline veya script yok. Uygulamayı http://localhost:30010/ adresinde test edebilirsiniz.
Lab
Şimdi GitOps'u iş başında görelim: uygulamanın Docker imaj etiketini değiştirip yeni Pod'larla bir rollout tetikleyeceğiz.
Kubernetes deployment.yaml dosyasını düzenleyip iki değişiklik yapın:
- imaj etiketini
courselabs/whoami-lab:21.09-4yapın - replica sayısını 3 yapın
Değişikliklerinizi yerel Git sunucusuna göndererek güncellemeyi tetikleyin.
Bu ArgoCD application'ı kendi kendini iyileştirecek (self-heal) şekilde ayarlanmış; yani bir yönetici kaynakları kaldırırsa ArgoCD onları yeniden oluşturacak. Kubernetes Deployment nesnesini silerek bunu doğrulayın.
Takıldınız mı? İpuçlarına bakın veya çözümü inceleyin.
Temizlik
ArgoCD'de uygulamaları silmek çalışan uygulamayı kaldırmıyor — cascade bayrağını kullanmazsanız:
argocd app delete whoami --cascadeArgoCD bunu gerçekten yapmak istediğinizi onaylamanızı istiyor 🙂
Sonra lab namespace'lerini silin; bu ArgoCD'yi ve Gitea'yı kaldıracak:
kubectl delete ns -l kubernetes.courselabs.co=argoVe Git remote'unu kaldırın:
git remote rm labs-argo