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
- Pending
- Running
- Succeeded
- Failed
- Unknown
Best Practices
- Use Deployments thay vì bare Pods
- Set resource requests và limits
- Configure health checks
- Use proper labels và selectors
Next Steps
- 📚 Học về Services & Networking
- 🎯 Practice tạo Deployments
- 🏗️ Explore StatefulSets
- 💻 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.