Trong bài này, mình sẽ chia sẻ về Static Pods trong Kubernetes – một loại Pod “đặc biệt” không giống như những Pod bạn thường tạo bằng kubectl.
Xem thêm:
1. Kubernetes Static Pod là gì?
Static Pod là Pod được tạo trực tiếp bởi kubelet – chương trình chạy trên mỗi node của Kubernetes, không thông qua API server hay các Controller thông thường.
Điều đó có nghĩa:
- Bạn không thể dùng
kubectl createhaykubectl deleteđể thao tác với Static Pod như các Pod bình thường. - Static Pod sẽ tự động khởi động mỗi khi node khởi động lại.
- Nếu Pod bị xóa hoặc chết, kubelet sẽ tự động tạo lại dựa trên file YAML gốc – giống như một dịch vụ nền (background service) luôn tồn tại.
Static Pod thường được dùng trong:
- Các thành phần của control plane như
kube-apiserver,etcd,kube-controller-manager - Các công việc cần đảm bảo luôn luôn chạy ở mỗi node như dọn dẹp logs, giám sát, v.v.

2. Cách tạo Static Pod
Kubelet sẽ tự động đọc các file YAML trong một thư mục được cấu hình sẵn để tạo Static Pods. Thư mục mặc định thường là:
/etc/kubernetes/manifests/
Bạn chỉ cần:
- Viết file YAML định nghĩa Pod
- Lưu file vào đúng thư mục kubelet theo dõi
- Kubelet sẽ tự động tạo Pod từ đó

Ví dụ cụ thể:
mkdir -p /etc/kubernetes/manifests/
cat <<EOF >/etc/kubernetes/manifests/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF
systemctl restart kubelet
# Run this command on the node where the kubelet is running
crictl ps
# ON THE MASRTER NODE kubectl get pods kubectl delete pod static-web-worker kubectl get pods
3. Cách xóa Static Pod
Do Static Pod không nằm trong sự kiểm soát của API server, nên nếu bạn dùng kubectl delete pod, kubelet sẽ ngay lập tức tạo lại Pod đó từ file YAML vẫn còn trong thư mục.
Cách xóa đúng Static Pod:
- Truy cập vào node nơi Pod đang chạy
- Xóa file YAML tĩnh trong thư mục cấu hình
Ví dụ:
# Run these commands on the node # where the kubelet is running mv /etc/kubernetes/manifests/static-web.yaml /tmp sleep 10 crictl ps # You will see that no nginx container is running mv /tmp/static-web.yaml /etc/kubernetes/manifests/ sleep 10 crictl ps
Kubelet sẽ phát hiện file bị xóa và tự động dừng Pod tương ứng.
4. Static Pod dùng để làm gì?
Static Pod rất hữu ích trong các trường hợp:
- Khi API server chưa sẵn sàng hoặc chưa có, chẳng hạn như lúc khởi động cụm Kubernetes control-plane đầu tiên.
- Đảm bảo một số dịch vụ quan trọng luôn chạy ngay cả khi control plane có sự cố.
Các thành phần quan trọng như:
etcdkube-apiservercontroller-manager
thường được chạy dưới dạng Static Pod trong quá trình bootstrapping Kubernetes.

5. Phân biệt Static Pod và DaemonSet
| Tiêu chí | Static Pod | DaemonSet |
|---|---|---|
| Tạo bởi | kubelet trực tiếp |
API Server (qua Controller) |
| Phụ thuộc vào API Server? | ❌ Không | ✅ Có |
| Sử dụng phổ biến để | Triển khai control plane, hệ thống | Chạy agents: log, monitoring |
| Cập nhật | Qua chỉnh sửa file YAML | Qua kubectl apply |
| Lịch trình Pod (scheduling) | Không qua kube-scheduler |
Cũng không dùng kube-scheduler |
Bài viết liên quan: