Kubernetes Static Pods là gì? Cách tạo, xóa

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:

Resource requirement

DaemonSet trong Kubernetes

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 create hay kubectl 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.

Kubelet

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:

  1. Viết file YAML định nghĩa Pod
  2. Lưu file vào đúng thư mục kubelet theo dõi
  3. Kubelet sẽ tự động tạo Pod từ đó

Path Static Pod

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ư:

  • etcd
  • kube-apiserver
  • controller-manager
    thường được chạy dưới dạng Static Pod trong quá trình bootstrapping Kubernetes.

Trường hợp sử dụng Static Pod

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:

Labels and Selectors trong Kubernetes

Manual Scheduling trong K8s

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em