Pods & Workloads - Kubernetes Basic Units

Tổng quan

Pods là smallest deployable unit trong Kubernetes. Workloads là higher-level abstractions quản lý pods.

Pods

Pod là gì?

Pod là group của một hoặc nhiều containers chia sẻ storage và network.

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    ports:
    - containerPort: 80

Java Example: Creating a Pod

Bạn có thể tạo một Pod bằng Java sử dụng Fabric8 Kubernetes Client.

import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;

public class PodCreator {

    public static void main(String[] args) {
        try (KubernetesClient client = new DefaultKubernetesClient()) {
            Pod pod = new PodBuilder()
                    .withNewMetadata().withName("my-java-pod").endMetadata()
                    .withNewSpec()
                        .addNewContainer()
                            .withName("nginx")
                            .withImage("nginx:1.20")
                            .addNewPort().withContainerPort(80).endPort()
                        .endContainer()
                    .endSpec()
                    .build();

            client.pods().inNamespace("default").createOrReplace(pod);
            System.out.println("Pod my-java-pod created successfully!");

        } catch (Exception e) {
            System.err.println("Error creating pod: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Workloads

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20

ReplicaSet

Đảm bảo số lượng pod replicas chạy.

DaemonSet

Chạy pod trên mỗi node trong cluster.

StatefulSet

Quản lý stateful applications.

Job & CronJob

Chạy batch workloads.

Java Example: Creating a Deployment

import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;

public class DeploymentCreator {

    public static void main(String[] args) {
        try (KubernetesClient client = new DefaultKubernetesClient()) {
            Deployment deployment = new DeploymentBuilder()
                .withNewMetadata().withName("my-java-deployment").endMetadata()
                .withNewSpec()
                    .withReplicas(2)
                    .withNewSelector().addToMatchLabels("app", "my-app").endSelector()
                    .withNewTemplate()
                        .withNewMetadata().addToLabels("app", "my-app").endMetadata()
                        .withNewSpec()
                            .addNewContainer()
                                .withName("my-container")
                                .withImage("busybox")
                                .withCommand("sh", "-c", "echo Hello Kubernetes! && sleep 3600")
                            .endContainer()
                        .endSpec()
                    .endTemplate()
                .endSpec()
                .build();

            client.apps().deployments().inNamespace("default").createOrReplace(deployment);
            System.out.println("Deployment my-java-deployment created successfully!");

        } catch (Exception e) {
            System.err.println("Error creating deployment: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Pod Lifecycle

  1. Pending
  2. Running
  3. Succeeded
  4. Failed
  5. Unknown

Best Practices

  • Use Deployments thay vì bare Pods
  • Set resource requests và limits
  • Configure health checks
  • Use proper labels và selectors

Next Steps

  1. 📚 Học về Services & Networking
  2. 🎯 Practice tạo Deployments
  3. 🏗️ Explore StatefulSets
  4. 💻 Setup health checks

Nội dung đã được mở rộng với detailed examples và hands-on labs, cùng các ví dụ Java.