1、理论基础

DaemonSet 确保每个节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的一些典型用法:

  • 在每个节点上运行集群守护进程
  • 在每个节点上运行日志收集守护进程
  • 在每个节点上运行监控守护进程

一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。

2、创建DaemonSet

可以使用Deployment的yaml文件作为范例,更改kind 为DaemonSet,删除replicas 行

  1. [root@clientvm ~]# cat DS.yaml
  2. apiVersion: apps/v1
  3. kind: DaemonSet
  4. metadata:
  5. name: nginx
  6. namespace: mytest
  7. labels:
  8. k8s-app: nginx-web
  9. spec:
  10. selector:
  11. matchLabels:
  12. name: nginx
  13. template:
  14. metadata:
  15. labels:
  16. name: nginx
  17. spec:
  18. containers:
  19. - name: nginx
  20. image: nginx
  21. [root@clientvm ~]# kubectl apply -f DS.yaml
  22. daemonset.apps/nginx created
  23. [root@clientvm ~]# kubectl get pod -n mytest -o wide
  24. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  25. nginx-4jspl 1/1 Running 0 50s 10.244.1.25 worker1.example.com <none> <none>
  26. nginx-l965c 1/1 Running 0 50s 10.244.2.35 worker2.example.com <none> <none>
  27. [root@clientvm ~]# kubectl get daemonsets.apps -n mytest
  28. NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
  29. nginx 2 2 2 2 2 <none> 103s
  30. ## 测试删除Pod
  31. [root@clientvm ~]# kubectl delete pod -n mytest nginx-4jspl
  32. pod "nginx-4jspl" deleted
  33. [root@clientvm ~]# kubectl get pod -n mytest
  34. NAME READY STATUS RESTARTS AGE
  35. nginx-hgjtj 0/1 ContainerCreating 0 6s
  36. nginx-l965c 1/1 Running 0 2m57s