argocd

Hem declarative hem de web ui özelliği olan kubernetes cd aracı

Ne işe yarar?

  • Gitops yaklaşımı sağlar
  • Uygulamaların belirtilen hedef ortamlara otomatik dağıtımı
  • Çoklu yapılandırma yönetimi/şablon oluşturma araçları için destek (Kustomize, Helm, Ksonnet, Jsonnet, düz-YAML)
  • Birden çok kümeyi yönetme ve dağıtma yeteneği
  • SSO Entegrasyonu (OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft, LinkedIn)
  • Yetkilendirme ile çoklu müşteri ve RBAC özellikleri
  • Gitteki istediğiniz branche bağlayarak farklı testleri otomatik gerçekleştirme
  • Çalıştırılmış bir uygulamayı geri alma/her yerden geri alma
  • Uygulama kaynaklarının sağlık durumu analizi (web ui ve cliden kontrol)
  • Git ile kubernetes ortamları arasındaki farklı tespit etme ve görselleştirme
  • Uygulamaların istenen duruma otomatik veya manuel olarak eşitlenmesi
  • Uygulama etkinliğinin gerçek zamanlı görünümünü sağlayan Web Kullanıcı Arayüzü
  • Otomasyon ve CI entegrasyonu için CLI
  • Web hook entegrasyonu (GitHub, BitBucket, GitLab)
  • Otomasyon için erişim tokenları
  • Karmaşık uygulama sunumlarını desteklemek için PreSync, Sync, PostSync hookları (ör. mavi/yeşil ve kanarya yükseltmeleri)
  • Uygulama olayları ve API çağrıları için denetim kayıtları
  • Prometheus metrikleri
  • Helm deployment (Nginx ingress helm redis vb.)
  • Argocd Notifications ile alarm üreterek bir çok araca otomatik bildirim gönderme

argocd mimari

Kurulum

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

  # web değil sadece cli istersek
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/core-install.yaml

  # web sunucuya ulaşmak için
kubectl patch svc argocd -server -n argocd -p '{"spec": {"type": "NodePort"}}'

# login parolasını almak(kullanıcı adı admin)
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d && echo

# webui a gitmek için
https: //nodeip:nodeport


Local admini devre dışı bırakmak için

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
...
data:
  ...
  admin.enabled: "false"

Declarative Örnek

  • Hangi repodan hangi revisiondan veriyi alacak?
  • Hangi kube kümesine kuracak?
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd-demo
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/justmeandopensource/argocd-demo
    targetRevision: HEAD
    path: yamls
  destination:
    server: https://kubernetes.default.svc
    namespace: default

Komut satırı kullanımı


argocd login <argocd-server adres>
argocd account list
argocd account get --account <yukarıdaki kullanıcı>
argocd account update-password   --account <yukarıdaki kullanıcı>   --current-password <admin parolası>   --new-password <bir password>


ci-cd sürecinde kullanılacak token burada üretilir. Login olduktan sonra hiç parametre vermeden aşağıdaki komut çalıştırılırsa never expirede token üretir. 
argocd account generate-token 


Bu token gitlab-ci variables altında argocd config dosyası içine konularak kullanılır

contexts:
- name: argocd-server.argocd
  server: argocd-server.argocd
  user: argocd-server.argocd
current-context: argocd-server.argocd
servers:
- grpc-web-root-path: ""
  insecure: true
  server: argocd-server.argocd
users:
- auth-token: <token>
  name: argocd-server.argocd

rbac yapısı

https://www.opsmx.com/blog/how-to-configure-rbac-in-argo-cd/ (kullanıcı oluşturma)


kubectl edit cm argocd-cm -n argocd

apiVersion: v1
data:
  accounts.admin: apiKey, login
  account.<kullanıcı>: apiKey, login #  yeni kullanıcı
  exec.enabled: "true" # terminal çalışsın diye
  ...
kind: ConfigMap
...
  name: argocd-cm
  namespace: argocd



argocd login <ARGOCD-URL>

argocd account list

argocd account update-password --account <kullanıcı> --new-password <parola>



apiVersion: v1
data:
  default.policy: role:''
  policy.csv: |
    p, <kullanıcı>, *, *, <proje>/*, allow
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd

Kaynaklar