Kubernetes ক্রমাগত বিতরণ: ArgoCD এবং Flux সহ GitOps পাইপলাইন
ArgoCD এবং Flux সহ GitOps ব্যবহার করে Kubernetes এর জন্য নির্ভরযোগ্য, স্বয়ংক্রিয় স্থাপনার পাইপলাইন তৈরি করুন
Kubernetes-এ ক্রমাগত ডেলিভারি সহজের বাইরেও বিকশিত হয়েছে kubectl apply আদেশ আধুনিক দলগুলি GitOps গ্রহণ করছে, একটি দৃষ্টান্ত যা ঘোষণামূলক অবকাঠামো এবং অ্যাপ্লিকেশন কনফিগারেশনের জন্য সত্যের একক উত্স হিসাবে গিটকে ব্যবহার করে। ArgoCD এবং Flux CD-এর মতো সরঞ্জামগুলির সাথে GitOps নীতিগুলিকে একত্রিত করে, সংস্থাগুলি নির্ভরযোগ্য, নিরীক্ষণযোগ্য, এবং স্বয়ংক্রিয় স্থাপনার পাইপলাইনগুলি অর্জন করতে পারে যা ক্লাস্টার এবং পরিবেশ জুড়ে স্কেল করে।
এই গাইডটি GitOps পদ্ধতি ব্যবহার করে Kubernetes-এ প্রোডাকশন-গ্রেড ক্রমাগত ডেলিভারি পাইপলাইন তৈরির জন্য আর্কিটেকচার, সেটআপ এবং সর্বোত্তম অনুশীলনগুলি কভার করে।
GitOps নীতি
GitOps চারটি মূল নীতির উপর নির্মিত যা মূলত দলগুলি কীভাবে স্থাপনা পরিচালনা করে তা পরিবর্তন করে:
- ঘোষণামূলক কনফিগারেশন - আপনার সিস্টেমের সম্পূর্ণ পছন্দসই অবস্থা ঘোষণামূলকভাবে বর্ণনা করা হয়েছে। Kubernetes এর জন্য, এর মানে হল YAML ম্যানিফেস্ট, হেলম চার্ট, বা Git-এ সংরক্ষিত কাস্টমাইজ ওভারলে।
- সংস্করণ নিয়ন্ত্রিত - গিট সত্যের একক উত্স হিসাবে কাজ করে। প্রতিটি পরিবর্তন একটি পুল অনুরোধের মধ্য দিয়ে যায়, একটি সম্পূর্ণ অডিট ট্রেল প্রদান করে এবং কমিটগুলিকে প্রত্যাবর্তন করে সহজ রোলব্যাক সক্ষম করে৷
- স্বয়ংক্রিয় পুনর্মিলন - ক্লাস্টারে চলমান একটি এজেন্ট ক্রমাগত Git-এর কাঙ্খিত অবস্থাকে ক্লাস্টারের প্রকৃত অবস্থার সাথে তুলনা করে এবং স্বয়ংক্রিয়ভাবে যেকোনো প্রবাহের সাথে মিলিত হয়।
- ক্রমাগত পর্যবেক্ষণ - সিস্টেমটি অবিচ্ছিন্নভাবে গিট রিপোজিটরি এবং ক্লাস্টার অবস্থা উভয়কেই পর্যবেক্ষণ করে, বিচ্যুতির বিষয়ে সতর্ক করে এবং নিশ্চিত করে যে ক্লাস্টার সর্বদা ঘোষিত কনফিগারেশনের সাথে মেলে।
এই নীতিগুলি ম্যানুয়াল স্থাপনার পদক্ষেপগুলিকে দূর করে, মানবিক ত্রুটি হ্রাস করে এবং ক্লাস্টার জটিলতা নির্বিশেষে একটি ধারাবাহিক কর্মপ্রবাহ প্রদান করে।
ArgoCD আর্কিটেকচার এবং সেটআপ
ArgoCD হল Kubernetes-এর জন্য সর্বাধিক গৃহীত GitOps টুল। এটি ক্লাস্টার জুড়ে অ্যাপ্লিকেশন স্থাপনা পরিচালনার জন্য একটি শক্তিশালী ওয়েব UI, CLI, এবং API প্রদান করে।
মূল উপাদান
আর্গোসিডিতে কয়েকটি মূল উপাদান রয়েছে যা একসাথে কাজ করে:
- API সার্ভার - একটি gRPC/REST API প্রকাশ করে এবং ওয়েব UI পরিবেশন করে। প্রমাণীকরণ, RBAC, এবং বহিরাগত ইন্টিগ্রেশন পরিচালনা করে।
- সংগ্রহস্থল সার্ভার - গিট রিপোজিটরি ক্লোন করে এবং হেলম চার্ট, কাস্টমাইজ বা প্লেইন YAML থেকে Kubernetes ম্যানিফেস্ট তৈরি করে।
- অ্যাপ্লিকেশন কন্ট্রোলার - ক্রমাগত চলমান অ্যাপ্লিকেশনগুলি নিরীক্ষণ করে এবং গিট-এ পছন্দসই অবস্থার সাথে লাইভ অবস্থার তুলনা করে।
- রেডিস - রিপোজিটরি সার্ভার এবং অ্যাপ্লিকেশন কন্ট্রোলারের জন্য ক্যাশিং প্রদান করে।
ইনস্টলেশন
অফিসিয়াল ম্যানিফেস্ট বা হেলম চার্ট ব্যবহার করে আপনার ক্লাস্টারে 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 সহ একটি কেন্দ্রীভূত সার্ভারের পরিবর্তে, ফ্লাক্স 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 সহ মাল্টি-টেনেন্সি এবং একটি কেন্দ্রীভূত ব্যবস্থাপনা প্লেন। ফ্লাক্স এমন পরিবেশে জ্বলজ্বল করে যা হালকা ওজনের, কন্ট্রোলার-ভিত্তিক আর্কিটেকচার পছন্দ করে, ইমেজ অটোমেশন ক্ষমতার প্রয়োজন বা 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 তার রিপোজিটরি সার্ভারের মাধ্যমে চার্ট সার্ভার-সাইড রেন্ডার করে, যখন ফ্লাক্স সরাসরি তার হেলম কন্ট্রোলারের মধ্যে হেলম 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 ট্রাফিক ব্যবস্থাপনার সাথে প্রয়োগ করুন।
ক্যানারি স্থাপনা
ধীরে ধীরে নতুন সংস্করণে ট্র্যাফিকের একটি ছোট শতাংশ রুট করুন, আত্মবিশ্বাস বাড়ার সাথে সাথে শতাংশ বাড়ান৷ ফ্ল্যাগার এবং আর্গো রোলআউটের মতো সরঞ্জামগুলি মেট্রিক্স-ভিত্তিক প্রচারের সাথে ক্যানারি বিশ্লেষণকে স্বয়ংক্রিয় করে।
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 রোলব্যাকগুলিকে সহজতর করে তোলে: কেবল গিট কমিট প্রত্যাবর্তন করুন। যাইহোক, স্বাস্থ্য পরীক্ষার উপর ভিত্তি করে স্বয়ংক্রিয় রোলব্যাকগুলি একটি অতিরিক্ত নিরাপত্তা জাল প্রদান করে।
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 সম্পদ নিরাপদে গিট প্রতিশ্রুতিবদ্ধ করা যেতে পারে. টার্গেট ক্লাস্টারে শুধুমাত্র সিলড সিক্রেটস কন্ট্রোলার এটি ডিক্রিপ্ট করার জন্য প্রয়োজনীয় ব্যক্তিগত কী ধারণ করে। বিকল্প পদ্ধতির মধ্যে রয়েছে এক্সটার্নাল সিক্রেটস অপারেটর (AWS সিক্রেটস ম্যানেজার, HashiCorp ভল্ট, ইত্যাদি থেকে তোলার জন্য) এবং ফাইল-লেভেল এনক্রিপশনের জন্য SOPS।
নিরীক্ষণ স্থাপনা
GitOps পাইপলাইন উৎপাদনের জন্য স্থাপনার স্থিতিতে দৃশ্যমানতা অপরিহার্য। একাধিক স্তরে পর্যবেক্ষণ বাস্তবায়ন করুন:
- ArgoCD মেট্রিক্স - আর্গোসিডি সিঙ্ক স্থিতি, স্বাস্থ্য এবং অপারেশনের সময়কালের জন্য প্রমিথিউস মেট্রিক্স প্রকাশ করে। স্থাপনার ফ্রিকোয়েন্সি এবং ব্যর্থতার হার ট্র্যাক করতে Grafana ড্যাশবোর্ড তৈরি করুন।
- Kubernetes ইভেন্ট - সমস্যাগুলি প্রাথমিকভাবে সনাক্ত করতে পড শিডিউলিং, ইমেজ টান, এবং প্রস্তুতি তদন্ত ইভেন্টগুলি পর্যবেক্ষণ করুন।
- আবেদন স্বাস্থ্য পরীক্ষা - আপনার নির্দিষ্ট সংস্থানগুলির জন্য "স্বাস্থ্যকর" মানে কী তা নির্ধারণ করতে Lua স্ক্রিপ্ট ব্যবহার করে 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-তে 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 ক্রমাগত বিতরণের জন্য একটি শক্তিশালী ভিত্তি প্রদান করে। গিটকে সত্যের উত্স হিসাবে বিবেচনা করে, স্বয়ংক্রিয় পুনর্মিলন এবং প্রগতিশীল ডেলিভারি কৌশলগুলি ব্যবহার করে, দলগুলি আত্মবিশ্বাসের সাথে মোতায়েন করতে পারে এবং ব্যর্থতা থেকে দ্রুত পুনরুদ্ধার করতে পারে। একটি সাধারণ একক-ক্লাস্টার সেটআপ দিয়ে শুরু করুন, আপনার গিট সংগ্রহস্থলের কাঠামো স্থাপন করুন এবং ধীরে ধীরে আপনার প্ল্যাটফর্ম পরিপক্ক হওয়ার সাথে সাথে ক্যানারি স্থাপনা, মাল্টি-ক্লাস্টার ব্যবস্থাপনা এবং স্বয়ংক্রিয় রোলব্যাক নীতিগুলির মতো উন্নত নিদর্শনগুলি গ্রহণ করুন।
GitOps পরিকাঠামোতে বিনিয়োগ উন্নত নির্ভরযোগ্যতা, দ্রুত ঘটনার প্রতিক্রিয়া, সম্পূর্ণ অডিট ট্রেল এবং একটি বিকাশকারীর অভিজ্ঞতার মাধ্যমে লভ্যাংশ প্রদান করে যা একটি পুল অনুরোধকে মার্জ করার মতোই সহজ করে তোলে।