Static Pods trong Kubernetes

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.

Resource requirement

DaemonSet trong Kubernetes

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.

Kubelet

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/

Path Static Pod

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.

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

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:

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