Danh sách bài viết trong series Học Kubernetes Từ Cơ Bản Đến Chứng Chỉ CKAD
- Lộ Trình Học Kubernetes Từ Cơ Bản Đến Chứng Chỉ CKAD
- Bài 1: Giới Thiệu Kubernetes Và Khái Niệm Cluster Cho CKAD
- Bài 2: Cài Đặt Minikube Và sử dụng kubectl Cơ Bản
- Bài 3: Quản Lý Pod Cơ Bản (Create, Delete, Describe)
- Bài 4: Sử Dụng ConfigMap Và Secret Trong YAML
- Bài 5: Quản Lý Environment Variables Và Command/Args
- Bài 6: Cấu Hình Deployment Và Replica Set
- Bài 7: Thiết Kế Pod Với Nhiều Container
- Bài 8: Sử Dụng Sidecar Và Init Container
- Bài 9: Chia Sẻ Tài Nguyên Giữa Các Container
- Bài 10: Giám Sát Log Và Events Với kubectl logs
- Bài 11: Debug Pod Với kubectl describe Và exec
- Bài 12: Tối Ưu Pod Với Resource Limits Và Requests
- Bài 13: Sử Dụng Liveness Và Readiness Probes
- Bài 14: Tối Ưu Hóa Pod Với HPA (Horizontal Pod Autoscaler)
- Bài 15: Cấu Hình Service (ClusterIP, NodePort)
- Bài 16: Sử Dụng Ingress Và Network Policy
- Bài 17: Quản Lý DNS Và Load Balancing Trong Kubernetes
- Bài 18: Sử Dụng Volume (emptyDir, hostPath)
- Bài 19: Cấu Hình Persistent Volume Và Persistent Volume Claim
- Bài 20: Tổng Kết, Mẹo Thi CKAD, Bài Tập Thực Hành Cuối
Sau khi đã cài đặt Minikube và làm quen với kubectl ở Bài 2, chúng ta sẽ đi sâu vào việc quản lý Pods đơn vị nhỏ nhất và cơ bản nhất trong Kubernetes. Bài này sẽ hướng dẫn bạn cách tạo (create), xóa (delete), và mô tả (describe) Pods một cách chi tiết, với các ví dụ thực tế và YAML. Đây là bước quan trọng để bạn bắt đầu thực hành hands-on, vì Pods là nền tảng cho hầu hết các objects khác như Deployments hay Services.
Bài viết này vẫn thuộc domain Core Concepts của kỳ thi CKAD (chiếm 15% trọng số), kiểm tra khả năng tạo và quản lý Pods cơ bản. Trong CKAD, các nhiệm vụ liên quan đến Pods chiếm tỷ lệ lớn, chẳng hạn như tạo Pod từ YAML, debug bằng describe, hoặc xóa Pods không cần thiết. Mình sẽ vào luôn Pod là gì (tóm tắt nhanh), Pod Lifecycle, và các command kubectl cụ thể cho việc quản lý.
Ôn Tập Nhanh: Pod Là Gì?
Như đã giới thiệu ở Bài 1, Pod là đơn vị triển khai nhỏ nhất trong Kubernetes, đại diện cho một hoặc nhiều containers chạy cùng nhau trên một node. Các containers trong Pod chia sẻ network namespace (cùng IP và port), storage (qua volumes), và lifecycle. Pods là ephemeral nghĩa là chúng có thể bị destroy và recreate bất kỳ lúc nào, thường được quản lý bởi controllers như Deployments để đảm bảo availability.
Một Pod cơ bản bao gồm:
- Metadata: Tên, namespace, labels (để chọn lọc), annotations.
- Spec: Mô tả containers (image, ports, resources), volumes, restart policy.
- Status: Trạng thái hiện tại (Pending, Running, Succeeded, Failed, Unknown).
Hiểu cấu trúc Pod giúp bạn viết YAML chính xác, tránh lỗi phổ biến trong CKAD như sai định dạng hoặc thiếu trường bắt buộc.
Dưới đây là sơ đồ kiến trúc thành phần Kubernetes bao gồm Pods từ tài liệu chính thức, minh họa cách Pods nằm trong worker nodes và tương tác với control plane.
Pod Lifecycle
Trước khi quản lý Pods, bạn cần hiểu vòng đời của chúng để debug hiệu quả. Pod đi qua các giai đoạn sau:
- Pending: Pod đã được tạo nhưng chưa được schedule lên node (ví dụ: chờ pull image hoặc thiếu resources).
- Running: Ít nhất một container đang chạy bình thường.
- Succeeded: Tất cả containers hoàn thành thành công (exit code 0), thường cho Jobs.
- Failed: Ít nhất một container thất bại (exit code != 0).
- Unknown: Không thể xác định trạng thái (lỗi network).
Restart policy (Always, OnFailure, Never) quyết định hành vi khi container crash. Ví dụ: Policy “Always” sẽ restart container thất bại.
Dưới đây là diagram vòng đời Pod từ tài liệu tham khảo, giúp bạn hình dung các trạng thái chuyển tiếp.

Trong CKAD, bạn thường gặp Pods ở trạng thái Pending hoặc Failed dùng describe để check events và debug.
Các Command Kubectl Cơ Bản Để Quản Lý Pods
Chúng ta sẽ tập trung vào create, delete, describe, nhưng cũng bao gồm get, exec, logs để toàn diện. Có hai cách tiếp cận: Imperative (command trực tiếp, nhanh cho test) và Declarative (YAML file, khuyến nghị cho production và CKAD vì thi yêu cầu viết YAML thủ công).
1. Liệt Kê Và Xem Pods (Get Pods)
-
Command cơ bản:
kubectl get podshoặckubectl get po(tắt). Thêm `-n` nếu không ở default. – Ví dụ: `kubectl get pods -o wide` (hiển thị IP, node). – Ví dụ nâng cao: `kubectl get pods -l app=frontend` (lọc bằng labels). -
Xem tất cả namespaces:
kubectl get pods --all-namespaceshoặc-A.
Mẹo CKAD: Sử dụng -o json hoặc -o yaml để export cấu hình, hữu ích khi edit.
2. Tạo Pod (Create Pod)
Cách Imperative
- Command:
kubectl run <pod-name> --image=<image> [options].- Ví dụ:
kubectl run nginx-pod --image=nginx --port=80. - Options:
--restart=Never(cho Pod standalone, không restart),--dry-run=client -o yaml(generate YAML mà không tạo thật).
- Ví dụ:
Imperative nhanh nhưng ít linh hoạt CKAD ưu tiên declarative.
Cách Declarative (YAML)
- Viết file YAML rồi apply.
- Cấu trúc YAML cơ bản:
apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: myapp spec: containers: - name: my-container image: nginx:latest ports: - containerPort: 80 restartPolicy: Always - Tạo:
kubectl apply -f my-pod.yaml(tạo hoặc cập nhật). - Hoặc
kubectl create -f my-pod.yaml(chỉ tạo, lỗi nếu tồn tại).
- Cấu trúc YAML cơ bản:
Trong CKAD, bạn phải viết YAML từ scratch luyện tập dùng kubectl explain pod.spec.containers để xem docs.
3. Mô Tả Pod (Describe Pod)
- Command:
kubectl describe pod <pod-name>.- Hiển thị: Metadata, spec, status, conditions (Ready, Scheduled), events (lỗi pull image, crash).
- Ví dụ:
kubectl describe pod nginx-pod– Check nếu Pod Pending do thiếu resources.
Đây là command debug mạnh mẽ nhất trong CKAD, 80% debug dùng describe để xem events cuối cùng.
4. Xóa Pod (Delete Pod)
- Command:
kubectl delete pod <pod-name>hoặckubectl delete -f my-pod.yaml.- Options:
--force --grace-period=0(xóa ngay lập tức, không chờ terminate). - Xóa nhiều:
kubectl delete pods -l app=myapp.
- Options:
Pods bị xóa sẽ không recover trừ khi managed bởi Deployment (tự tạo mới).
5. Các Command Hỗ Trợ Khác
- Exec vào Pod:
kubectl exec -it <pod-name> -- /bin/sh(mở shell, debug nội bộ). - Xem Logs:
kubectl logs <pod-name> [-c <container>](xem output, thêm-fđể follow realtime). - Port Forward:
kubectl port-forward pod/<pod-name> 8080:80(truy cập local).
Thực Hành Thực Tế Trên Minikube
Giả sử bạn đã start Minikube từ Bài 2. Hãy thực hành từng bước:
-
Tạo Pod Imperative:
kubectl run simple-pod --image=busybox --restart=Never --command -- sleep 3600 kubectl get pods -
Tạo Pod Declarative: Tạo file
example-pod.yamlvới nội dung trên, rồi:kubectl apply -f example-pod.yaml kubectl get pods -o wide -
Describe Pod:
kubectl describe pod example-podCheck status và events.
-
Exec và Logs:
kubectl exec -it example-pod -- /bin/sh # Bên trong: echo "Hello from Pod" > /tmp/test.txt; exit kubectl logs example-pod -
Delete Pod:
kubectl delete pod example-pod kubectl get pods # Kiểm tra đã xóa
Nếu Pod không chạy, dùng describe để debug (ví dụ: ImagePullBackOff nếu image sai).
Liên Hệ Với Chứng Chỉ CKAD
Domain Core Concepts yêu cầu bạn thành thạo quản lý Pods, chiếm phần lớn trong 15% trọng số. Các nhiệm vụ điển hình:
- Tạo Pod từ YAML với spec cụ thể (ports, volumes).
- Describe để debug tại sao Pod không Ready.
- Delete Pods không đạt yêu cầu.
Mẹo thi:
- Dùng
vihoặcnanođể edit YAML trong thi (môi trường browser-based). - Enable autocomplete:
source <(kubectl completion bash). - Thời gian: Dành 3-5 phút cho task Pod đơn giản.
- Luyện trên Katacoda hoặc Killer.sh để simulate thi.
Nên thực hành ít nhất 10 lần các lệnh này để quen tay không nếu chưa làm nhiều vào thi tâm lý nữa là cuống đấy.
Kết Luận
Bài này mình đã hướng dẫn chi tiết quản lý Pods cơ bản: create (imperative/declarative), delete, describe. Bạn giờ có thể tự tạo và debug Pods, sẵn sàng cho các khái niệm nâng cao. Tiếp theo, ở Bài 4: Sử Dụng ConfigMap Và Secret Trong YAML, chúng ta sẽ bước vào domain Configuration để quản lý cấu hình ứng dụng.




