Pods
1. Pod là gì?
- Pod là đơn v ị nhỏ nhất mà bạn tạo và quản lý trong Kubernetes.
- Một Pod là một nhóm gồm một hoặc nhiều container. Thông thường 1 Pod = 1 container.
💡 Ghi nhớ
- Scheduler xếp Pod lên node, không xếp container.
- IP được cấp cho Pod (
10.244.x.x), không cấp cho từng container. kubectlkhông có lệnh "tạo container". Thứ nhỏ nhất bạn tạo được là Pod.
2. Scale bằng Pod, không bằng container
Khi người dùng tăng, ta thêm Pod mới (có thể trên node khác), không thêm container vào Pod đang có.
3. Multi-container Pod
- Nhiều container cùng sống trong một Pod: chia sẻ network (gọi nhau qua
localhost, không được trùng port) và storage (volume dùng chung). - Chúng được tạo và xóa cùng lúc.
- Thường dùng cho helper / sidecar: container phụ trợ cho app chính (đẩy log, đồng bộ file…).
apiVersion: v1
kind: Pod
metadata:
name: web-helper
spec:
volumes:
- name: shared
emptyDir: {}
containers:
- name: web
image: nginx
volumeMounts:
- name: shared
mountPath: /usr/share/nginx/html
- name: helper
image: busybox
command: ["sh", "-c", "while true; do date > /data/index.html; sleep 5; done"]
volumeMounts:
- name: shared
mountPath: /data
pause container
Mỗi Pod có một container ẩn tên pause. Nó giữ network namespace của Pod, để các container khác trong Pod dùng chung một IP. Xem trên node:
sudo crictl pods # liệt kê pod trên node
sudo crictl ps # liệt kê container
| Khái niệm | Ý nghĩa |
|---|---|
| Pod | Object nhỏ nhất, 1 instance của app |
| Container | Tiến trình app chạy từ image |
| Pod IP | Mỗi Pod 1 IP (từ 10.244.0.0/16) |
| localhost trong Pod | Container gọi nhau không qua mạng ngoài |
| Shared volume | Storage dùng chung trong Pod |
| pause container | Giữ network namespace cho Pod |
| Helper / sidecar | Container phụ trợ cho app chính |
| Scale | Thêm/bớt Pod, không thêm container |
4. Lệnh cơ bản
kubectl run nginx --image=nginx # tạo pod nhanh
kubectl get pods -o wide # xem pod, IP, node
kubectl describe pod nginx # chi tiết + events
kubectl exec -it nginx -- /bin/bash # vào trong container
kubectl delete pod nginx
Khi chạy kubectl run chuyện gì xảy ra?
- kubectl gửi yêu cầu tới apiserver → lưu Pod vào etcd.
- Scheduler chọn node.
- kubelet trên node đó gọi containerd pull image
nginxtừ Docker Hub và chạy container.
5. Best practices
- Mỗi Pod nên có 1 container chính.
- Không tạo Pod trực tiếp trong production, kể cả khi chỉ cần 1 bản. Hãy dùng Deployment, Job, hoặc StatefulSet (ứng dụng có trạng thái) – để Pod chết thì có Pod mới thay.