Kubernetes सतत वितरण: ArgoCD और फ्लक्स के साथ GitOps पाइपलाइन
ArgoCD और फ्लक्स के साथ GitOps का उपयोग करके Kubernetes के लिए विश्वसनीय, स्वचालित परिनियोजन पाइपलाइन बनाएं
Kubernetes पर निरंतर डिलीवरी सरल से कहीं आगे बढ़ गई है kubectl apply आदेश. आधुनिक टीमें GitOps को अपना रही हैं, एक ऐसा प्रतिमान जो घोषणात्मक बुनियादी ढांचे और एप्लिकेशन कॉन्फ़िगरेशन के लिए सत्य के एकल स्रोत के रूप में Git का उपयोग करता है। ArgoCD और फ्लक्स सीडी जैसे टूल के साथ GitOps सिद्धांतों को जोड़कर, संगठन विश्वसनीय, ऑडिट योग्य और स्वचालित तैनाती पाइपलाइन प्राप्त कर सकते हैं जो क्लस्टर और वातावरण में बड़े पैमाने पर होते हैं।
यह मार्गदर्शिका GitOps दृष्टिकोण का उपयोग करके Kubernetes पर उत्पादन-ग्रेड निरंतर वितरण पाइपलाइनों के निर्माण के लिए वास्तुकला, सेटअप और सर्वोत्तम प्रथाओं को शामिल करती है।
GitOps सिद्धांत
GitOps चार मुख्य सिद्धांतों पर बनाया गया है जो टीमों द्वारा तैनाती का प्रबंधन करने के तरीके को मौलिक रूप से बदल देते हैं:
- घोषणात्मक विन्यास - आपके सिस्टम की संपूर्ण वांछित स्थिति को घोषणात्मक रूप से वर्णित किया गया है। Kubernetes के लिए, इसका अर्थ है YAML मैनिफ़ेस्ट, हेल्म चार्ट, या Git में संग्रहीत कस्टमाइज़ ओवरले।
- संस्करण नियंत्रित - Git सत्य के एकल स्रोत के रूप में कार्य करता है। प्रत्येक परिवर्तन एक पुल अनुरोध के माध्यम से होता है, एक पूर्ण ऑडिट ट्रेल प्रदान करता है और प्रतिबद्धताओं को वापस करके आसान रोलबैक सक्षम करता है।
- स्वचालित सुलह - क्लस्टर में चलने वाला एक एजेंट लगातार Git में वांछित स्थिति की तुलना क्लस्टर में वास्तविक स्थिति से करता है और स्वचालित रूप से किसी भी बहाव का समाधान करता है।
- सतत अवलोकन - सिस्टम लगातार Git रिपॉजिटरी और क्लस्टर स्थिति दोनों की निगरानी करता है, विचलन पर चेतावनी देता है और यह सुनिश्चित करता है कि क्लस्टर हमेशा घोषित कॉन्फ़िगरेशन से मेल खाता हो।
ये सिद्धांत मैन्युअल परिनियोजन चरणों को समाप्त करते हैं, मानवीय त्रुटि को कम करते हैं, और क्लस्टर जटिलता की परवाह किए बिना एक सुसंगत वर्कफ़्लो प्रदान करते हैं।
ArgoCD वास्तुकला और सेटअप
Kubernetes के लिए ArgoCD सबसे व्यापक रूप से अपनाया जाने वाला GitOps टूल है। यह क्लस्टरों में एप्लिकेशन परिनियोजन के प्रबंधन के लिए एक शक्तिशाली वेब यूआई, सीएलआई और एक्सपीआर1एक्स प्रदान करता है।
मुख्य घटक
ArgoCD में कई प्रमुख घटक शामिल हैं जो एक साथ काम करते हैं:
- API सर्वर - एक gRPC/REST API को प्रदर्शित करता है और वेब UI परोसता है। प्रमाणीकरण, आरबीएसी और बाहरी एकीकरण को संभालता है।
- रिपोजिटरी सर्वर - Git रिपॉजिटरी को क्लोन करता है और हेल्म चार्ट, कस्टमाइज़ या सादे YAML से Kubernetes मैनिफ़ेस्ट उत्पन्न करता है।
- अनुप्रयोग नियंत्रक - लगातार चल रहे एप्लिकेशन की निगरानी करता है और Git में वांछित स्थिति के साथ लाइव स्थिति की तुलना करता है।
- रेडिस - रिपॉजिटरी सर्वर और एप्लिकेशन कंट्रोलर के लिए कैशिंग प्रदान करता है।
इंस्टालेशन
आधिकारिक मैनिफ़ेस्ट या हेल्म चार्ट का उपयोग करके अपने क्लस्टर में ArgoCD तैनात करें:
# Create namespace and install ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Or via Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd \
--namespace argocd \
--create-namespace \
--set server.service.type=LoadBalancerअनुप्रयोगों को परिभाषित करना
ArgoCD एक का उपयोग करता है Application कस्टम संसाधन यह परिभाषित करने के लिए कि क्या और कहाँ तैनात करना है। यहां एक विशिष्ट एप्लिकेशन परिभाषा दी गई है:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-web-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests.git
targetRevision: main
path: apps/my-web-app/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3mThe syncPolicy.automated अनुभाग स्वचालित सिंक्रनाइज़ेशन सक्षम करता है. prune विकल्प उन संसाधनों को हटा देता है जो अब Git में परिभाषित नहीं हैं selfHeal किए गए मैन्युअल परिवर्तनों को सीधे क्लस्टर में वापस कर देता है।
फ्लक्स सीडी: एक वैकल्पिक दृष्टिकोण
फ्लक्स सीडी GitOps के लिए एक अलग वास्तुशिल्प दृष्टिकोण अपनाती है। यूआई के साथ एक केंद्रीकृत सर्वर के बजाय, फ्लक्स Kubernetes नियंत्रकों के एक सेट के रूप में काम करता है जो प्रत्येक एक विशिष्ट चिंता को संभालता है।
फ्लक्स घटक
- स्रोत नियंत्रक - Git रिपॉजिटरी, हेल्म रिपॉजिटरी और OCI आर्टिफैक्ट स्रोतों का प्रबंधन करता है।
- नियंत्रक को अनुकूलित करें - कस्टमाइज़ ओवरले और सादे YAML मेनिफ़ेस्ट लागू करता है।
- पतवार नियंत्रक - हेल्म चार्ट रिलीज़ को प्रबंधित करता है
HelmReleaseकस्टम संसाधन. - अधिसूचना नियंत्रक - स्लैक, टीम्स और वेबहुक प्रदाताओं के साथ एकीकृत होकर इनबाउंड और आउटबाउंड इवेंट को संभालता है।
- छवि स्वचालन नियंत्रक - नई छवियां उपलब्ध होने पर कंटेनर रजिस्ट्रियों को स्कैन करें और मैनिफ़ेस्ट अपडेट करें।
फ्लक्स बूटस्ट्रैप
# Bootstrap Flux on a cluster with a GitHub repository
flux bootstrap github \
--owner=myorg \
--repository=fleet-infra \
--branch=main \
--path=clusters/production \
--personal
# Define a HelmRelease
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: nginx-ingress
namespace: ingress-system
spec:
interval: 5m
chart:
spec:
chart: ingress-nginx
version: "4.x"
sourceRef:
kind: HelmRepository
name: ingress-nginx
namespace: flux-system
values:
controller:
replicaCount: 3
metrics:
enabled: trueArgoCD बनाम फ्लक्स: कब कौन सा चुनें
ArgoCD तब आदर्श है जब आपको दृश्यता के लिए एक समृद्ध वेब यूआई, सुक्ष्म आरबीएसी के साथ बहु-किरायेदारी और एक केंद्रीकृत प्रबंधन विमान की आवश्यकता होती है। फ़्लक्स ऐसे वातावरण में चमकता है जो हल्के, नियंत्रक-आधारित आर्किटेक्चर को पसंद करते हैं, छवि स्वचालन क्षमताओं की आवश्यकता होती है, या Kubernetes API पारिस्थितिकी तंत्र के साथ गहरा एकीकरण चाहते हैं।
GitOps में हेल्म चार्ट प्रबंधन
हेल्म चार्ट Kubernetes अनुप्रयोगों के लिए वास्तविक पैकेजिंग प्रारूप हैं। GitOps वर्कफ़्लो में, संपूर्ण वातावरण में हेल्म मानों को प्रबंधित करने के लिए सावधानीपूर्वक संगठन की आवश्यकता होती है।
# Repository structure for multi-environment Helm management
k8s-manifests/
base/
my-app/
Chart.yaml
values.yaml # Default values
templates/
deployment.yaml
service.yaml
ingress.yaml
environments/
dev/
my-app/
values.yaml # Dev overrides
staging/
my-app/
values.yaml # Staging overrides
production/
my-app/
values.yaml # Production overridesArgoCD और फ्लक्स दोनों मूल रूप से हेल्म का समर्थन करते हैं। ArgoCD अपने रिपॉजिटरी सर्वर के माध्यम से चार्ट सर्वर-साइड को प्रस्तुत करता है, जबकि फ्लक्स सीधे अपने हेल्म नियंत्रक के भीतर हेल्म एसडीके का उपयोग करता है।
परिनियोजन रणनीतियाँ
सही परिनियोजन रणनीति चुनने से जोखिम कम हो जाता है और शून्य-डाउनटाइम रिलीज़ सुनिश्चित होती है।
रोलिंग अपडेट
डिफ़ॉल्ट Kubernetes रणनीति. पॉड्स को धीरे-धीरे नए संस्करणों से बदल दिया जाता है। कॉन्फ़िगर maxSurge और maxUnavailable रोलआउट गति को नियंत्रित करने के लिए.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
spec:
containers:
- name: app
image: myapp:v2.1.0
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10नीली-हरी तैनाती
दो समान वातावरण चलाएँ (नीला और हरा)। नए संस्करण को निष्क्रिय वातावरण में तैनात करें, इसे सत्यापित करें, फिर ट्रैफ़िक स्विच करें। यह पिछले परिवेश पर वापस स्विच करके तत्काल रोलबैक प्रदान करता है। सेवा लेबल चयनकर्ताओं या इस्तियो ट्रैफ़िक प्रबंधन के साथ कार्यान्वित करें।
कैनरी तैनाती
ट्रैफ़िक के एक छोटे प्रतिशत को धीरे-धीरे नए संस्करण में रूट करें, जैसे-जैसे आत्मविश्वास बढ़ता है, प्रतिशत बढ़ता जाता है। फ़्लैगर और आर्गो रोलआउट्स जैसे उपकरण मेट्रिक्स-आधारित प्रचार के साथ कैनरी विश्लेषण को स्वचालित करते हैं।
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 5
strategy:
canary:
steps:
- setWeight: 10
- pause: { duration: 5m }
- setWeight: 30
- pause: { duration: 5m }
- setWeight: 60
- pause: { duration: 5m }
canaryService: my-app-canary
stableService: my-app-stable
trafficRouting:
istio:
virtualService:
name: my-app-vsvc
routes:
- primaryस्वचालित रोलबैक
GitOps रोलबैक को सरल बनाता है: बस Git कमिट को वापस लाएं। हालाँकि, स्वास्थ्य जांच के आधार पर स्वचालित रोलबैक एक अतिरिक्त सुरक्षा जाल प्रदान करते हैं।
ArgoCD अपने सिंक और स्वास्थ्य मूल्यांकन प्रणाली के माध्यम से स्वचालित रोलबैक का समर्थन करता है। यदि कोई एप्लिकेशन सिंक के बाद खराब स्थिति में प्रवेश करता है, तो ArgoCD स्वचालित रूप से अंतिम ज्ञात अच्छी स्थिति में वापस आ सकता है।
अधिक परिष्कृत रोलबैक परिदृश्यों के लिए, अर्गो रोलआउट्स और फ़्लैगर प्रोमेथियस मेट्रिक्स का विश्लेषण कर सकते हैं, स्वचालित परीक्षण चला सकते हैं, और खराब प्रदर्शन दिखाने वाले रोलआउट को निरस्त कर सकते हैं।
सीलबंद रहस्यों के साथ रहस्य प्रबंधन
Git में रहस्य संग्रहीत करना GitOps के लिए एक महत्वपूर्ण चुनौती है। सीलबंद रहस्य रहस्यों को एन्क्रिप्ट करके इसे हल करता है जिसे केवल लक्ष्य क्लस्टर में चल रहे नियंत्रक द्वारा डिक्रिप्ट किया जा सकता है।
# Install Sealed Secrets controller
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm install sealed-secrets sealed-secrets/sealed-secrets \
--namespace kube-system
# Encrypt a secret
kubectl create secret generic db-credentials \
--from-literal=username=admin \
--from-literal=password=s3cure-p@ss \
--dry-run=client -o yaml | \
kubeseal --format yaml > db-credentials-sealed.yamlपरिणामस्वरूप SealedSecret संसाधन को Git के लिए सुरक्षित रूप से प्रतिबद्ध किया जा सकता है। लक्ष्य क्लस्टर में केवल सीलबंद रहस्य नियंत्रक ही इसे डिक्रिप्ट करने के लिए आवश्यक निजी कुंजी रखता है। वैकल्पिक तरीकों में एक्सटर्नल सीक्रेट्स ऑपरेटर (AWS सीक्रेट्स मैनेजर, हाशीकॉर्प वॉल्ट आदि से खींचने के लिए) और फ़ाइल-स्तरीय एन्क्रिप्शन के लिए SOPS शामिल हैं।
निगरानी तैनाती
GitOps पाइपलाइनों के उत्पादन के लिए परिनियोजन स्थिति में दृश्यता आवश्यक है। कई स्तरों पर निगरानी लागू करें:
- आर्गोसीडी मेट्रिक्स - ArgoCD सिंक स्थिति, स्वास्थ्य और संचालन अवधि के लिए प्रोमेथियस मेट्रिक्स को उजागर करता है। परिनियोजन आवृत्ति और विफलता दर को ट्रैक करने के लिए ग्राफाना डैशबोर्ड बनाएं।
- Kubernetes घटनाएँ - समस्याओं का शीघ्र पता लगाने के लिए पॉड शेड्यूलिंग, इमेज पुल और तत्परता जांच घटनाओं की निगरानी करें।
- आवेदन स्वास्थ्य जांच - अपने विशिष्ट संसाधनों के लिए "स्वस्थ" का अर्थ परिभाषित करने के लिए लुआ स्क्रिप्ट का उपयोग करके ArgoCD में कस्टम स्वास्थ्य जांच कॉन्फ़िगर करें।
- सूचना देने वाले - सिंक विफलताओं, स्वास्थ्य गिरावट, या बहाव का पता लगाने पर अलर्ट करने के लिए स्लैक, पेजरड्यूटी या ईमेल के साथ ArgoCD सूचनाओं को एकीकृत करें।
# ArgoCD Notification ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
namespace: argocd
data:
trigger.on-sync-failed: |
- when: app.status.operationState.phase in ['Error', 'Failed']
send: [slack-notification]
template.slack-notification: |
message: |
Application {{.app.metadata.name}} sync {{.app.status.operationState.phase}}.
Revision: {{.app.status.sync.revision}}
service.slack: |
token: $slack-token
channel: deploymentsमल्टी-क्लस्टर डिलीवरी
जैसे-जैसे संगठन बड़े होते हैं, कई समूहों में तैनाती आवश्यक हो जाती है। ArgoCD बाहरी क्लस्टरों को पंजीकृत करके मूल रूप से मल्टी-क्लस्टर प्रबंधन का समर्थन करता है। फ्लक्स इसे एक प्रबंधन क्लस्टर के माध्यम से प्राप्त करता है जो वर्कलोड क्लस्टर को बूटस्ट्रैप करता है।
ArgoCD में एप्लिकेशनसेट नियंत्रक मल्टी-क्लस्टर परिदृश्यों के लिए विशेष रूप से शक्तिशाली है। यह क्लस्टर सूचियों, Git निर्देशिकाओं या पुल अनुरोध ईवेंट के आधार पर गतिशील रूप से एप्लिकेशन संसाधन उत्पन्न कर सकता है।
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-app-set
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
env: production
template:
metadata:
name: 'my-app-{{name}}'
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests.git
targetRevision: main
path: 'apps/my-app/overlays/{{metadata.labels.region}}'
destination:
server: '{{server}}'
namespace: my-appनिष्कर्ष
ArgoCD या फ्लक्स CD के साथ GitOps Kubernetes निरंतर डिलीवरी के लिए एक मजबूत आधार प्रदान करता है। Git को सत्य का स्रोत मानकर, सामंजस्य को स्वचालित करके और प्रगतिशील वितरण रणनीतियों का लाभ उठाकर, टीमें आत्मविश्वास के साथ तैनात हो सकती हैं और विफलताओं से जल्दी उबर सकती हैं। एक साधारण सिंगल-क्लस्टर सेटअप से शुरुआत करें, अपनी Git रिपॉजिटरी संरचना स्थापित करें, और धीरे-धीरे अपने प्लेटफ़ॉर्म के परिपक्व होने पर कैनरी परिनियोजन, मल्टी-क्लस्टर प्रबंधन और स्वचालित रोलबैक नीतियों जैसे उन्नत पैटर्न को अपनाएं।
GitOps बुनियादी ढांचे में निवेश बेहतर विश्वसनीयता, तेज घटना प्रतिक्रिया, पूर्ण ऑडिट ट्रेल्स और एक डेवलपर अनुभव के माध्यम से लाभांश का भुगतान करता है जो एक पुल अनुरोध को मर्ज करने के रूप में तैनाती को सरल बनाता है।