paint-brush
CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত স্থাপনার কর্মপ্রবাহ [পর্ব 2]দ্বারা@j04n
537 পড়া
537 পড়া

CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত স্থাপনার কর্মপ্রবাহ [পর্ব 2]

দ্বারা Joan Flotats14m2023/10/10
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

ম্যানুয়াল স্থাপনা ত্রুটি-প্রবণ নয়। অধিকন্তু, তারা পুনরাবৃত্তিমূলক এবং জটিল কাজগুলির একটি গুচ্ছ নিয়ে গঠিত। এই নিবন্ধটি FluxCD, Flagger, এবং Grafana ব্যবহার করে ক্রমাগত স্থাপনার প্রক্রিয়াগুলিতে রূপান্তর করতে আপনার স্থাপনার প্রক্রিয়াগুলির স্বয়ংক্রিয়তা অনুসন্ধান করে৷
featured image - CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত স্থাপনার কর্মপ্রবাহ [পর্ব 2]
Joan Flotats HackerNoon profile picture
0-item
1-item


ম্যানুয়াল স্থাপনা ত্রুটি-প্রবণ নয়। অধিকন্তু, তারা পুনরাবৃত্তিমূলক এবং জটিল কাজগুলির একটি গুচ্ছ নিয়ে গঠিত। উন্নয়ন দলগুলি একটি অ্যাপ্লিকেশনের একটি নতুন সংস্করণ স্থাপনের জটিলতা এবং এটি নিয়ে আসা মাথাব্যথা নিয়ে ভয় পায়। কখনও কখনও, একটি অ্যাপ্লিকেশন স্থাপনের জন্য উন্নত প্ল্যাটফর্ম দক্ষতা প্রয়োজন। স্থাপনার সমস্যাগুলি ডিবাগ করার জন্য এটি একটি ক্লান্তিকর প্রক্রিয়া।


FluxCD আপনাকে ম্যানুয়াল এবং পুনরাবৃত্তিমূলক কাজের জন্য নিবেদিত প্রচেষ্টা কমাতে সাহায্য করে। এটি স্থাপনার ত্রুটি এবং মানুষের মিথস্ক্রিয়াও কমিয়ে দেয়। এটি ঘোষণামূলক ফাইলগুলি ব্যবহার করে আপনার স্থাপনার অবস্থা ট্র্যাক এবং আপডেট করার জন্য সরঞ্জামগুলি অফার করে, যা আপনার ডেভেলপমেন্ট টিমের জন্য স্থাপনা এবং ডিবাগিং প্রক্রিয়াকে সহজ করে তোলে।


এই নিবন্ধটি FluxCD , Flagger , এবং Grafana ব্যবহার করে ক্রমাগত স্থাপনার প্রক্রিয়ায় রূপান্তর করার জন্য আপনার স্থাপনার প্রক্রিয়াগুলির স্বয়ংক্রিয়তা অন্বেষণ করে৷


একটি অ্যাপ্লিকেশন ক্রমাগত বিতরণ সম্পর্কে আরও জানতে প্রথম নিবন্ধটি দেখুন:

CI/CD হ্যান্ডস-অন: একটি সহজ কিন্তু কার্যকরী ক্রমাগত ইন্টিগ্রেশন ওয়ার্কফ্লো [পর্ব 1]



ভূমিকা

Kubernetes ক্লাস্টার সেট আপ করতে KinD এবং Terraform ব্যবহার করুন। প্রথমত, ক্লাস্টার তৈরি করুন এবং Kubernetes প্রদানকারী সেট করতে Kubernetes কনফিগারেশন রপ্তানি করুন:


 $ kind create cluster --name develop $ kind export kubeconfig --name develop --kubeconfig kubeconfig


রিপোজিটরি অনুমতি সহ একটি নতুন GitHub সংগ্রহস্থল এবং একটি বিকাশকারী টোকেন তৈরি করুন, টেরাফম ফ্লাক্সসিডি সেটআপ করতে এটির প্রয়োজন৷ Terraform শুরু করুন এবং পরিবর্তনগুলি প্রয়োগ করুন:


 $ terraform init $ terraform apply -var="github_owner=owner_name" -var="github_repository=repo_name" # Introduce your GitHub token


একবার টেরাফর্ম ইনস্টলেশন প্রক্রিয়া শেষ করলে, আপনার KinD ক্লাস্টারে FluxCD চালু থাকা উচিত এবং আপনার সংগ্রহস্থলে ক্লাস্টার নামে একটি নতুন ফোল্ডার থাকা উচিত।


টেরাফর্ম

হুডের নিচে, Terraform MetalLB ইনস্টল করে এবং IP পরিসর কনফিগার করে। আপনি নিবন্ধের প্রথম অংশে MetalLB কনফিগারেশন সম্পর্কে আরও পড়তে পারেন:


 resource "helm_release" "metallb" { name = "metallb" repository = "https://metallb.github.io/metallb" chart = "metallb" } data "docker_network" "kind" { name = "kind" } resource "kubectl_manifest" "kind-address-pool" { yaml_body = yamlencode({ "apiVersion" : "metallb.io/v1beta1", "kind" : "IPAddressPool", "metadata" : { "name" : "kind-address-pool" }, "spec" : { "addresses" : [replace(tolist(data.docker_network.kind.ipam_config)[0].subnet, ".0.0/16", ".255.0/24")] } }) depends_on = [helm_release.metallb] } resource "kubectl_manifest" "kind-advertisement" { yaml_body = <<YAML apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: kind-advertisement YAML depends_on = [helm_release.metallb] }


তারপরে, এটি FLuxCD হেলম চার্ট ইনস্টল করে এবং FluxCD ব্যবহার করার জন্য GitHub সংগ্রহস্থল কনফিগার করে:


 resource "helm_release" "flux" { repository = "https://fluxcd-community.github.io/helm-charts" chart = "flux2" name = "flux2" namespace = "flux-system" create_namespace = true version = "2.9.2" } resource "tls_private_key" "flux" { depends_on = [helm_release.flux] algorithm = "ECDSA" ecdsa_curve = "P256" } resource "github_repository_deploy_key" "flux" { depends_on = [tls_private_key.flux] title = "Flux" repository = var.github_repository key = tls_private_key.flux.public_key_openssh read_only = "false" } resource "flux_bootstrap_git" "this" { depends_on = [github_repository_deploy_key.flux] path = "clusters/develop" }


প্রি-কমিট হুক সাজেশন:

  1. টেরাফর্ম ( https://github.com/antonbabenko/pre-commit-terraform ):
    • TFSec: সম্ভাব্য ভুল কনফিগারেশন সনাক্ত করতে Terraform-এর জন্য স্ট্যাটিক বিশ্লেষণ
    • TFLint: Terraform এর জন্য স্ট্যাটিক ফরম্যাট পরীক্ষক
  2. গোপনীয়তা সনাক্ত করুন ( https://github.com/Yelp/detect-secrets ): কোড বেসে প্রবেশ করা থেকে নতুন গোপনীয়তা প্রতিরোধ করা।


ফ্লাক্সসিডি

FluxCD হল একটি GitOps টুল যা একটি Kubernetes ক্লাস্টারকে সর্বশেষ সোর্স কন্ট্রোল পরিবর্তন (যেমন গিট রিপোজিটরি) সহ রাখার জন্য। ফ্লাক্স নতুন কোড স্থাপনকে স্বয়ংক্রিয় করে।


একবার ফ্লাক্স ক্লাস্টারে চলছে, দেখা যাক কিভাবে কাজ করে। আমরা ingress-nginx কে একটি ingress প্রদানকারী হিসাবে স্থাপন করব। ফ্লাক্স প্রোজেক্ট ফোল্ডার স্ট্রাকচার বলবৎ করে না। আপনি এটিকে আপনার ইচ্ছামত কনফিগার করতে পারেন বা আপনার পছন্দের মান অনুসরণ করতে পারেন।


ইনফ্রাস্ট্রাকচার নামে একটি ফোল্ডারের ভিতরে বেস নামে একটি ফোল্ডার তৈরি করুন। বেস ফোল্ডারে আপনার সমস্ত ক্লাস্টারের জন্য মৌলিক অবকাঠামো কনফিগারেশন রয়েছে। এর পরে, ingress-nginx নামে একটি ফোল্ডার তৈরি করুন। ফোল্ডারের নাম হিসাবে নেমস্পেস নামটি ব্যবহার করুন।


 --- apiVersion: v1 kind: Namespace metadata: name: ingress-ngnix --- apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository metadata: name: ingress-nginx spec: interval: 2h url: https://kubernetes.github.io/ingress-nginx --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: ingress-nginx spec: interval: 15m chart: spec: chart: ingress-nginx version: 4.7.1 sourceRef: kind: HelmRepository name: ingress-nginx interval: 15m --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: ingress-ngnix resources: - namespace.yaml - helmrepository.yaml - helmrelease.yaml


আপনার অবজেক্টগুলিকে সংজ্ঞায়িত করতে একাধিক ফাইল ব্যবহার করুন: helmrelease.yaml , helmrepository.yaml , namespace.yaml , kustomization.yaml , ইত্যাদি।


কাস্টমাইজেশন রিসোর্সগুলিকে প্রয়োগ করার জন্য পড়ে এবং প্রক্রিয়া করে। শেষ কিন্তু অন্তত নয়, আপনার ক্লাস্টার কনফিগারেশন সিঙ্ক্রোনাইজ করার জন্য আপনাকে একটি কাস্টমাইজেশন অবজেক্ট তৈরি করতে হবে। cluster/cluster_name ফোল্ডারের ভিতরে infrastructure.yaml নামে একটি YAML ফাইল তৈরি করুন:


 --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infra-base namespace: flux-system spec: interval: 1h retryInterval: 1m timeout: 5m sourceRef: kind: GitRepository name: flux-system path: ./infrastructure/base prune: true wait: true


আপনার রিপোজিটরিতে আপনার পরিবর্তনগুলি কমিট এবং পুশ করার পরে, ফ্লাক্স ইনগ্রেস-এনজিনক্স হেলম চার্ট ইনস্টল করার জন্য ক্লাস্টারের অবস্থার সাথে সমন্বয় করবে।


ফ্ল্যাগার

ফ্ল্যাগার হল একটি Kubernetes অপারেটর যেটি নীল/সবুজ স্থাপনা, ক্যানারি রিলিজ, বা A/B টেস্টিং ব্যবহার করে ধীরে ধীরে আপনার অ্যাপ্লিকেশন সরবরাহ করে।


আপনি আপনার সমস্ত ক্লাস্টারে আপনার স্ট্যাক ইনস্টল করতে বেস ফোল্ডারটি ব্যবহার করতে পারেন বা ক্লাস্টারের উপর নির্ভর করে আপনার ইনস্টলেশনটি কাস্টমাইজ করতে অন্য একটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আমরা শুধুমাত্র বিকাশ ক্লাস্টারে ফ্ল্যাগার ইনস্টল করতে চাই।


অবকাঠামো ফোল্ডারের ভিতরে আপনার ক্লাস্টারের নাম ব্যবহার করে একটি নতুন ফোল্ডার তৈরি করুন। তারপর, আপনার ক্লাস্টার/cluster_name- এ i nfrastructure.yaml নামে একটি ফাইল তৈরি করুন:


 --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infra-cluster-name namespace: flux-system spec: dependsOn: - name: infra-base interval: 1h retryInterval: 1m timeout: 5m sourceRef: kind: GitRepository name: flux-system path: ./infrastructure/cluster_name prune: true


ইনফ্রা-বেস কাস্টমাইজেশন প্রয়োগ করার পরে ফ্লাক্সসিডি ক্লাস্টারের অবস্থা সিঙ্ক্রোনাইজ করবে। ফ্ল্যাগার ইনস্টল করুন, অবকাঠামো/cluster_name/flagger-system ফোল্ডারের ভিতরে নিম্নলিখিত YAML ফাইল তৈরি করুন:


 --- apiVersion: v1 kind: Namespace metadata: name: flagger-system --- apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: flagger spec: interval: 1h url: https://flagger.app --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: flagger spec: interval: 1h install: crds: CreateReplace upgrade: crds: CreateReplace chart: spec: chart: flagger version: 1.xx interval: 6h sourceRef: kind: HelmRepository name: flagger --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: flagger-loadtester spec: interval: 1h chart: spec: chart: loadtester version: 0.xx interval: 6h sourceRef: kind: HelmRepository name: flagger --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: flagger-system resources: - namespace.yaml - helmrepository.yaml - helmrelease.yaml


ক্রমাগত স্থাপনা

Podinfo অ্যাপ্লিকেশন ক্রমাগত স্থাপনার পাইপলাইন তৈরি করতে, apps/cluster_name/podinfo *:*-এ ইনস্টলেশন YAML ফাইল তৈরি করুন


 --- apiVersion: v1 kind: Namespace metadata: name: podinfo --- apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: podinfo spec: interval: 5m url: https://stefanprodan.github.io/podinfo --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: podinfo spec: releaseName: podinfo chart: spec: chart: podinfo version: 6.5.0 sourceRef: kind: HelmRepository name: podinfo interval: 50m install: remediation: retries: 3 values: ingress: enabled: true className: nginx hpa: enabled: true --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: podinfo resources: - namespace.yaml - helmrepository.yaml - helmrelease.yaml


আপনি আপনার স্থানীয় পরিবেশের হোস্ট আপডেট করতে আপডেট হোস্ট পাইথন স্ক্রিপ্ট ব্যবহার করতে পারেন, যেমনটি নিবন্ধের প্রথম অংশে ব্যাখ্যা করা হয়েছে।


তারপরে, আপনার অ্যাপগুলিকে সিঙ্ক্রোনাইজ করতে ক্লাস্টার/ক্লাস্টার_নাম ফোল্ডারে কাস্টমাইজেশন ফাইল তৈরি করুন:


 --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: apps namespace: flux-system spec: interval: 10m0s dependsOn: - name: infra-cluster-name sourceRef: kind: GitRepository name: flux-system path: ./apps/cluster_name prune: true wait: true timeout: 5m0s


এর পরে, আমরা পডিনফো ইমেজ হেলম চার্ট সংস্করণটি স্বয়ংক্রিয়ভাবে আপডেট করতে ফ্লাক্সসিডি কনফিগার করতে পারি। ইমেজ অটো-আপডেট কনফিগার করার জন্য, নতুন ইমেজ ট্যাগগুলির জন্য স্ক্যান করার জন্য আমাদের একটি ইমেজ রিপোজিটরি তৈরি করতে হবে, আপডেট করার জন্য সংস্করণ প্যাটার্ন নির্ধারণ করার জন্য একটি ইমেজ আপডেট নীতি এবং পরিবর্তনটি পুশ করার জন্য রিপোজিটরি কনফিগার করার জন্য একটি ইমেজ অটো-আপডেট করতে হবে।


 --- apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: name: podinfo-chart spec: image: ghcr.io/stefanprodan/charts/podinfo interval: 5m --- apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImagePolicy metadata: name: podinfo-chart spec: imageRepositoryRef: name: podinfo-chart policy: semver: range: 6.xx --- apiVersion: image.toolkit.fluxcd.io/v1beta1 kind: ImageUpdateAutomation metadata: name: podinfo-chart spec: interval: 30m sourceRef: kind: GitRepository name: flux-system namespace: flux-system git: checkout: ref: branch: main commit: author: email: [email protected] name: fluxcdbot messageTemplate: 'chore(develop): update podinfo chart to {{range .Updated.Images}}{{println .}}{{end}}' push: branch: main update: path: ./apps/cluster_name/podinfo strategy: Setters --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: podinfo resources: [...] - imagepolicy.yaml - imagerepository.yaml - imageautoupdate.yaml


অবশেষে, আপনি যে ছবিটি বা ট্যাগ আপডেট করতে চান তাতে ইমেজ আপডেট নীতি প্রয়োগ করুন:


 apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: podinfo spec: releaseName: podinfo chart: spec: chart: podinfo version: 6.5.0 # {"$imagepolicy": "podinfo:podinfo-chart:tag"} sourceRef: kind: HelmRepository name: podinfo interval: 50m install: remediation: retries: 3


যখনই Podinfo চার্টের 6.xx পরিসরে একটি নতুন সংস্করণ থাকে, তখনই FluxCD রিপোজিটরিতে একটি প্রতিশ্রুতি ঠেলে দেবে, বর্তমান সংস্করণটিকে নতুনটির সাথে আপডেট করবে।


ফ্লাক্সসিডি। https://fluxcd.io/flux/components/image


ক্যানারি রিলিজ

অ্যাপ্লিকেশন কার্যকারিতা, কর্মক্ষমতা, এবং নিরাপত্তা প্রত্যাশিত হয় তা নিশ্চিত করতে ব্যবহারকারীদের একটি ছোট উপসেটের জন্য একটি নতুন অ্যাপ্লিকেশন সংস্করণ প্রকাশ করুন৷ FluxCD স্বয়ংক্রিয়ভাবে চার্ট সংস্করণ আপডেট করে এবং ব্যবহারকারীদের জন্য উপলব্ধ করে। একটি ব্যর্থতার ক্ষেত্রে, FluxCD স্বয়ংক্রিয়ভাবে পূর্ববর্তী সংস্করণে চিত্র সংস্করণ রোলব্যাক করে।

ফ্ল্যাগার ক্রমান্বয়ে ব্যবহারকারীদের একটি উপসেটের কাছে নতুন অ্যাপ্লিকেশন সংস্করণ সরবরাহ করে এবং অ্যাপ্লিকেশনের অবস্থা পর্যবেক্ষণ করে। এটি নতুন অ্যাপ্লিকেশন সংস্করণগুলির জন্য একটি নতুন স্থাপনা তৈরি করে এবং ধীরে ধীরে আগত ট্র্যাফিককে নতুন স্থাপনায় পুনঃনির্দেশিত করে। এটি মেট্রিক্সের সফল বিশ্লেষণের পরে ক্যানারি স্থাপনার প্রচার করবে। ব্যর্থতার ক্ষেত্রে, ফ্ল্যাগার নতুন স্থাপনা মুছে ফেলে এবং পুরানো স্থাপনায় ট্রাফিক প্রবাহ পুনঃস্থাপন করে। এই প্রক্রিয়াটি তার সমস্ত ব্যবহারকারীদের কাছে অ্যাপ্লিকেশন সরবরাহ করার আগে ত্রুটি, সমস্যা এবং ত্রুটি সনাক্ত করার ভান করে।



ফ্ল্যাগার https://docs.flagger.app/tutorials/nginx-progressive-delivery


প্রথমে একটি মেট্রিক টেমপ্লেট তৈরি করুন যাতে ফ্ল্যাগার অ্যাপ্লিকেশানের স্ট্যাটাসটি জানতে পারে৷ অনুরোধের সাফল্যের হার পরিমাপ করতে আমরা প্রমিথিউস ব্যবহার করি:


 --- apiVersion: flagger.app/v1beta1 kind: MetricTemplate metadata: name: podinfo-request-success-rate spec: provider: type: prometheus address: http://loki-stack-prometheus-server.loki-stack:80 query: | 100 - sum( rate( http_requests_total{ app_kubernetes_io_name="podinfo", namespace="{{ namespace }}", status!~"5.*" }[{{ interval }}] ) ) / sum( rate( http_requests_total{ app_kubernetes_io_name="podinfo", namespace="{{ namespace }}", }[{{ interval }}] ) ) * 100 --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: podinfo resources: [...] - metrictemplate.yaml


তারপর, ক্যানারি রিলিজ প্রক্রিয়া সংজ্ঞায়িত করুন। আমরা ইনকামিং ট্র্যাফিক গঠনের জন্য প্রদানকারী হিসাবে nginx ব্যবহার করি। ফ্ল্যাগার আপনার রিলিজ কনফিগার করার জন্য একাধিক উপায় এবং টুল অফার করে।


 --- apiVersion: flagger.app/v1beta1 kind: Canary metadata: name: podinfo spec: provider: nginx targetRef: apiVersion: apps/v1 kind: Deployment name: podinfo ingressRef: apiVersion: networking.k8s.io/v1 kind: Ingress name: podinfo autoscalerRef: apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler name: podinfo progressDeadlineSeconds: 60 service: port: 9898 targetPort: 9898 analysis: interval: 10s threshold: 10 maxWeight: 50 stepWeight: 5 metrics: - name: podinfo-request-success-rate thresholdRange: min: 99 interval: 1m webhooks: - name: acceptance-test type: pre-rollout url: http://flagger-loadtester.flagger-system/ timeout: 30s metadata: type: bash cmd: curl -sd 'test' http://podinfo-canary.podinfo:9898/token | grep token - name: load-test url: http://flagger-loadtester.flagger-system/ timeout: 5s metadata: cmd: hey -z 1m -q 10 -c 2 http://podinfo-canary.podinfo:9898/healthz --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: podinfo resources: [...] - canary.yaml


ফ্ল্যাগারের জন্য আপনার ডিপ্লয়মেন্ট, ইনগ্রেস এবং পড অটো-এসকেলারের রেফারেন্স প্রয়োজন। যখনই ফ্ল্যাগার একটি নতুন সংস্করণ শনাক্ত করে, তখন এটি স্থাপনা বৃদ্ধি করবে, একটি প্রাথমিক এবং মাধ্যমিক পরিষেবা তৈরি করবে এবং সংশ্লিষ্ট পরিষেবাতে আগত ট্র্যাফিক পাঠাতে nginx কনফিগার করবে। সর্বাধিক ট্রাফিক পুনঃনির্দেশ শতাংশ এবং ক্রমবর্ধমান ধাপ শতাংশ কনফিগার করতে maxWeight এবং stepWeight বৈশিষ্ট্যগুলি ব্যবহার করুন৷

ফ্ল্যাগার হুক ব্যবহার করে আপনার অ্যাপ্লিকেশন লোড-পরীক্ষা করুন। এতে একাধিক হুক রয়েছে। গ্রহণযোগ্যতা হুকগুলি ক্যানারি স্থাপনার প্রস্তুতি পরীক্ষা করে এবং লোড পরীক্ষার হুক ধ্রুবক আগত ট্র্যাফিক তৈরি করে।

ফ্ল্যাগার ক্যানারি স্থাপনার প্রচারের ক্ষেত্রে সিদ্ধান্ত নিতে পূর্ব-নির্ধারিত সাফল্যের হার মেট্রিক ব্যবহার করে ক্যানারি প্রকাশের স্থিতি পর্যবেক্ষণ করবে। ফ্ল্যাগার ক্যানারি স্থাপনার প্রচারের জন্য একটি 99% অনুরোধ সাফল্যের হার আশা করে। রোলব্যাকের আগে সর্বাধিক সংখ্যক ব্যর্থ মেট্রিক চেক কনফিগার করতে থ্রেশহোল্ড প্রপার্টি ব্যবহার করুন।


মনিটরিং

Grafana + Loki + Prometheus ব্যবহার করে ক্লাস্টার সংস্থানগুলির অবস্থা নিরীক্ষণ করতে Loki স্ট্যাক ব্যবহার করুন। অবকাঠামো/cluster_name/loki-stack ফোল্ডারের ভিতরে নিম্নলিখিত YAML ফাইল তৈরি করে Loki স্ট্যাক ইনস্টল করুন:


 --- apiVersion: v1 kind: Namespace metadata: name: loki-stack --- apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository metadata: name: grafana spec: interval: 2h url: https://grafana.github.io/helm-charts --- apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: loki-stack spec: interval: 1h chart: spec: chart: loki-stack version: v2.9.11 sourceRef: kind: HelmRepository name: grafana interval: 1h values: grafana: enabled: true ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx hosts: - grafana.local prometheus: enabled: true nodeExporter: enabled: true --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: loki-stack resources: - namespace.yaml - helmrepository.yaml - helmrelease.yaml


Loki স্ট্যাক ইনস্টলেশন Grafana ইনগ্রেসকে Grafana অ্যাক্সেস করতে, প্রমিথিউসকে আপনার পরিবেশের মেট্রিক্স সংগ্রহ করতে এবং নোড এক্সপোর্টারকে আপনার নোড মেট্রিক্স এক্সপোর্ট করতে সক্ষম করে।


আপনি আপনার স্থানীয় পরিবেশের হোস্ট আপডেট করতে আপডেট হোস্ট পাইথন স্ক্রিপ্ট ব্যবহার করতে পারেন, যেমন নিবন্ধের প্রথম অংশে ব্যাখ্যা করা হয়েছে


অ্যাডমিন ব্যবহারকারীর নাম এবং পাসওয়ার্ড ব্যবহার করে Grafana লগ ইন করুন। আপনি ইনস্টলেশন মান ব্যবহার করে অ্যাডমিন পাসওয়ার্ড নির্ধারণ করতে পারেন। ডিফল্টরূপে, চার্ট একটি এলোমেলো পাসওয়ার্ড সংরক্ষণ করার জন্য একটি Kubernetes গোপন তৈরি করে। বেস64 পাসওয়ার্ড মান পেতে গোপন বর্ণনা করুন এবং এটি ডিকোড করুন।


আপনি তাদের আইডি ব্যবহার করে বা কাঁচা JSON অনুলিপি করে আপনার প্রিয় ড্যাশবোর্ড আমদানি করতে পারেন:


Grafana - Prometheus K8s ড্যাশবোর্ড


Grafana - Prometheus FluxCD ড্যাশবোর্ড


গ্রাফনা - লোকি লগ


উপসংহার

প্রথম নিবন্ধটি কীভাবে একটি ভাল-পরীক্ষিত অ্যাপ্লিকেশন সরবরাহ করতে হয় তা অন্বেষণ করেছে। এই নিবন্ধটি কীভাবে ক্রমাগত বিতরণযোগ্য স্থাপন করা যায় এবং স্থাপনার স্থিতি পর্যবেক্ষণ করে তা অনুসন্ধান করে।


FluxCD এবং Flagger আপনার আবেদনের স্থিতি ক্রমাগত পরীক্ষা, স্থাপন এবং নিরীক্ষণ করার জন্য একাধিক বৈশিষ্ট্য অফার করে। এই নিবন্ধটি তাদের কিছু ব্যবহার করে, কিন্তু আমরা ওয়েবহুক এবং বিজ্ঞপ্তি বৈশিষ্ট্যগুলি দেখতে পাইনি৷ একটি নতুন পরিবেশে স্থাপনার প্রচার করতে বা নতুন সংস্করণগুলির বিরুদ্ধে আপনার পরীক্ষাগুলি চালু করতে কখন একটি স্থাপনা ব্যর্থ হয়েছে তা জানতে বিজ্ঞপ্তি বৈশিষ্ট্যগুলি ব্যবহার করুন বা ওয়েব-হুক বৈশিষ্ট্যগুলি ব্যবহার করুন৷ আপনার স্থাপনার পাইপলাইনকে সমৃদ্ধ করতে অন্যান্য সরঞ্জামগুলির সাথে FluxCD সংহত করুন।

ম্যানুয়াল স্থাপনা এড়িয়ে চলুন. তারা জটিল এবং ত্রুটি-প্রবণ নয়। ডেভেলপমেন্ট দলগুলিকে তাদের অ্যাপ্লিকেশনগুলি বজায় রাখতে উত্সাহিত করুন, মোতায়েন প্রক্রিয়াটিকে সহজ করে৷ স্বয়ংক্রিয় স্থাপনা লিড টাইম, ফিডব্যাক লুপ এবং সামগ্রিক খরচ কমিয়ে দেয়। বিকাশকারীরা আসলে কী গুরুত্বপূর্ণ তা ফোকাস করতে পারে।