প্রযুক্তিগত গভীর বিশ্লেষণ: Kubernetes-এ GitLab Runners, অপারেটর ইনস্টল, Helm মানসমূহ, অটোস্কেলিং এবং FinOps খরচ মডেল। সংক্ষিপ্ত সংস্করণের জন্য পড়ুননিষ্ক্রিয় CI-এর জন্য টাকা খরচ বন্ধ করুন।
বেশিরভাগ দল যেন প্রতিটি রাত এবং প্রতিটি সপ্তাহের ছুটির দিনও মঙ্গলবার সকাল মতোই হয়, সেইভাবেই কন্টিনিউয়াস ইন্টিগ্রেশনের জন্য দাম দিচ্ছে। সার্ভারগুলো গরম অবস্থায় বসে আছে। ডিস্ক বরাদ্দ করা আছে। কেউ কোড মার্জ করছে না — এবং বিলটি তা লক্ষ্য করছে না। এই বাক্যটি কোনো স্লোগান নয়; এটি একটি স্থির রানার ফ্লিটের স্বাভাবিক রূপ।
এই দীর্ঘ লেখাটি একটি হাতে-কলমে গাইডের প্রযুক্তিগত সহচর, যার বিষয়বস্তু হলোGitLab Server এবং GitLab Runner on Kubernetes: Kubernetes এক্সিকিউটরটি প্রতিটি CI জবকে একটি সাময়িক পডে রূপান্তর করে, এটি কীভাবে ক্যাপাসিটির গতিশীল প্রদান ও প্রদানহীনতা সম্ভব করে, এবং এটি কীভাবেবিশাল খরচের অধিকারউদ্ধার করে CPU, RAM এবং স্টোরেজ যখন রাত এবং সপ্তাহের ছুটির দিনে চাহিদা পতনপ্রাপ্ত হয়।
উভয় সেশনটি আগে দেখুন, তারপর এই পৃষ্ঠাটিকে লিখিত আর্কিটেকচার এবং খরচ মডেল হিসেবে ব্যবহার করুন।
১. রান্নার ও পাইপলাইন— Kubernetes ব্যবহার করে GitLab Runner ওয়ার্কলোডের অটোস্কেলিং।
দেখুন: সম্পূর্ণ GitLab Runners এবং CI/CD on Kubernetes· সাধারণ ভাষায়:নিষ্ক্রিয় CI-এর জন্য টাকা খরচ বন্ধ করুন
২. HA-এর উপর GitLab সার্ভার Kubernetes— কয়েক মিনিটে অপারেটর দিয়ে GitLab ডিপ্লয় করুন।
দেখুন: অপারেটর ব্যবহার করে HA Kubernetes ক্লাস্টারে GitLab ডিপ্লয় করুন· ডকস:GitLab অপারেটর ইনস্টলেশন
১. থিসিস
GitLab on Kubernetes + Kubernetes এক্সিকিউটরসিআই ক্ষমতার একককে "মাসের পুরো সময় আমাদের মালিকানাধীন একটি মেশিন" থেকে "কাজের জন্য ভাড়া নেওয়া পড (এবং নোড)"-এ পরিবর্তন করে। রানার ম্যানেজার ছোট এবং সবসময় চালু থাকে। জব পড একটি বিল্ডের জন্য উপস্থিত হয় এবং পরে অদৃশ্য হয়ে যায়। ক্লাস্টার অটো-স্কেলিংয়ের সাথে, ওয়ার্কার নোড একই বক্ররেখা অনুসরণ করে। এটাই হলো যেভাবে আপনি সোমবার সকালের থ্রুপুট রক্ষা করেন এবং সোমবার সকালের দামে সোমবার রাত ০৩:০০ এবং শান্ত শনিবারের জন্য পেমেন্ট করেন না।
একটি লাইনে — লেইম্যান গাইডের একই লাইনে:শীর্ষের জন্য প্রস্তুত করুন, নিম্নের জন্য প্রস্তুত করুন।
২। ব্যয়বহুল অভ্যাস, যা একটি আর্কিটেকচার স্মেল হিসেবে উল্লেখ করা হয়েছে
ঐতিহ্যবাহী CI প্রায়শই একটি স্থায়ী দল হিসেবে দেখায়: একটি নির্দিষ্ট সংখ্যক বিল্ড মেশিন যা "যেকোনো ক্ষেত্রে" রাখা থাকে। যখন ট্রাফিক স্থির থাকে তখন এটি কাজ করে। কিন্তু যখন চাহিদা তীক্ষ্ণভাবে পরিবর্তনশীল হয় তখন এটি টাকা নষ্ট করে।
- দিনের বেলা:ডেভেলপাররা শাখাগুলো ঠেলে দেন, মার্জ রিকোয়েস্ট খোলেন, টেস্ট চালান — চাহিদা শিখরে পৌঁছায়।
- সন্ধ্যা ও রাত:কার্যকলাপ কমে যায়; মেশিনগুলো তবুও CPU এবং RAM পোড়ায়।
- সপ্তাহের ছুটির দিন:প্রায় নিষ্ক্রিয় — তবুও স্টোরেজ ভলিউম এবং ক্লাউড নোডগুলো এখনও রিজার্ভ করা থাকে এবং বিল করা হয়।
আপনি "কৃত বিল্ডের" জন্য পেমেন্ট করছেন না। আপনি এমন ক্ষমতার জন্য পেমেন্ট করছেন যা কেউ ব্যবহার করুক না করুক না কেন বিদ্যমান থাকে। স্থির দলগুলোও স্টিকি স্টেট জমা করে: "রানার ৩-এ কাজ করে", সরানো প্যাকেজ, কখনো মেয়াদ শেষ হয় না এমন ক্যাশে। এলাস্টিক পডগুলো নিজেদের থেকে শৃঙ্খলা সমাধান করে না, তবে তারা ক্লিন-স্লেটকে ডিফল্ট করে তোলে।
৩. সিস্টেম মানচিত্র
| স্তর | ভূমিকা | সাধারণ অবস্থান |
|---|---|---|
| GitLab সার্ভার | SCM, CI সমন্বয়, রেজিস্ট্রি, UI/API | Kubernetes GitLab অপারেটর / Helm চার্টের মাধ্যমে (যেমন k3s ল্যাব) |
| রানার ম্যানেজার | জবের জন্য পলিং করা রজিস্টার্ড এজেন্ট | Helm রিলিজ একটি নিয়ন্ত্রিত নেমস্পেসে (যেমনgitlab-runner) |
| জব পড | আসল বিল্ড / টেস্ট / প্যাকেজিং ধাপ | প্রতিটি জবের জন্য Kubernetes এক্সিকিউটর দ্বারা তৈরি করা, তারপর মুছে ফেলা |
| অপশনাল DinD সার্ভিস | জবের ভেতরে Docker বিল্ড | জবের পাশে প্রাইভিলেজড সার্ভিস কন্টেইনার |
| ক্লাস্টার / নোড অটোস্কেলার | পড চাপের নিচে ওয়ার্কার নোড যোগ/হারা | ক্লাউড ASG, ক্লাস্টার অটোস্কেলার, Karpenter, বা সমতুল্য |
সাধারণ গাইড থেকে এই স্তরেও তুলনাটি বৈধ: GitLab Runner হল কর্মী; Kubernetes হল ডিসপ্যাটচার যা প্যার্সেল (জব) আসলেই কর্মীদের ডাকে, তারপর তাদের বাড়ি পাঠায়।
৪. ক্লাস্টারে GitLab ইনস্টল করা (অপারেটর পথ)
ডেই ১ ট্রেনিং পথটি অফিসিয়াল অপারেটর দিয়ে GitLab ইনস্টল করে, তাই সার্ভার রানারদের একই Kubernetes ফাউন্ডেশন শেয়ার করে। সহযোগী ভিডিওটিOperator ব্যবহার করে HA Kubernetes ক্লাস্টারে GitLab ডিপ্লয় করাকয়েক মিনিটে সেই ইনস্টলেশনটি সম্পন্ন করে। প্রয়োজনীয়তা: একটি ক্লাস্টার যার ingress, Helm,kubectl, এবং cert-manager থাকবে যখন চার্টটি TLS পরিচালনা করে।
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm install gitlab-operator gitlab/gitlab-operator \
--create-namespace \
--namespace gitlab-system
kubectl -n gitlab-system get deployment gitlab-controller-manager
# Apply the GitLab custom resource (pin chart version in the manifest)
kubectl -n gitlab-system apply -f deploy_gitlab_server.yaml
নমুনা CR আকৃতি (আপনার পরিবেশের জন্য ডোমেইন এবং ইস্যুয়ার ইমেইল কাস্টমাইজ করুন):
apiVersion: apps.gitlab.com/v1beta1
kind: GitLab
metadata:
name: gitlab
spec:
chart:
version: "9.2.2"
values:
global:
hosts:
domain: "example.com"
ingress:
configureCertmanager: true
certmanager-issuer:
email: you@example.com
প্রথম ইনস্টল সাধারণত ১০–১৫ মিনিটের মধ্যে সম্পন্ন হয় যখন ওয়েবসার্ভিস, Sidekiq, ডেটা স্টোরেজ এবং সংশ্লিষ্ট উপাদানগুলো স্থিতিশীল হয়। ক্লাস্টার সিক্রেট থেকে প্রাথমিক রুট পাসওয়ার্ডটি সংগ্রহ করুন:
kubectl get secret gitlab-gitlab-initial-root-password -n gitlab-system \
-o jsonpath='{.data.password}' | base64 -d
রেফারেন্স:GitLab Operator ইনস্টলেশন(সেই পৃষ্ঠার Helm ট্যাব)। চার্ট অভিযান:docs.gitlab.com/charts· ইনস্টল গাইড:charts installation.
৫. Kubernetes এক্সিকিউটর সহ GitLab রানার
একটি GitLab রানার হলো সেই অ্যাপ্লিকেশন যা GitLab CI/CD এর সাথে কাজ করে পাইপলাইনে জবগুলো চালায়।Kubernetes এক্সিকিউটরএর সাথে, ম্যানেজার নিজের মধ্যে কম্পাইল করে না। প্রতিটি জবের জন্য এটি:
- একটি পড তৈরি করে (প্লাস কনফিগার করা অনুযায়ী সহায়ক/সার্ভিস কন্টেইনার)।
- লগগুলো GitLab-এ ফিরে পাঠায়।
- আর্টিফ্যাক্ট এবং এক্সিট স্ট্যাটাস সংগ্রহ করে।
- পড মুছে ফেলে — CPU এবং RAM ক্লাস্টারে ফিরিয়ে দেয়।
সেই তৈরি/চালায়/মুছে ফেলার লুপটি হলো প্রথম খরচ লিভার। সম্পন্ন কাজ রাতে উষ্ণ মেশিনটি নিয়োগ করে রাখা উচিত নয়।
৫.১ Helm ইনস্টল প্যাটার্ন
ট্রেনিং স্ক্রিপ্ট একটি নেমস্পেস তৈরি করে, একটি রেজিস্ট্রেশন টোকেন পাঠায় এবং একাধিক রিলিজ ইনস্টল করতে পারে (উদাহরণস্বরূপ alpine-based এবং ubuntu-based রানার) যাতে জবগুলো ভিন্ন পরিবেশ নির্বাচন করতে পারে। অফিসিয়াল প্রক্রিয়া:Helm চার্ট দিয়ে GitLab Runner ইনস্টল করুন; মানের রেফারেন্স:GitLab Runner Helm চার্টকনফিগার করুন।
helm upgrade --install --namespace gitlab-runner gitlab-runner-alpine \
-f config-runner-alpine.yaml \
--set serviceAccount.create=true \
gitlab/gitlab-runner \
--create-namespace
GitLab UI (ইনস্ট্যান্স / গ্রুপ / প্রজেক্ট রানার) বা অপারেটর-প্রশাসিত সিক্রেট থেকে টোকেন সংগ্রহ করুন। আধুনিক রানার অথেন্টিকেশন টোকেন পছন্দ করুন; রেজিস্ট্রেশন টোকেন GitLab ১৮-এর দিকে পুরানো হয়ে যাচ্ছে।কখনোই লাইভ টোকেন কমিট করবেন না— ল্যাব স্ক্রিপ্টে মাঝে মাঝে স্থানীয়ভাবে প্রতিস্থাপন করতে হবে এমন প্লেসহোল্ডার থাকে।
স্কেল এবং আইসোলেশনের জন্য গুরুত্বপূর্ণ মানসমূহ
Workstation টেমপ্লেট থেকে (gitlab-runner-values-template.yaml/ generatedconfig-runner-*.yaml):
| সেটিং | কেন এটি গুরুত্বপূর্ণ |
|---|---|
concurrent | এই ম্যানেজার একসাথে কতগুলো জব চালায়। দিনের শীর্ষ সময়ে (বিস্তৃত ল্যাবে প্রশিক্ষণ নোটগুলো দশকগুলো উল্লেখ করে, যেমন ২০–৪০) বৃদ্ধি করুন। ক্লাস্টার সীমার আগে নরম থ্রটলিং। |
runners.privileged/ executorprivileged | Docker-এর Docker-এর জন্য প্রায়শই প্রয়োজন; যদি DinD প্রয়োজন না হয় তবে কঠিন করুন। |
[runners.kubernetes].namespace | জব পডগুলো কোথায় অবস্থান করে — GitLab সিস্টেম উপাদানগুলোর সাথে আলাদা রাখুন। |
ডিফল্টimage/ হেল্পার ইমেজ | পুনরুৎপাদনযোগ্যতা বজায় রাখার জন্য alpine/ubuntu পুলগুলোর জন্য ট্যাগগুলো পিন করুন। |
[[runners.kubernetes.services]]DinD | সাইডকারdocker:dindইমেজ বিল্ডের জন্য; রেজিস্ট্রি মিরর / অনিশুর রেজিস্ট্রি কেবল প্রয়োজন অনুযায়ী কনফিগার করুন। |
RBACclusterWideAccess | কেবল তখনই যদি জবগুলো ক্লাস্টার-ব্যাপী সম্পদ পরিচালনা করতে হয়; উৎপাদনে সর্বনিম্ন অধিকার পছন্দ করুন। |
| হোস্ট অ্যালিয়াস / DNS কনফিগ | ক্লাস্টারের ভেতরের GitLab এবং রেজিস্ট্রি হোস্টনেমগুলোর জন্য ল্যাব সুবিধা। |
gitlabUrl: http://gitlab-webservice-default.gitlab-system.svc.cluster.local:8080/
concurrent: 2
rbac:
create: true
clusterWideAccess: true
runners:
privileged: true
config: |
[[runners]]
environment = ["GIT_SSL_NO_VERIFY=1"]
[runners.kubernetes]
namespace = "gitlab-runner"
image = "alpine/git:latest"
service_account = "gitlab-runner"
privileged = true
CPU ছাড়াই কনকার্রেন্স কেবল ক্যুইউ দীর্ঘ করে।concurrentসাথে আসল নোড হেডরুম বা নোড অটো-স্কেলিং জোড়া লাগান।
৬. দুটি (বাস্তবে চারটি) স্তরে অটোস্কেলিং
"Kubernetes-এ GitLab রানার অটোস্কেলিং" হলো একটি সুইচ নয়। এই লিভারগুলো স্তর করে ব্যবহার করুন:
- জব পডের নমনীয়তা— এটি Kubernetes এক্সেকিউটরের মধ্যেই অন্তর্ভুক্ত। শূন্য জব হলে শূন্য জব পড। এটাই একটি শেয়ার্ড ক্লাস্টারে প্রতি জবের বেশিরভাগ অপচয় দূর করে দেয়।
- রানার এবং বহু রানার ডিপ্লয়মেন্ট
concurrent— অ্যাল্পাইন বনাম ইউবান্টু (অথবা CPU বনাম বড় বিল্ডার) আলাদা রাখতে বিশেষায়িত ক্ষমতা ভুল মিশ্রণের জন্য নিষ্ক্রিয় অবস্থায় রাখা হয় না। - ক্লাস্টার/নোড অটোস্কেলিং— অপেক্ষমান পড নোড যোগ করে; সন্ধ্যার ব্যস্ততার পরে খালি নোডগুলো বের হয়ে যায়।
- অপশনাল স্কিডিউল-সচেতন নীতি— রাত/সপ্তাহের ছুটির দিনের জন্য ক্যালেন্ডার অনুযায়ী সমান্তরাল সীমা কমিয়ে বা নোড পুল স্কেল করে বেল্ট-এবং-ব্র্যাকেস হিসেবে প্রাকৃতিক চাহিদা পতনের উপর অতিরিক্ত সুরক্ষা।
৬.২ ডাইনামিক প্রোভিশন এবং ডি-প্রোভিশন এন্ড-টু-এন্ড
ট্রেস করুন একটি পাইপলাইন জব:
- ডেভেলপার পুশ করে; GitLab পেন্ডিং কুইজে একটি জব তৈরি করে।
- রানার ম্যানেজার জবটি দাবি করে এবং API-এর কাছে একটি পড চায়।
- যদি ক্লাস্টারে CPU/RAM-এর অভাব হয়, তবে অটোস্কেলার একটি নোড যোগ করে (প্রোভিশন)।
- পড স্ক্রিপ্টটি চালায়, আর্টিফ্যাক্ট আপলোড করে, বের হয়ে যায়।
- পড মুছে ফেলা হয়; রিসোর্সগুলো পুলে ফিরে আসে (জব স্তরে ডি-প্রোভিশন)।
- যখন অনেক নোড স্কেল-ডাউন থ্রেশল্ডের পরে খালি হয়ে থাকে — সাধারণত সন্ধ্যা এবং পুরো সপ্তাহের ছুটির পরে — তখন নোডগুলো বের হয়ে যায় (ইনফ্রাস্ট্রাকচার স্তরে ডি-প্রোভিশন)।
এই পুরো লুপটিই হলো ভিডিওতে হাইপারস্কেলে GitLab Runners-এর দ্বারা খরচ অপ্টিমাইজেশনের অর্থ: কোনো একক জটিল ফ্ল্যাগ নয়, বরং জব লাইফসাইক্ল + ক্লাস্টার এলাস্টিসিটি একসাথে কাজ করছে।
৭. খরচ মডেল: যেখানে বিশাল ডলার সঞ্চয় দেখা যায়
সঠিকভাবে বলুন। অটোস্কেলিং বিল্ডগুলোকে বিনামূল্যে করে না। এটি আপনাকে অফ-পিক ঘণ্টার জন্য শীর্ষ হার পরিশোধ করতে বাধা দেয়। সঞ্চয় আসে খরচের মিলানো বাস্তব চাহিদার সাথে — সাধারণ গাইডের চারটি বিন্দু, অপারেটরদের জন্য বিস্তারিত।
৭.১ কেবল তখনই স্কেল আপ করুন যখন মানুষ (অথবা বট) কাজ করছে
যখন ব্যস্ত সকালে দশদিকের পাইপলাইন আসে, Kubernetes অনেক জব পড সমান্তরালে সাজায় কনকারেন্সি এবং ক্লাস্টার সীমার মধ্যে। থ্রুপুট তখনই দেখা যায় যখন মার্জ চাপ বাস্তব হয়।
৭.২ চাহিদা হঠাৎ কমে গেলে দ্রুত স্কেল ডাউন করুন
জবগুলো শেষ হলে পডগুলোও চলে যায়। ক্লাস্টার অটোস্কেলিং (অথবা সঠিক সাইজের নোড পুল) ব্যবহার করলে অপ্রয়োজনীয় ক্লাউড নোডগুলো পুল থেকে বের হয়ে যায়। রাত এবং সপ্তাহের ছুটির দিনগুলো—সাধারণত প্রোডাক্ট টিমের সবচেয়ে শান্ত সময়কাল—এগুলোই হলো সেই ক্ষমতা যা প্রথমেই বন্ধ করে দিতে হবে।
৭.৩ CPU, RAM এবং স্টোরেজ অপচয় বন্ধ করুন
| রিসোর্স | সর্বদা চালু রানার ভিএম | Kubernetes জব পড + নোড অটোস্কেলিং |
|---|---|---|
| CPU | কুইউ খালি থাকলে রিজার্ভেড কোরগুলো নিষ্ক্রিয় থাকে | পড বের হলে মুক্তি পায়; নোডগুলো স্কেল ইন করতে পারে |
| RAM | এজেন্ট অপারেটিং সিস্টেম + নিষ্ক্রিয় এক্সিকিউটর ২৪×৭ অবস্থান করে | পড মুছে ফেলার সাথে সাথে মেমোরি ফিরে আসে |
| স্টোরেজ | প্রতিটি ভিএম-এ উষ্ণ ডিস্ক এবং ইমেজ লেয়ার | ডিফল্টভাবে এফিমেরাল স্ক্র্যাচ; শেয়ার্ড ক্যাশ এখন একটি স্পষ্ট এবং সাইজ করা পছন্দ |
এক মাসের বেশি সময় ধরে শান্ত ঘণ্টাগুলো ঘড়ির কাঁটার অধিকাংশ দখল করে রাখে। রাত এবং সপ্তাহের ছুটির দিনগুলো ফিরে পাওয়াই হলো যেখানেডলারের বাঁচানো যৌথভাবে বৃদ্ধি পায়।
৭.৪ ফলাফলের জন্য পেমেন্ট করুন, আসবাবের জন্য নয়
আপনি এখনও GitLab এবং একটি পাতলা কন্ট্রোল প্লেনের (রানার ম্যানেজার + ক্লাস্টারের মৌলিক সুবিধা) জন্য পেমেন্ট করছেন। যা আপনি বন্ধ করে দিচ্ছেন তা হলো খালি চেয়ারের একটি ভাণ্ডারের জন্য পেমেন্ট করা।
৭.৫ কাজের বোধগম্যতা (একটি কৃত্রিম মানদণ্ড নয়)
ধরুন দিনের বেলায় টেকনিক্যালি স্থায়ীভাবে ২০টি ব্যস্ত এক্সিকিউটর স্লটের সমতুল্য প্রয়োজন, কিন্তু রাত ও সপ্তাহের ছুটির দিনে মাত্র ২টি। একটি স্থির ফ্লিট যার আকার ২০-এর জন্য, তা ২০টি স্লটের জন্যই দিনরাত খরচ করে। একটি এলাস্টিক পুল দিনের বেলায় প্রায় ২০টি এবং শান্তির সময় প্রায় ২টি (প্লাস কন্ট্রোল প্লেন) খরচ করে। অনেক প্রোডাক্ট টিমের ক্ষেত্রে শান্ত ঘণ্টা মাসের একটি বড় অংশ — তাই সেগুলো পুনরুদ্ধার করা হলো যেভাবে বাঁচাটোপিবিশালহয়ে ওঠে কোনো মার্কেটিং শতাংশ উদ্ভাবন ছাড়াই। ফিন্যান্স স্থানীয় নোড-ঘণ্টার দাম গুণ করে; আর্কিটেকচারের কাজ হলো বিলিং অ্যাকাউন্টে খালি ঘণ্টাগুলো আসলেই খালি করা।
বিশাল খরচের বাঁচাটোপি তখনই দেখা যায় যখন মঙ্গলবারের শীর্ষ চাহিদা আর বুধবার রাত তিনটায়ের বিল নির্ধারণ করে না — এবং যখন শনিবারের নীরবতা অবশেষে বিলিংয়েও নীরব মনে হয়।
৭.৬ আপনি ইচ্ছাকৃতভাবে এখনও কী খরচ করেন
- GitLab সার্ভার উপাদান — ব্যবহারকারী এবং সিআই সমন্বয়ের জন্য আকার, কম্পাইল ফার্মের জন্য নয়।
- রানার ম্যানেজার ডেপ্লয়মেন্ট(s) — জব ফার্মের তুলনায় ছোট।
- ইচ্ছাকৃত ক্যাশ (ডিপেন্ডেন্সি প্রক্সি, PVCs) — সহায়ক, কিন্তু আকার দেওয়া; ক্যাশ মুক্ত স্টোরেজ নয়।
- প্রাইভিলেজড ডিনডি — সুবিধাজনক এবং ভারী; যখন ঘনত্ব ও বিচ্ছিন্নতা পরিচিততার চেয়ে বেশি গুরুত্বপূর্ণ, তখন কানিকো/বিল্ডকিট বিবেচনা করুন।
৮. প্র্যাকটিসে পাইপলাইন
রানার অনলাইন থাকলে,.gitlab-ci.ymlস্টেজ এবং জব সংজ্ঞায়িত করে। GitLab স্কিডিউল করে; Kubernetes এক্সিকিউটর পড তৈরি করে। খরচের দিক থেকে পাইপলাইন সঠিক রাখুন:
- লিন্ট/ইউনিট টেস্টের আগে দ্রুত ব্যর্থ হন ভারী ইমেজ বিল্ডের আগে।
rules/workflowব্যবহার করুন যাতে ড্রাফ্ট শাখাগুলো পূর্ণ ম্যাট্রিক্সে ছড়িয়ে না পড়ে।- স্পষ্ট কী সহ শেয়ার্ড ক্যাশে পছন্দ করুন অসীম পার-ভিএম ডিস্ক বৃদ্ধির চেয়ে।
- জবগুলো সঠিক রানার পুলের সাথে ট্যাগ করুন (অ্যালপাইন বনাম ইউবান্টু, ছোট বনাম বড় বিল্ডার)।
stages: [lint, test, build]
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
lint:
stage: lint
image: alpine:3.19
script:
- echo "cheap checks first"
test:
stage: test
tags: [kubernetes, alpine]
script:
- echo "unit tests"
build:
stage: build
tags: [kubernetes, dind]
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- echo "heavy image build only on default branch"
অর্থনৈতিক ধারণাটি প্ল্যাটফর্ম ধারণার মতোই: সস্তা চেক ব্যর্থ হতে পারে এমন দামী কাজ স্কিডিউল করবেন না এবং শনিবার আসবে এমন জবের জন্য বিশেষায়িত রানারগুলো গরম রাখবেন না।
৯. নিরাপত্তা এবং টেন্যান্সি নোট
এফিমেরাল পড হাইজিন উন্নত করে (কম স্টিকি স্টেট) কিন্তু প্রাইভিলেজড DinD এবং ক্লাস্টার-ব্যাপী RBAC বিস্ফোরণের ব্যাস্ত্র পরিমাপ বৃদ্ধি করতে পারে। বেশিরভাগ টিমের জন্য ব্যবহারিক ডিফল্ট:
- রিসোর্স কোটাস এবং লিমিট রেঞ্জসহ একটি নির্দিষ্ট নেমস্পেসে জব পড চালান।
- সম্ভব হলে অপ্রাইভিলেজড বিল্ড পছন্দ করুন; DinD রানারগুলো নির্দিষ্ট ট্যাগের পেছনে বিচ্ছিন্ন করুন।
- প্রতিটি জবে দীর্ঘমেয়াদী ক্লাউড ক্রিডেনশিয়াল মাউন্ট করবেন না; পাইপলাইন প্রতি স্বল্পমেয়াদী টোকেন ইনজেক্ট করুন।
- রানার রেজিস্ট্রেশন টোকেনগুলো সিক্রেট হিসেবে চিন্তা করুন — মানুষ চলে গেলে বা ল্যাব শেয়ার করা হলে রোটেশন করুন।
- যদি একাধিক টিম একটি ক্লাস্টার শেয়ার করে, রানার ম্যানেজার (এবং অপশনাল নোড পুল) আলাদা রাখুন যাতে একজন শব্দপূর্ণ প্রতিবেশী পুরো ফার্ম গরম রাখতে না পারে — এবং খরচের গল্প প্রতি টিমের জন্য আত্মস্বীকারযোগ্য রাখুন।
১০. যে পর্যবেক্ষণযোগ্যতা সঞ্চয়ের প্রমাণ দেয়
রাত ও সপ্তাহান্তের সঞ্চয় দাবি করতে পারবেন না যদি না দেখেন। অন্তত নিচেরগুলো ট্র্যাক করুন:
| সিগন্যাল | "ভালো" কী দেখায় |
|---|---|
| ঘণ্টা অনুযায়ী জব পডের সংখ্যা | সপ্তাহের কাজের ঘণ্টায় শীর্ষ; রাত ও সপ্তাহান্তে প্রায় শূন্য |
| শীর্ষে সাময়িকভাবে স্পাইক হয়; স্থায়ীভাবে প্রত্যাশিত মানে অপর্যাপ্ত কনক্যুরেন্স/নোড | |
| নোড CPU / নোডের সংখ্যা | পডের চাহিদা ট্র্যাক করে; খালি নোড ঘণ্টাগুলো ধরে থাকে না |
| রানার ম্যানেজার CPU/র্যাম | জব ফার্মের তুলনায় সমতল ও ছোট |
| সপ্তাহের ঘণ্টা অনুযায়ী ক্লাউড বিল | কটোভারের পর শান্ত সময়গুলো স্পষ্টভাবে সস্তা হয় |
যদি রাতের বেলা পডের সংখ্যা কমে কিন্তু নোডের বিল না কমে, তবে স্কেল-ডাউন সেটিংস — না GitLab — পরবর্তী ক্রাঙ্ক।
১১. ফিক্সড ভিএমসমূহ বনাম Kubernetes এক্সেকিউটর (পরিসংখ্যান সারণী)
| ফিক্সড রানার ভিএমসমূহ | Kubernetes এক্সেকিউটর + অটোস্কেলিং | |
|---|---|---|
| ক্ষমতার একক | পুরো মেশিন, সর্বদা বরাদ্দ করা হয় | জবের জন্য পড (এবং অপশনালভাবে নোড) |
| সোমবার শীর্ষ চাহিদা | কুইউ বা অতিরিক্ত ভিএম কিনুন | সমান্তরাল বৃদ্ধি করুন + নোড স্কেল করুন |
| রাত/সপ্তাহের ছুটির দিন | ভিএমগুলো চালু থাকলেও বিল করা হয় | পডগুলো চলে যায়; নোডগুলোও চলে যেতে পারে |
| CPU / র্যাম / স্টোরেজ অপচয় | নিষ্ক্রিয় অবস্থায় গঠনগত অপচয় | ডিফল্টভাবে পুনরুদ্ধার করা হয় |
| ড্রিফট / "রানার ৩-এ কাজ করে" | সাধারণ সমস্যা | কমানো হয়েছে (ডিফল্টভাবে এফিমেরাল) |
| অপারেশনাল জটিলতা | প্রাথমিকভাবে কম | বেশি (ক্লাস্টার দক্ষতা প্রয়োজন) |
ফিক্সড ভিএম নির্বাচন করুন কেবলমাত্র যখন আপনার সত্যিই সমতল ২৪×৭ চাহিদা থাকে অথবা ক্লাস্টার নিষেধ করে এমন কোনো সীমাবদ্ধতা থাকে। বাকি সবাই যাদের স্পাইকি মানবচালিত পাইপলাইন আছে, তারা ফার্নিচার ট্যাক্স পরিশোধ করছেন।
১২. আপনি যা হারিয়ে যাচ্ছেন না
অটোস্কেলিং মানে "কোনো নিয়ন্ত্রণ নেই" নয়। আপনি এখনও সমান্তরালতা, অনুমোদিত ইমেজ, DinD অনুমতি, নেটওয়ার্ক নীতি এবং রেজিস্ট্রেশন পরিসীমা সেট করেন। বিষয়টি হলো সেই নিয়ন্ত্রণগুলো বজায় রাখার পাশাপাশি অব্যবহৃত ক্ষমতা বাষ্পীভূত হতে দেওয়া — যা সাধারণ ভাষায় লেখা অংশের একই আশ্বাস, এখন RBAC, নেমস্পেস এবং আলাদা রানার রিলিজের মাধ্যমে নিশ্চিত করা হচ্ছে।
১৩. অপারেশনাল চেকলিস্ট
- পিন অপারেটর/চার্ট ভার্সন; উদ্দেশ্যসম্মতভাবে আপগ্রেড করুন।
- রানার টোকেন ঘুরিয়ে দিন; প্রকাশ করার আগে স্ক্রিপ্ট থেকে ল্যাব টোকেন মুছে ফেলুন।
- আলাদা নেমস্পেস: GitLab সিস্টেম বনাম রানার জব।
- পর্যবেক্ষণ করুনপেন্ডিংপড — বৃদ্ধি পান্ডিং মানে শিখরে কনক্যুরেন্স বা নোড ক্ষমতা কম।
- পর্যবেক্ষণ করুনখালি নোড ঘণ্টা— রাতভর খালি থাকা নোড মানে স্কেল-ডাউন বিলম্ব বা পুল নীতি সনাক্তকরণের প্রয়োজন।
- প্রাইভিলেজড রানারকে শুধুমাত্র তাদের প্রয়োজনীয় জবের জন্য সীমাবদ্ধ রাখুন।
- রানার এলাস্টিসিটির স্বাধীনভাবে GitLab ব্যাকআপ নিন।
- এলাস্টিক সিআই চালু হওয়ার পর সপ্তাহের ঘণ্টা অনুযায়ী বিল পর্যালোচনা করুন — রাত ও সপ্তাহান্তে ব্যয় উল্লেখযোগ্যভাবে কমে যাবে।
১৪. এটি কার জন্য
- প্ল্যাটফর্ম ইঞ্জিনিয়ার এবং SRE যারা Kubernetes-এ GitLab CI বাস্তবায়ন করছেন।
- DevOps নেতারা যারা স্ট্যান্ডিং রানার ভিএম-এর বদলে এক্সিকিউটর পড ব্যবহার করছেন।
- ইঞ্জিনিয়ারিং এবং ফিন্যান্স পার্টনার যাদের সিআই ব্যবহারভিত্তিক ইউটিলিটির মতো আচরণ করতে হবে, যেন আসবাবের মতো না।
১৫. অফিসিয়াল GitLab দলিল
এই পৃষ্ঠাগুলো উপরের Helm ডিপ্লয়মেন্ট এবং স্কেলিং আচরণের জন্য মূল রেফারেন্স। ভার্সন পরিবর্তন হলে ব্লগ পোস্টের চেয়ে এগুলোকে পছন্দ করুন।
জিটল্যাব সার্ভার Kubernetes
- জিটল্যাব অপারেটর— অপারেটর + Helm ইনস্টল পথ যার ব্যবহার প্রশিক্ষণের ওয়েবলুইকথ-এ করা হয়েছে।
- জিটল্যাব Helm চার্ট— মূল চার্টের নথিপত্র।
- চার্টের মাধ্যমে জিটল্যাব Helm চার্ট— যখন আপনি চার্টের মাধ্যমে জিটল্যাব ডিপ্লয় করেন অপারেটর নয়।
- gitlab-runner সাবচার্ট (জিটল্যাব চার্ট)— মূল চার্টের পাশে জিটল্যাবের সাথে বান্ডেল করা রানার (একক রানার চার্ট থেকে আলাদা)।
জিটল্যাব রানার Helm চার্ট
- চার্টের মাধ্যমে জিটল্যাব রানার—
helm repo add gitlab, ইনস্টল/আপগ্রেড, OCI চার্টের নোট। - জিটল্যাব রানার Helm চার্ট—
concurrent, কনফিগারেশন টেমপ্লেট, RBAC, ক্যাশ, ইমেজের পছন্দ। - gitlab-runner চার্ট
values.yaml— পূর্ণ মূল মানসমূহ (অপশনাল HPA স্টাবস সহ)।
Kubernetes এক্সিকিউটর এবং অটোস্কেলিং
- Kubernetes এক্সিকিউটর— জব পড, হেল্পার, সার্ভিস (যেমন DinD), রিসোর্স রিকোয়েস্ট, RBAC ভার্ব।
- অটোস্কেলিং কনফিগার করুন (Kubernetes এক্সিকিউটর / চার্ট)— পড বন্ধ করা,
[runners.kubernetes.autoscaler], সময়সীমার নীতিমালা (রাত ও সপ্তাহান্তে নিষ্ক্রিয়)। - অটোস্কেলিং GitLab রানার— সাধারণ অটোস্কেলিং মডেল (এছাড়াও ডিস্ট্রিবিউটেড ক্যাশিং অন্তর্ভুক্ত)।
- GitLab রানার ফ্লিট পরিকল্পনা ও ব্যবস্থাপনা— ফ্লিট-স্তরের স্কেলিং ও অপারেশন।
- উন্নত কনফিগারেশন (
config.toml)— গ্লোবালconcurrentএবং এক্সিকিউটর সেকশন যা Helmrunners.config-এ অন্তর্ভুক্ত।
GitLab-এ CI জব, বিল্ড এবং রানার সেটিংস
- GitLab-এ রানার কনফিগার করুন— রেজিস্ট্রেশন, ট্যাগ, run-untagged, প্রোটেক্টেড রানার।
- Docker ব্যবহার করে CI-তে ইমেজ তৈরি করুন— DinD এবং বিকল্প (যখন
privileged/ Docker সার্ভিস রানার ভ্যালুতে সক্রিয় থাকে)।
রাত ও সপ্তাহান্তের খরচ নিয়ন্ত্রণের জন্য যুক্ত করুন: (1) Kubernetes এক্সিকিউটর জব পড যা শূন্যে যায়, (2) চার্টconcurrentএবং অটোস্কেলারনীতিমালাযা অফ-পিকidle_count = 0-এর সাথে যুক্ত, এবং (3) ক্লাস্টার/নোড অটোস্কেলিং যাতে খালি নোড পুল থেকে বের হয়ে যায় — যেমন সেকশন 6–7-এ বর্ণিত।
১৬. ভিডিও এবং রিপোতে ফিরে যাওয়া
ইউটিউব সেশন —প্রায় ২০ মিনিটে পূর্ণাঙ্গ GitLab। Kubernetes ব্যবহার করে GitLab Runner ওয়ার্কলোড অটোস্কেলিং— এটি Kubernetes-এর GitLab, Helm-এর মাধ্যমে রানার এবং হাইপারস্কেল খরচের গল্প দেখায়: ডাইনামিকভাবে ইনফ্রাস্ট্রাকচার প্রোভিশন এবং ডি-প্রোভিশন করুন যাতে আপনি শূন্য রাত এবং সপ্তাহান্তের জন্য শীর্ষ হার পরিশোধ করছেন না। এই রিপোতেgitlab-runners-k3s-hyperscale-course.prompt.mdকোর্স বিল্ড প্রম্পট ব্যবহার করুন, উপরের অফিসিয়াল ডকসমেন্টেশনকে ভার্সনযুক্ত সত্যের উৎস হিসেবে ধরুন। একই ধারণার নন-টেকনিক্যাল উপস্থাপনার জন্য দেখুনশূন্য CI-এর জন্য পরিশোধ বন্ধ করুন।
সমাপ্তি
Kubernetes কেবল GitLab রানার হোস্ট করে না। সঠিকভাবে ব্যবহার করলে এটি CI-এর অর্থনীতিকে পরিবর্তন করে:প্রয়োজনে প্রোভিশন করুন, শূন্যে ডি-প্রোভিশন করুন, মানুষ বাড়ি যখন CPU/র্যাম/স্টোরেজ উদ্ধার করুন। এটি হাইপারস্কেল প্যাটার্ন — যেকোনো দল যে দল একটি স্থায়ী ফ্লিটের বদলে পডের একটি কুইউর সাথে বিনিময় করতে প্রস্তুত।
ভিডিও দিয়ে শুরু করুন, ল্যাবে অপারেটর + রানার Helm প্রতিষ্ঠা করুন, নোড অটোস্কেলিং চালু করুন, তারপর বিলে শনিবার অবশেষে শান্ত দেখাচ্ছে কিনা তা পরীক্ষা করুন।
প্রকাশিত Workstation দ্বারা।