Kubernetes-এর গোড়া: pod, deployment ও service

Kubernetes অনেক মেশিনে container চালায় ও সুস্থ রাখে। কয়েকটি মূল object শিখলেই বেশিরভাগ বোঝা যায়।

control plane দ্বারা পরিচালিত container-এর একটি cluster

Kubernetes (প্রায়ই K8s) এমন একটি সিস্টেম যা মেশিনের একটি দলে container চালায় এবং আপনার বর্ণনা করা অবস্থায় রাখে। আপনি বলেন "এই অ্যাপের ৩টি কপি চাই", আর Kubernetes সেগুলো চালু করে, মরে গেলে বদলায় এবং মেশিনে ছড়িয়ে দেয়।

মূল ধারণা: কাঙ্ক্ষিত অবস্থা

আপনি YAML ফাইলে যা চান তা লেখেন। Kubernetes সেটিকে আসলে যা চলছে তার সাথে মেলাতে থাকে এবং পার্থক্য ঠিক করে। এই চক্রের কারণেই এটি নিজে সেরে উঠতে পারে।

মূল object

  • Cluster: মেশিনগুলো (node) এবং সিদ্ধান্ত নেওয়া control plane।
  • Pod: ক্ষুদ্রতম একক। এক বা একাধিক container যারা network ও storage ভাগ করে। Pod অস্থায়ী; যেকোনো সময় বদলে যেতে পারে।
  • Deployment: একই রকম pod-এর সেট পরিচালনা করে। চাওয়া সংখ্যা চালু রাখে এবং rolling update (নতুন সংস্করণ ধীরে ধীরে পুরোনোটি বদলায়) ও rollback করে।
  • Service: বদলাতে থাকা pod-এর সামনে স্থির ঠিকানা ও নাম। এদের মধ্যে load ভাগ করে।
  • ConfigMap ও Secret: image-এর বাইরে রাখা সেটিংস ও সংবেদনশীল মান।
  • Namespace: একটি cluster-এর ভেতরে object-এর দল আলাদা করার উপায়।

একটি ছোট উদাহরণ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: myapp:1.0
          ports:
            - containerPort: 3000
          resources:
            requests: { cpu: "100m", memory: "128Mi" }
            limits: { memory: "256Mi" }
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 3000

Deployment myapp:1.0 চালানো ৩টি pod চায়। Service app: web label দিয়ে সেগুলো খুঁজে একটি ঠিকানা দেয়।

প্রথমে যে কমান্ড লাগবে

kubectl apply -f app.yaml              # object বানানো বা হালনাগাদ
kubectl get pods                       # pod-এর তালিকা
kubectl describe pod <name>            # বিস্তারিত ও event (debug-এ দারুণ)
kubectl logs <pod>                     # container log
kubectl rollout status deployment/web  # update দেখা
kubectl rollout undo deployment/web    # আগের সংস্করণে ফেরা
kubectl scale deployment/web --replicas=5

শেখার জন্য minikube বা kind দিয়ে ছোট স্থানীয় cluster চালান।

Health check ও resource

  • Readiness probe: pod কখন traffic নেওয়ার জন্য তৈরি তা জানায়।
  • Liveness probe: আটকে যাওয়া container কখন restart হবে তা জানায়।
  • Request ও limit: pod-এর যা দরকার ও সর্বোচ্চ যা ব্যবহার করতে পারবে। এগুলো ছাড়া একটি pod অন্যদের না খাইয়ে রাখতে পারে।

নিরাপত্তা অভ্যাস

  • Secret Git-এ রাখবেন না। মনে রাখুন, Secret ডিফল্টে শুধু base64-এনকোড করা, তাই কে পড়তে পারে সীমিত করুন এবং at-rest encryption বা বাইরের secret manager ভাবুন।
  • Container non-root-এ চালান এবং latest-এর বদলে নির্দিষ্ট image tag দিন।
  • RBAC দিয়ে access সীমিত করুন, cluster-admin credential ভাগ করবেন না।
  • Kubernetes API বা dashboard ইন্টারনেটে খোলা রাখবেন না।

Kubernetes কি আপনার দরকার?

Kubernetes শক্তিশালী, আবার চালানো জটিল। একটি server-এ একটি অ্যাপের জন্য systemd বা Docker Compose প্রায়ই যথেষ্ট। অনেক service, কয়েকটি মেশিন, ঘন ঘন deploy বা স্বয়ংক্রিয় scaling লাগলে এটি কাজে লাগতে শুরু করে। Cloud provider-এর managed service cluster চালানোর অনেক কাজ সরিয়ে দেয়।

মূল কথা: কাঙ্ক্ষিত অবস্থা YAML-এ লিখুন, pod-এর জন্য Deployment ও স্থির access-এর জন্য Service ব্যবহার করুন, probe ও resource limit দিন, Secret ও access সুরক্ষিত রাখুন, এবং জটিলতার বিনিময়ে লাভ হলেই Kubernetes নিন।


Linux ও DevOps সিরিজ, পর্ব ২ (delivery ও পরিচালনা): 1 নম্বর (মোট 5)।

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া