Kuruluşlar Kubernetes dağıtımlarını ölçeklendirdikçe, sağlam, otomatik dağıtım stratejilerinin gerekliliği ön plana çıkar. GitOps, altyapı ve uygulama dağıtımlarını kod olarak ele alan bir yöntemdir ve modern DevOps uygulamaları için altın standart haline gelmiştir. Bu kapsamlı kılavuzda, iki öncelikli aracı kullanarak GitOps iş akışlarını nasıl uygulayacağımızı inceleyeceğiz: Argo CD ve Flux, özellikle geliştirme, hazırlık ve üretim ortamları arasında çok ortamlı dağıtımlar üzerine odaklanarak.
GitOps Temellerini Anlamak
GitOps, altyapı ve uygulama dağıtımları için tek doğruluk kaynağı olarak Git'i kullanan bir uygulama yaklaşımıdır. Temel ilke, sistemin istenen durumunun bir Git deposunda saklanması ve bir GitOps aracının gerçek durumu bu istenen durumla uyumlu hale getirmeye çalışmasıdır.
Bu yaklaşım şu avantajları sağlar:
- Sürüm kontrolü ile immutable altyapı
- Denetim günlükleri ve erişim kontrolleri ile artırılmış güvenlik
- İyileştirilmiş afet kurtarma yetenekleri
- Geliştirme ve operasyon ekipleri arasında kolay iş birliği
Çok Ortam Dağıtımları İçin Argo CD Ayarlama
Argo CD, Kubernetes dağıtımları için bildirimsel, Git tabanlı bir sürekli dağıtım aracıdır. Pratik bir uygulama üzerinden geçelim.
İlk olarak, hazırlık ortamı için basit bir Argo CD uygulama tanımı oluşturalım:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-staging
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/my-app.git
targetRevision: HEAD
path: deployments/staging
destination:
server: https://kubernetes.default.svc
namespace: staging
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
selfHeal: trueÇok ortamlı yönetim için her ortam için ayrı uygulama tanımları oluşturabiliriz, böylece tutarlı dağıtım desenleri sağlarken ortam özel yapılandırmalara izin veririz.
Ortam Özel Dağıtımlar İçin Flux Uygulaması
Flux, başka bir popüler GitOps aracıdır ve GitOps kontrolör mimarisi ile farklı bir yaklaşım sunar. Flux kullanarak ortam özel dağıtımlar nasıl uygulanır onu inceleyelim:
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 30s
url: https://github.com/your-org/my-app.git
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
name: my-app-staging
namespace: flux-system
spec:
interval: 10m0s
targetNamespace: staging
sourceRef:
kind: GitRepository
name: my-app
path: ./deploy/staging
prune: trueFlux yaklaşımı, ortam özel yapılandırmalar için Kustomize katmanlarını kullanır, bu da birden fazla ortamı yönetmek için oldukça esnek bir yapı sağlar.
Ortam Yapılandırma Yönetimi
Çok ortamlı dağıtımlarda en önemli zorluklardan biri yapılandırma farklılıklarını yönetmektir. Farklı ortamlar için depo yapısını nasıl kuracağınızın bir örneğini aşağıda bulabilirsiniz:
# Depo yapısı
my-app/
├── deployments/
│ ├── development/
│ │ ├── configmap.yaml
│ │ └── deployment.yaml
│ ├── staging/
│ │ ├── configmap.yaml
│ │ └── deployment.yaml
│ └── production/
│ ├── configmap.yaml
│ └── deployment.yaml
├── kustomize/
│ ├── base/
│ ├── overlays/
│ │ ├── development/
│ │ ├── staging/
│ │ └── production/
│ └── kustomization.yamlKustomize katmanlarını kullanarak ortam özel yapılandırmaları yönetebilir, ortak temel bileşenleri paylaşabiliriz:
# kustomize/overlays/staging/kustomization.yaml
resources:
- ../../base
patches:
- path: patch-staging.yaml
target:
kind: Deployment
name: my-app
configMapGenerator:
- name: app-config
literals:
- ENV=staging
- LOG_LEVEL=infoGüvenlik ve Erişim Kontrol Uygulaması
Güvenlik, GitOps uygulamalarında kritik öneme sahiptir. Hem Argo CD hem de Flux, RBAC ve kimlik doğrulama mekanizmalarını destekler. Argo CD'nin rol tabanlı erişim kontrolü örneğini aşağıda bulabilirsiniz:
apiVersion: v1
kind: Role
metadata:
name: staging-deployer
namespace: argocd
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: v1
kind: RoleBinding
metadata:
name: staging-deployer-binding
namespace: argocd
subjects:
- kind: User
name: deployer-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: staging-deployer
apiGroup: rbac.authorization.k8s.ioSonuç
Argo CD ve Flux ile GitOps iş akışlarını uygulamak, kuruluşunuza çok ortamlı Kubernetes dağıtımlarını yönetmek için sağlam, güvenli ve ölçeklenebilir bir yaklaşım sunar. Her iki araç da benzersiz güçlü yönler sunar: Argo CD'nin kapsamlı arayüzü ve bildirimsel yaklaşımı, Flux'un hafif mimarisi ve güçlü Git entegrasyonu.
Net dağıtım desenleri oluşturarak, ortam özel yapılandırmaları kullanarak ve uygun güvenlik kontrollerini uygulayarak, dağıtım güvenilirliğini artırır, ekip iş birliğini geliştirir ve tutarlı altyapı olarak kod uygulamalarını korur bir GitOps boru hattı oluşturursunuz. Başarı için uygun planlama, net dokümantasyon ve operasyonel geri bildirimlere dayalı GitOps iş akışlarınızın sürekli iyileştirilmesi gereklidir.