Kubernetes Concepts · Part 1010

Kubernetes PodsPod কী এবং কীভাবে কাজ করে

Kubernetes-এর সবচেয়ে ছোট Deployable Unit: Pod আর Container-এর সম্পর্ক, Pods দিয়ে Scaling, Multi-Container ও Sidecar Pattern, তারপর kubectl দিয়ে প্রথম Nginx Pod।

A Kubernetes Pod as a box around an Nginx container, scaling out to three Pods across nodes, and a sidecar Pod with a main app and a helper container sharing localhost and a volume
FIG. 10 Pod = Box, Container = তার ভেতরের Application। Scale করতে নতুন Pods, পাশে Helper থাকলে Sidecar।

Kubernetes শেখার সময় সবচেয়ে গুরুত্বপূর্ণ Concepts-এর একটি হলো Pod।

Docker শেখার সময় আমরা দেখেছি কীভাবে Docker Image ব্যবহার করে Container Run করতে হয়।

যেমন:

docker run nginx

কিন্তু Kubernetes-এ Application Run করার Process একটু আলাদা।

এখানে আমরা সরাসরি Container Create করি না। বরং Kubernetes-এর একটি Resource তৈরি করি, যার নাম Pod।

Kubernetes-এ Pod হলো সবচেয়ে ছোট Deployable Unit, যার মধ্যে একটি অথবা একাধিক Container Run করতে পারে।

এই Tutorial-এ আমরা Pod কী, Container-এর সঙ্গে Pod-এর সম্পর্ক, Scaling কীভাবে কাজ করে, Multi-Container Pod কেন ব্যবহার করা হয় এবং kubectl দিয়ে একটি Pod কীভাবে Create করতে হয় — সবকিছু Step-by-Step বুঝব।

1. Kubernetes Pods শেখার আগে কী কী Ready থাকা দরকার?

Pod Create করার আগে আমরা ধরে নিচ্ছি দুটি জিনিস ইতিমধ্যে Ready রয়েছে।

  1. Application-এর Docker/Container Image তৈরি করা আছে।
  2. একটি Kubernetes Cluster Running রয়েছে।

ধরো, তুমি একটি Python অথবা Node.js Application তৈরি করেছ।

এখন সেটিকে Docker Image হিসেবে Package করা হয়েছে।

এই Image কোনো Container Registry-তে Store করা থাকতে পারে।

যেমন:

  • Docker Hub
  • Private Company Registry
  • অন্য কোনো Container Image Repository

Kubernetes সেই Registry থেকে Image Pull করে Container Run করতে পারে।

Basic Application Deployment Flow

Application Source Code
          |
          ▼
      Dockerfile
          |
          ▼
    Container Image
          |
          ▼
   Container Registry
          |
          ▼
   Kubernetes Cluster
          |
          ▼
         Pod
          |
          ▼
    App Container

অর্থাৎ Kubernetes-এ Application Run করার জন্য সাধারণত আমাদের একটি Container Image এবং একটি Working Kubernetes Cluster প্রয়োজন।

2. Kubernetes Pod কী?

Pod হলো Kubernetes-এর Smallest Deployable Unit।

সহজভাবে বলতে গেলে:

Pod হলো Kubernetes-এর এমন একটি Object, যেটি এক বা একাধিক Containers-কে একসঙ্গে Group করে।

সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।

Example:

Kubernetes Pod
      |
      ▼
┌─────────────────────┐
│        Pod          │
│                     │
│  ┌───────────────┐  │
│  │ Nginx         │  │
│  │ Container     │  │
│  └───────────────┘  │
│                     │
└─────────────────────┘

এখানে Nginx Container একটি Pod-এর মধ্যে Run করছে।

Kubernetes এই Pod-কে একটি Deployable Unit হিসেবে Manage করে।

অর্থাৎ Kubernetes-এ Application Run করার সময় আমরা সাধারণত Pod Create করি এবং সেই Pod-এর মধ্যে Container Run হয়।

3. Kubernetes সরাসরি Container Deploy করে না

এটি Kubernetes-এর একটি গুরুত্বপূর্ণ Concept।

Docker ব্যবহার করলে আমরা সরাসরি Container Run করতে পারি।

Docker Example

docker run nginx

এই Command Docker Engine-এর মাধ্যমে একটি Nginx Container Create এবং Run করে।

কিন্তু Kubernetes-এর ক্ষেত্রে:

kubectl run nginx --image=nginx

এই Command একটি Pod Create করে।

Pod-এর মধ্যে Nginx Container Run হয়।

Docker vs Kubernetes Execution

Docker
  |
  ▼
Container
  |
  ▼
Nginx Application
Kubernetes
    |
    ▼
   Pod
    |
    ▼
Container
    |
    ▼
Nginx Application

এখানে মূল পার্থক্য হলো:

Docker-এর Main Runtime Object হলো Container।

Kubernetes-এর Smallest Deployable Workload Unit হলো Pod।

Kubernetes Pod-এর Desired State Manage করে এবং Container Runtime-এর মাধ্যমে Pod-এর Containers Execute করায়।

4. Pod এবং Container-এর Relationship

সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।

এটিকে আমরা One Pod to One Application Container Pattern হিসেবে ভাবতে পারি।

Example:

Pod 1
  └── Application Container 1

Pod 2
  └── Application Container 2

Pod 3
  └── Application Container 3

ধরো, তুমি একটি Web Application Run করতে চাও।

প্রথমে একটি Pod Create করলে:

Pod 1
  |
  └── Web Application

এখন যদি একই Application-এর তিনটি Instances Run করতে চাও, তাহলে সাধারণত তিনটি Pods ব্যবহার করা হয়।

Pod 1 → Web App Container
Pod 2 → Web App Container
Pod 3 → Web App Container

এখানে তিনটি আলাদা Pods-এর মধ্যে একই Application-এর তিনটি Instances Run করছে।

Important: Application Scale করার জন্য সাধারণত একই Pod-এর মধ্যে একই Application Container-এর একাধিক Copies রাখা হয় না।

বরং নতুন Pods Create করা হয়।

5. Kubernetes-এ Pod Scaling কীভাবে কাজ করে?

ধরো, তোমার একটি Web Application আছে।

প্রথমে Application-এর Traffic কম।

তাই একটি Pod যথেষ্ট।

Kubernetes Node 1
       |
       ▼
     Pod 1
       |
       ▼
Web App Container

কিন্তু কিছুদিন পর Application-এর Users বেড়ে গেল।

এখন একটি Pod সব Requests Handle করতে পারছে না।

তাই Application-এর আরও Instances দরকার।

Kubernetes-এ সাধারণত আরও Pods Create করে Application Scale করা হয়।

Example: One Pod থেকে Three Pods

              Node 1
                 |
       +---------+---------+
       |         |         |
       ▼         ▼         ▼
     Pod 1     Pod 2     Pod 3
       |         |         |
       ▼         ▼         ▼
     Web App   Web App   Web App

এখন একই Application-এর তিনটি Instances Running রয়েছে।

এতে Application-এর Traffic Multiple Pods-এর মধ্যে Distribute করা সম্ভব হয়, যদি উপযুক্ত Service এবং Load Distribution Configure করা থাকে।

Multiple Nodes-এ Scaling

ধরো, Node 1-এর CPU অথবা Memory যথেষ্ট নেই।

তাহলে Kubernetes Scheduler নতুন Pod অন্য Available Node-এ Schedule করতে পারে।

           Kubernetes Cluster
                   |
        +----------+----------+
        |                     |
        ▼                     ▼
      Node 1                Node 2
        |                     |
    +---+---+             +---+---+
    |       |             |       |
    ▼       ▼             ▼       ▼
   Pod 1   Pod 2         Pod 3   Pod 4
    |       |             |       |
   App     App           App     App

এই Architecture-এর মাধ্যমে Kubernetes Application Workloads Multiple Nodes-এর মধ্যে Distribute করতে পারে।

অবশ্যই Scheduling-এর জন্য Nodes-এর Available Resources এবং Kubernetes Scheduling Rules পূরণ হতে হবে।

মনে রাখবে

Kubernetes-এ Application Scale করার সাধারণ Approach হলো নতুন Pods Create করা, একই Pod-এর মধ্যে অতিরিক্ত Application Containers যোগ করা নয়।

6. Scaling Up এবং Scaling Down

Kubernetes-এ Application-এর Running Instances বাড়ানো অথবা কমানোকে Scaling বলা হয়।

Scaling Up

Scaling Up মানে Application-এর Running Pod Instances বাড়ানো।

Example:

Before:
  Pod 1
  Total: 1 Pod

After:
  Pod 1
  Pod 2
  Pod 3
  Total: 3 Pods

এতে Application বেশি Traffic Handle করতে পারে, যদি Application এবং Infrastructure সেভাবে Designed থাকে।

Scaling Down

Scaling Down মানে Running Pods-এর সংখ্যা কমানো।

Example:

Before:
  Pod 1
  Pod 2
  Pod 3
  Pod 4
  Pod 5
  Total: 5 Pods

After:
  Pod 1
  Pod 2
  Total: 2 Pods

Traffic কমে গেলে অতিরিক্ত Pods কমিয়ে Infrastructure Resources Save করা যায়।

Important: Production-এ Application Scaling সাধারণত Deployment বা অন্য Workload Controller-এর মাধ্যমে Manage করা হয়।

একটি Standalone Pod নিজে Automatically Multiple Replicas Maintain করে না।

7. একটি Pod-এর মধ্যে কি Multiple Containers থাকতে পারে?

হ্যাঁ, পারে।

একটি Pod-এর মধ্যে একাধিক Containers Run করতে পারে।

তবে এটি সাধারণত একই Application-এর Multiple Instances চালানোর জন্য করা হয় না।

বরং যখন দুটি Containers একে অপরের সঙ্গে Closely Connected এবং একসঙ্গে কাজ করতে হয়, তখন Multi-Container Pod ব্যবহার করা হয়।

Example:

┌──────────────────────────────┐
│             Pod              │
│                              │
│  ┌────────────────────────┐  │
│  │ Main Web Application   │  │
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │ Helper Container       │  │
│  └────────────────────────┘  │
│                              │
└──────────────────────────────┘

এখানে একটি Container Main Application Run করছে।

অন্য Container সেই Application-কে Support করছে।

Helper Container-এর কাজ হতে পারে:

  • Uploaded Files Process করা
  • Application Logs Collect করা
  • External Data Fetch করা
  • Main Application-কে Support করা
  • Files অথবা Content Synchronize করা
  • Sidecar Functionality Provide করা

এই Pattern-কে অনেক সময় Sidecar Pattern বলা হয়।

8. একটি Pod-এর মধ্যে Multiple Containers কেন রাখব?

Multi-Container Pod ব্যবহার করার মূল কারণ হলো Closely Related Containers-এর মধ্যে কিছু Resources Share করা।

একই Pod-এর Containers সাধারণত Share করে:

  • Network Namespace
  • Pod-level Networking
  • Shared Volumes, যদি Configure করা হয়
  • Pod Lifecycle Boundary

এর ফলে Containers সহজে একে অপরের সঙ্গে Communicate করতে পারে।

Shared Network

একই Pod-এর Containers সাধারণত একই Network Namespace Share করে।

ফলে তারা localhost ব্যবহার করে Communicate করতে পারে।

Example:

               Pod
                |
       +--------+--------+
       |                 |
       ▼                 ▼
 Main Application    Helper Container
    Port 8080            Port 9000
       |                 |
       +------localhost--+

ধরো, Main Application Port 8080-এ চলছে।

Helper Container একই Pod-এর মধ্যে থেকে localhost:8080-এর মাধ্যমে Main Application-এর সঙ্গে Communicate করতে পারে।

Shared Storage

একই Pod-এর Multiple Containers একই Volume Mount করতে পারে।

Example:

                 Pod
                  |
          +-------+-------+
          |               |
          ▼               ▼
    App Container    Helper Container
          |               |
          +-------+-------+
                  |
                  ▼
             Shared Volume

এক্ষেত্রে Main Application একটি File Write করলে Helper Container একই Shared Volume থেকে সেই File Read করতে পারে।

তবে Volume Sharing Automatically হয় না। Pod Specification-এর মধ্যে Volume এবং Volume Mounts Configure করতে হয়।

Shared Lifecycle

একটি Pod Create হলে Kubernetes সেই Pod-এর Spec অনুযায়ী Containers Run করার চেষ্টা করে।

Pod Delete হলে তার সঙ্গে সম্পর্কিত Containers-ও Terminate করা হয়।

তবে একই Pod-এর সব Containers একই মুহূর্তে Start বা Stop হবে — এমন নিশ্চয়তা নেই।

প্রতিটি Container-এর Restart এবং Readiness Behavior আলাদা হতে পারে।

9. Helper Containers Manually Manage না করে Pod ব্যবহার করব কেন?

ধরো, Kubernetes ছাড়া Plain Docker ব্যবহার করে একটি Application এবং একটি Helper Container Run করছ।

তোমার Setup হতে পারে:

App Container 1 ↔ Helper Container 1
App Container 2 ↔ Helper Container 2
App Container 3 ↔ Helper Container 3

এখানে প্রতিটি Application Container-এর জন্য আলাদা Helper Container দরকার।

এখন Manually Manage করতে হবে:

  • Container Networking
  • Container Communication
  • Shared Volumes
  • Application ও Helper Container Matching
  • Restart Behavior
  • Container Cleanup
  • Container Lifecycle Coordination

Application Instances বেড়ে গেলে এই Management আরও Complex হয়ে যায়।

Kubernetes Pods Related Containers-কে একটি Logical Unit হিসেবে Group করে এই কাজগুলো সহজ করে।

Example:

              Kubernetes
                  |
        +---------+---------+
        |         |         |
        ▼         ▼         ▼
       Pod 1     Pod 2     Pod 3
        |         |         |
      App +     App +     App +
      Helper    Helper    Helper

এখানে প্রতিটি Pod-এর মধ্যে Main Application এবং তার Helper Container একসঙ্গে Group করা হয়েছে।

10. একই Pod-এর Containers-এর জন্য Kubernetes কী Manage করে?

Kubernetes Pod-এর মাধ্যমে Related Containers-কে একটি Shared Execution Environment Provide করে।

Shared FeatureMeaning
Shared NetworkContainers localhost ব্যবহার করে Communicate করতে পারে
Shared StorageSame Volumes Mount করতে পারে
Pod LifecycleContainers একই Pod-এর Lifecycle Boundary-এর মধ্যে থাকে

Example

Kubernetes Pod
      |
      ├── Shared Network
      |
      ├── Shared Volumes
      |
      ├── Main Application Container
      |
      └── Helper Container

এর ফলে Related Containers আলাদাভাবে Connect করার পরিবর্তে একই Pod-এর মধ্যে Define করা যায়।

11. Multi-Container Pods কি Common?

Multi-Container Pods Kubernetes-এর একটি Valid এবং Useful Feature।

তবে Beginner Level-এ সবচেয়ে Common Pattern হলো:

One Pod
   |
   ▼
One Application Container

আর Multi-Container Pattern:

One Pod
   |
   ├── Main App Container
   |
   └── Helper Container

এই Course-এ আপাতত বেশিরভাগ Examples-এ Single-Container Pods ব্যবহার করা হবে।

কারণ এতে Kubernetes-এর Basic Concepts বোঝা সহজ হয়।

পরবর্তীতে Sidecar Containers এবং Multi-Container Pod Architecture আরও বিস্তারিতভাবে শেখা যাবে।

12. kubectl দিয়ে একটি Pod Create করা

এবার একটি Real Kubernetes Pod Create করব।

আমরা Nginx Image ব্যবহার করব।

Step 1: Kubernetes Cluster Check করা

প্রথমে নিশ্চিত হও Cluster Running রয়েছে।

Minikube ব্যবহার করলে:

minikube status

তারপর:

kubectl get nodes

Expected Example:

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   5m    v1.x.x

Step 2: Nginx Pod Create করা

kubectl run nginx --image=nginx

এই Command Kubernetes-কে বলছে:

nginx নামে একটি Pod Create করো এবং সেই Pod-এর মধ্যে nginx Image ব্যবহার করে Container Run করো।

Kubernetes Default Registry Configuration অনুযায়ী Nginx Image Pull করবে। সাধারণত এটি Docker Hub থেকে Pull হয়।

Architecture

kubectl run nginx --image=nginx
              |
              ▼
      Kubernetes API Server
              |
              ▼
           Pod Created
              |
              ▼
        Kubernetes Node
              |
              ▼
        Container Runtime
              |
              ▼
       Nginx Container

13. Kubernetes Pods List করা

Pod Create করার পর Check করো:

kubectl get pods

প্রথমে এমন Output দেখতে পারো:

NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          5s

কিছু সময় পর:

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          20s

এখানে গুরুত্বপূর্ণ Columns:

ColumnMeaning
NAMEPod-এর নাম
READYReady Containers / Total Containers
STATUSPod-এর Current Status
RESTARTSContainer Restart Count
AGEPod Create হওয়ার পর কত সময় হয়েছে

READY 1/1 মানে Pod-এর একটি Container-এর মধ্যে একটি Ready রয়েছে।

Running মানে Pod একটি Node-এ Bound হয়েছে এবং তার Container Process Running অবস্থায় রয়েছে।

14. Pod Status — ContainerCreating vs Running

Pod Create করার পর বিভিন্ন Status দেখতে পারো।

ContainerCreating

Example:

NAME    READY   STATUS              RESTARTS
nginx   0/1     ContainerCreating   0

এই অবস্থায় Kubernetes Container Start করার Preparation করছে।

এর মধ্যে থাকতে পারে:

  • Container Image Pull করা
  • Container Create করা
  • Network Setup করা
  • Storage Mount করা
  • Container Runtime Preparation

Running

Example:

NAME    READY   STATUS    RESTARTS
nginx   1/1     Running   0

এখানে Pod-এর Container Running এবং Ready রয়েছে।

তবে শুধু Running Status দেখেই Application সম্পূর্ণ Healthy — এমন ধরে নেওয়া উচিত নয়।

Application Health আরও ভালোভাবে Check করতে Readiness Probe এবং Liveness Probe ব্যবহার করা যায়।

এই বিষয়গুলো পরবর্তী Kubernetes Health Check Topic-এ শেখা যাবে।

15. Pod Create করলেই কি External Users Access করতে পারবে?

সাধারণত না।

Kubernetes-এ একটি Pod Create করলে Application Cluster-এর মধ্যে Run করে।

কিন্তু Application Automatically External Users-এর জন্য Accessible হয়ে যায় না।

Example:

Kubernetes Cluster
        |
        ▼
       Pod
        |
        ▼
   Nginx Container

এই অবস্থায় Container Running থাকলেও Browser থেকে সরাসরি Access করার জন্য উপযুক্ত Networking Configuration প্রয়োজন।

Application Expose করার জন্য Kubernetes-এর Service-এর মতো Networking Resources ব্যবহার করা যায়।

External User
      |
      ▼
    Service
      |
      ▼
     Pod
      |
      ▼
   Container

এই Tutorial-এ Service এবং Kubernetes Networking বিস্তারিতভাবে আলোচনা করা হচ্ছে না।

আপাতত আমাদের Focus হলো:

Pod Create করা এবং সেটি Running রয়েছে কি না Verify করা।

16. Pod-এর Simple Mental Model

Pod-কে একটি ছোট Box বা Wrapper হিসেবে ভাবতে পারো।

Pod       = Box
Container = Application inside the Box

সাধারণত:

┌─────────────────────┐
│        Pod          │
│                     │
│    ┌───────────┐    │
│    │ Container │    │
│    └───────────┘    │
│                     │
└─────────────────────┘

অর্থাৎ একটি Box-এর মধ্যে একটি Application Container।

কখনো কখনো:

┌─────────────────────────────┐
│             Pod             │
│                             │
│    ┌──────────────────┐     │
│    │ Main Application │     │
│    └──────────────────┘     │
│                             │
│    ┌──────────────────┐     │
│    │ Helper Container │     │
│    └──────────────────┘     │
│                             │
└─────────────────────────────┘

অর্থাৎ একটি Box-এর মধ্যে Main Application এবং Helper Container।

Kubernetes এই Box বা Pod-কে একটি Logical Deployable Unit হিসেবে Manage করে।

17. Docker Container vs Kubernetes Pod

DockerKubernetes
Containers সরাসরি Run করা যায়Containers Pods-এর মধ্যে Run করে
docker run nginxkubectl run nginx --image=nginx
Container হলো Main Runtime UnitPod হলো Smallest Deployable Unit
More Containers Run করে Scale করা যায়More Pods Create করে Scale করা হয়
Related Containers Manually Coordinate করা যায়Pod Related Containers Group করে
Docker CLI ব্যবহার করা হয়kubectl ব্যবহার করা হয়

Docker Example

docker run nginx

Kubernetes Example

kubectl run nginx --image=nginx

Docker একটি Container Run করে।

Kubernetes একটি Pod Create করে, যার মধ্যে Container Run হয়।

18. Full Kubernetes Pod Workflow

এবার পুরো Process একসঙ্গে দেখি।

1. Build Application Image
        |
        ▼
2. Push Image to Registry
        |
        ▼
3. Start Kubernetes Cluster
        |
        ▼
4. Create Pod
        |
        ▼
5. Kubernetes Schedules Pod
        |
        ▼
6. Node Pulls Container Image
        |
        ▼
7. Container Runtime Starts Container
        |
        ▼
8. Pod Status Becomes Running
        |
        ▼
9. Verify Pod Using kubectl

এই Workflow Kubernetes-এর Pod Execution Process বোঝার জন্য গুরুত্বপূর্ণ।

19. Important kubectl Commands

CommandPurpose
kubectl get nodesKubernetes Nodes List করা
kubectl run nginx --image=nginxNginx Pod Create করা
kubectl get podsCurrent Namespace-এর Pods List করা
kubectl get pods -Aসব Namespaces-এর Pods List করা
kubectl get pod nginxSpecific Pod Check করা
kubectl describe pod nginxPod-এর Detailed Information দেখা
kubectl logs nginxPod-এর Container Logs দেখা
kubectl delete pod nginxPod Delete করা

20. Complete Hands-On Demo — Nginx Pod

এই Tutorial-এর সব Commands একসঙ্গে:

# 1. Check Minikube Cluster
minikube status

# 2. Check Kubernetes Nodes
kubectl get nodes

# 3. Create Nginx Pod
kubectl run nginx --image=nginx

# 4. List Pods
kubectl get pods

# 5. Check Specific Pod
kubectl get pod nginx

# 6. Get Pod Details
kubectl describe pod nginx

# 7. Check Container Logs
kubectl logs nginx

# 8. Delete Pod After Testing
kubectl delete pod nginx

এই Commands ব্যবহার করে আমরা একটি Kubernetes Pod Create, Inspect এবং Delete করতে পারি।

21. Final Takeaway — Kubernetes Pods

এই Tutorial-এর সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো Pod এবং Container-এর Relationship বোঝা।

Kubernetes-এ সাধারণত Application Containers সরাসরি Deploy করা হয় না।

Containers একটি Pod-এর মধ্যে Run করে।

Pod হলো Kubernetes-এর Smallest Deployable Unit।

সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।

Application Scale করার সময় সাধারণত আরও Pods Create করা হয়।

আর যখন Multiple Containers একে অপরের সঙ্গে Closely Connected থাকে, তখন একই Pod-এর মধ্যে Multiple Containers ব্যবহার করা যায়।

Quick Recap

Kubernetes
    |
    ▼
   Pod
    |
    ▼
Container
    |
    ▼
Application

Scaling:

Application
    |
    ▼
Multiple Pods
    |
    ├── Pod 1 → Container
    |
    ├── Pod 2 → Container
    |
    └── Pod 3 → Container

Multi-Container Pod:

Pod
 |
 ├── Main Application Container
 |
 └── Helper Container

Final One-Line Summary:

Kubernetes Pod হলো সবচেয়ে ছোট Deployable Unit, যার মধ্যে একটি অথবা একাধিক Containers Run করে। সাধারণত একটি Pod-এ একটি Application Container থাকে এবং Application Scale করার জন্য একই Pod-এর মধ্যে আরও Containers যোগ করার পরিবর্তে নতুন Pods Create করা হয়।

Was this guide helpful?

Search the archive

Press Esc to close