Tìm hiểu về khái niệm, cách tạo, xóa Static Pods trong Kubernetes có ví dụ mẫu chi tiết.
1. Kubernetes Static Pod là gì?
Kubernetes Static Pods một loại Pod được quản lý trực tiếp bởi kubelet mà không cần thông qua API server hay bất kỳ thành phần nào trong master node.
2. Cách tạo Kubernetes Static Pods
Bình thường, kubelet sẽ nhận thông tin từ API-server để tạo ra Pod trong k8s. Tuy nhiên, nếu không có API-server, Pod vẫn có thể được tạo ra nếu bạn có file định nghĩa Pod. Nhưng làm thế nào để cung cấp file định nghĩa Pod cho kubelet khi mà không có API-Server?
Để cung cấp file định nghĩa Pod cho kubelet, bạn có thể đặt file vào thư mục:
/etc/kubernetes/manifests/
Kubelet sẽ định kỳ kiểm tra thư mục này và đảm bảo Pod được khởi động và hoạt động. Nếu ứng dụng bị lỗi, kubelet sẽ tự động khởi động lại. Mọi thay đổi trong file định nghĩa Pod sẽ được kubelet cập nhật vào Pod.
Bạn có thể xem Static Pods bằng lệnh dkubectl get pods --all-namespaces
Ví dụ:
controlplane / ➜ kubectl run --restart=Never --image=busybox static-busybox --dry-run=client -o yaml > /etc/kubernetes/manifests/static-busybox.yaml controlplane / ➜ cat /etc/kubernetes/manifests/static-busybox.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: static-busybox name: static-busybox spec: containers: - command: - sleep - "1000" image: busybox name: static-busybox resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
3. Các xóa Static Pods
root@controlplane:~# kubectl get pods --all-namespaces -o wide | grep static-greenbox default static-greenbox-node01 1/1 Running 0 19s 10.244.1.2 node01 <none> <none> root@controlplane:~# ssh node01 root@node01:~# ps -ef | grep /usr/bin/kubelet root 4147 1 0 14:05 ? 00:00:00 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.k8s.io/pause:3.9 root 4773 4733 0 14:05 pts/0 00:00:00 grep /usr/bin/kubelet root@node01:~# grep -i staticpod /var/lib/kubelet/config.yaml staticPodPath: /etc/just-to-mess-with-you root@node01:/etc/just-to-mess-with-you# ls greenbox.yaml root@node01:/etc/just-to-mess-with-you# rm -rf greenbox.yaml
4. Các trường hợp sử dụng
Static Pods được sử dụng để triển khai các thành phần của Kubernetes control plane (API server, Controller, ETCD) bởi vì nó không phụ thuộc vào API server.
5. Sự khác biệt Static Pod với DaemonSet
Static Pod | Daemon Set |
Được tạo bởi kubelet | Được tạo bởi API-Server (DaemonSet Controller) |
Triển khai các thành phần của control plane hoặc khi không có API server | Triển khai Monitor Agents, Logging Agents |
Cả hai đều bị bỏ qua bởi kube-scheduler. |
Bài viết liên quan: