Kubernetes مسلسل ترسیل: ArgoCD اور Flux کے ساتھ GitOps پائپ لائنز
ArgoCD اور Flux کے ساتھ GitOps کا استعمال کرتے ہوئے Kubernetes کے لیے قابل اعتماد، خودکار تعیناتی پائپ لائنز بنائیں
Kubernetes پر مسلسل ڈیلیوری آسان سے کہیں زیادہ ترقی کر چکی ہے۔ kubectl apply احکامات جدید ٹیمیں GitOps کو اپنا رہی ہیں، ایک ایسا نمونہ جو Git کو اعلانیہ انفراسٹرکچر اور ایپلیکیشن کنفیگریشن کے لیے سچائی کے واحد ذریعہ کے طور پر استعمال کرتا ہے۔ GitOps اصولوں کو ArgoCD اور Flux CD جیسے ٹولز کے ساتھ جوڑ کر، تنظیمیں قابل اعتماد، قابل سماعت، اور خودکار تعیناتی پائپ لائنز حاصل کر سکتی ہیں جو کلسٹرز اور ماحول میں پھیلتی ہیں۔
یہ گائیڈ GitOps اپروچ کا استعمال کرتے ہوئے Kubernetes پر پروڈکشن گریڈ کی مسلسل ڈیلیوری پائپ لائنز بنانے کے لیے فن تعمیر، سیٹ اپ، اور بہترین طریقوں کا احاطہ کرتا ہے۔
GitOps اصول
GitOps کو چار بنیادی اصولوں پر بنایا گیا ہے جو بنیادی طور پر ٹیموں کی تعیناتیوں کا انتظام کرنے کے طریقے کو تبدیل کرتے ہیں:
- اعلامیہ کنفیگریشن - آپ کے سسٹم کی پوری مطلوبہ حالت کو اعلانیہ طور پر بیان کیا گیا ہے۔ Kubernetes کے لیے، اس کا مطلب ہے YAML مینی فیسٹ، ہیلم چارٹس، یا Git میں اسٹور کردہ Kustomize اوورلیز۔
- ورژن کنٹرول شدہ - گٹ سچائی کے واحد ذریعہ کے طور پر کام کرتا ہے۔ ہر تبدیلی پل کی درخواست سے گزرتی ہے، مکمل آڈٹ ٹریل فراہم کرتی ہے اور کمٹ کو واپس کر کے آسان رول بیکس کو فعال کرتی ہے۔
- خودکار مفاہمت - کلسٹر میں چلنے والا ایک ایجنٹ مسلسل Git میں مطلوبہ حالت کا کلسٹر میں اصل حالت سے موازنہ کرتا ہے اور خود بخود کسی بھی بڑھے ہوئے کو ملا دیتا ہے۔
- مسلسل مشاہدہ - نظام گٹ ریپوزٹری اور کلسٹر حالت دونوں کی مسلسل نگرانی کرتا ہے، انحراف پر الرٹ کرتا ہے اور اس بات کو یقینی بناتا ہے کہ کلسٹر ہمیشہ اعلان کردہ کنفیگریشن سے میل کھاتا ہے۔
یہ اصول دستی تعیناتی کے مراحل کو ختم کرتے ہیں، انسانی غلطی کو کم کرتے ہیں، اور کلسٹر پیچیدگی سے قطع نظر ایک مستقل ورک فلو فراہم کرتے ہیں۔
آرگو سی ڈی آرکیٹیکچر اور سیٹ اپ
ArgoCD Kubernetes کے لیے سب سے زیادہ وسیع پیمانے پر اپنایا جانے والا GitOps ٹول ہے۔ یہ کلسٹرز میں ایپلیکیشن کی تعیناتیوں کے انتظام کے لیے ایک طاقتور ویب UI، CLI، اور API فراہم کرتا ہے۔
بنیادی اجزاء
ArgoCD کئی اہم اجزاء پر مشتمل ہے جو مل کر کام کرتے ہیں:
- API سرور - ایک gRPC/REST API کو ظاہر کرتا ہے اور ویب UI کو پیش کرتا ہے۔ تصدیق، RBAC، اور بیرونی انضمام کو ہینڈل کرتا ہے۔
- ذخیرہ سرور - گٹ ریپوزٹریوں کو کلون کرتا ہے اور ہیلم چارٹس، کسٹمائز، یا سادہ 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: 3mدی syncPolicy.automated سیکشن خودکار مطابقت پذیری کو قابل بناتا ہے۔ دی prune آپشن ان وسائل کو ہٹاتا ہے جن کی اب گٹ میں وضاحت نہیں کی گئی ہے، جبکہ selfHeal دستی تبدیلیوں کو براہ راست کلسٹر میں لوٹاتا ہے۔
فلکس سی ڈی: ایک متبادل نقطہ نظر
فلکس سی ڈی GitOps کے لیے ایک مختلف آرکیٹیکچرل اپروچ لیتی ہے۔ UI کے ساتھ مرکزی سرور کے بجائے، Flux Kubernetes کنٹرولرز کے ایک سیٹ کے طور پر کام کرتا ہے جو ہر ایک مخصوص تشویش کو سنبھالتا ہے۔
بہاؤ اجزاء
- ماخذ کنٹرولر - گٹ ریپوزٹریز، ہیلم ریپوزٹریز، اور او سی آئی آرٹفیکٹ ذرائع کا انتظام کرتا ہے۔
- کسٹمائز کنٹرولر - کسٹمائز اوورلیز اور سادہ 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 بمقابلہ فلوکس: کب کون سا انتخاب کریں۔
جب آپ کو مرئیت کے لیے ایک بھرپور ویب UI، عمدہ RBAC کے ساتھ کثیر کرایہ داری، اور مرکزی انتظامی جہاز کی ضرورت ہو تو 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 اور Flux دونوں ہیلم کو مقامی طور پر سپورٹ کرتے ہیں۔ ArgoCD اپنے ریپوزٹری سرور کے ذریعے چارٹ سرور کی طرف پیش کرتا ہے، جبکہ Flux ہیلم SDK کو براہ راست اپنے ہیلم کنٹرولر کے اندر استعمال کرتا ہے۔
تعیناتی کی حکمت عملی
درست تعیناتی کی حکمت عملی کا انتخاب خطرے کو کم کرتا ہے اور صفر-ڈاؤن ٹائم ریلیز کو یقینی بناتا ہے۔
رولنگ اپڈیٹس
پہلے سے طے شدہ 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بلیو گرین تعیناتیاں
دو ایک جیسے ماحول چلائیں (نیلے اور سبز)۔ نئے ورژن کو غیر فعال ماحول میں تعینات کریں، اس کی تصدیق کریں، پھر ٹریفک کو تبدیل کریں۔ یہ پچھلے ماحول میں واپس جا کر فوری رول بیک فراہم کرتا ہے۔ سروس لیبل سلیکٹرز یا Istio ٹریفک مینجمنٹ کے ساتھ لاگو کریں۔
کینری تعیناتیاں
دھیرے دھیرے ٹریفک کے ایک چھوٹے سے فیصد کو نئے ورژن کی طرف روٹ کریں، جیسے جیسے اعتماد بڑھتا جائے اس فیصد میں اضافہ ہوتا جائے۔ Flagger اور Argo Rollouts جیسے ٹولز میٹرکس پر مبنی پروموشن کے ساتھ کینری تجزیہ کو خودکار بناتے ہیں۔
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 خود بخود آخری معلوم اچھی حالت میں واپس آ سکتی ہے۔
مزید نفیس رول بیک منظرناموں کے لیے، Argo Rollouts اور Flagger Prometheus میٹرکس کا تجزیہ کر سکتے ہیں، خودکار ٹیسٹ چلا سکتے ہیں، اور انحطاطی کارکردگی کو ظاہر کرنے والے رول آؤٹ کو روک سکتے ہیں۔
مہربند رازوں کے ساتھ راز کا انتظام
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 وسیلہ محفوظ طریقے سے گٹ کے ساتھ وابستہ ہوسکتا ہے۔ ٹارگٹ کلسٹر میں صرف سیل شدہ سیکرٹس کنٹرولر کے پاس نجی کلید ہوتی ہے جو اسے ڈکرپٹ کرنے کے لیے درکار ہوتی ہے۔ متبادل طریقوں میں ایکسٹرنل سیکرٹس آپریٹر (AWS سیکرٹس مینیجر، HashiCorp والٹ وغیرہ سے نکالنے کے لیے) اور فائل لیول انکرپشن کے لیے SOPS شامل ہیں۔
نگرانی کی تعیناتی۔
GitOps پائپ لائنوں کی پیداوار کے لیے تعیناتی کی حیثیت میں مرئیت ضروری ہے۔ متعدد سطحوں پر نگرانی کو نافذ کریں:
- ArgoCD میٹرکس - ArgoCD مطابقت پذیری کی حیثیت، صحت، اور آپریشن کے دورانیے کے لیے Prometheus میٹرکس کو بے نقاب کرتا ہے۔ تعیناتی فریکوئنسی اور ناکامی کی شرح کو ٹریک کرنے کے لیے گرافانا ڈیش بورڈز بنائیں۔
- Kubernetes واقعات - مسائل کا جلد پتہ لگانے کے لیے پوڈ شیڈولنگ، امیج پل، اور ریڈی نیس پروب ایونٹس کی نگرانی کریں۔
- ایپلیکیشن ہیلتھ چیکس - Lua اسکرپٹس کا استعمال کرتے ہوئے 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 بیرونی کلسٹرز کو رجسٹر کرکے مقامی طور پر ملٹی کلسٹر مینجمنٹ کی حمایت کرتا ہے۔ Flux یہ ایک مینجمنٹ کلسٹر کے ذریعے حاصل کرتا ہے جو کام کے بوجھ کے کلسٹرز کو بوٹسٹریپ کرتا ہے۔
ArgoCD میں ApplicationSet کنٹرولر خاص طور پر ملٹی کلسٹر منظرناموں کے لیے طاقتور ہے۔ یہ کلسٹر لسٹوں، گٹ ڈائریکٹریز، یا پل ریکوئسٹ ایونٹس کی بنیاد پر ایپلیکیشن کے وسائل کو متحرک طور پر تیار کر سکتا ہے۔
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 یا Flux CD کے ساتھ GitOps Kubernetes مسلسل ترسیل کے لیے ایک مضبوط بنیاد فراہم کرتا ہے۔ Git کو سچائی کا ماخذ سمجھ کر، خودکار مفاہمت، اور ترقی پسند ڈیلیوری کی حکمت عملیوں کا فائدہ اٹھا کر، ٹیمیں اعتماد کے ساتھ تعینات کر سکتی ہیں اور ناکامیوں سے جلد باز آ سکتی ہیں۔ ایک سادہ سنگل کلسٹر سیٹ اپ کے ساتھ شروع کریں، اپنے Git ریپوزٹری کا ڈھانچہ قائم کریں، اور آپ کے پلیٹ فارم کے پختہ ہونے کے ساتھ ساتھ کینری تعیناتیوں، ملٹی کلسٹر مینجمنٹ، اور خودکار رول بیک پالیسیوں جیسے جدید نمونوں کو اپنائیں
GitOps انفراسٹرکچر میں سرمایہ کاری بہتر وشوسنییتا، تیز تر واقعے کے ردعمل، مکمل آڈٹ ٹریلز، اور ڈیولپر کے تجربے کے ذریعے منافع کی ادائیگی کرتی ہے جو کہ تعیناتیوں کو پل کی درخواست کو ضم کرنے کی طرح آسان بناتا ہے۔