> 文档中心 > 服务守护进程:DaemonSet的使用

服务守护进程:DaemonSet的使用


DaemonSet又是什么?

DaemonSet是守护进程集,简写为ds;是在所有的节点或者匹配的节点上都部署一个Pod。

[root@k8s-master01 ~]# kubectl get nodesNAME    STATUS   ROLES    AGE   VERSIONk8s-master01   Ready    <none>   8d    v1.23.3k8s-master02   Ready    <none>   8d    v1.23.3k8s-master03   Ready    <none>   8d    v1.23.3k8s-node01     Ready    <none>   8d    v1.23.3k8s-node02     Ready    <none>   8d    v1.23.3

比如从上段代码中可以看到我们集群有五个节点,Daemon会在这五个节点都部署一个Pod;又或者我们只需要在node节点部署,那么可以利用标签的方式只在node节点上部署Pod。比如我们的calico网络插件就是用DaemonSet部署的。

DaemonSet 的使用场景:

  • 监控数据收集:需要每个节点上收集数据
  • 监控节点状态
  • 负责每个节点的网络、存储等组件,如calico、ceph等

DaemonSet的使用:

apiVersion: apps/v1kind: DaemonSetmetadata:  labels:    app: nginx  name: nginxspec:  revisionHistoryLimit: 10  selector:    matchLabels:      app: nginx  template:    metadata:      creationTimestamp: null      labels: app: nginx    spec:      containers:      - name: nginx image: nginx:1.18.0 imagePullPolicy: Always resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File      dnsPolicy: ClusterFirst      restartPolicy: Always      schedulerName: default-scheduler      securityContext: {}      terminationGracePeriodSeconds: 30

注意:没有副本数的参数

创建一个ds;然后查看可以看到每个节点上都生成了一个nginx副本。

[root@k8s-master01 ~]# kubectl create -f nginx-ds.yaml daemonset.apps/nginx created[root@k8s-master01 ~]# kubectl get pod -o wide NAME   READY   STATUS    RESTARTS  AGE    IP NODE    NOMINATED NODE   READINESS GATESbusybox1/1     Running   21 (2m45s ago)   8d     172.27.14.193    k8s-node02     <none>    <none>nginx-2c7xf   1/1     Running   0  2m2s   172.25.92.79     k8s-master02   <none>    <none>nginx-kjdx8   1/1     Running   0  2m2s   172.25.244.200   k8s-master01   <none>    <none>nginx-wwltz   1/1     Running   0  2m2s   172.27.14.199    k8s-node02     <none>    <none>nginx-zl2lr   1/1     Running   0  2m2s   172.18.195.19    k8s-master03   <none>    <none>nginx-znprg   1/1     Running   0  2m2s   172.17.125.7     k8s-node01     <none>    <none>

需要注意的地方:

  • restartPolicy字段默认是Always
  • Daemon Set没有副本数
  • 最大失败数需要写数字,建议1
  • 更新策略建议使用OnDelete,保留历史版本为1

其他地方与Deployment和StatefulSet类似,就不说了,可以看我另外两篇!