DaemonSet概念

发布时间 2023-03-26 16:02:50作者: 运维小勾勾

概念

在 Kubernetes 中,DaemonSet 是一种控制器对象,用于确保在每个节点上运行一个 Pod 副本。与 ReplicaSet 和 Deployment 不同,它们只负责在集群中的所有节点上创建 Pod 副本,而不考虑副本数量

DaemonSet对象通常被用于需要在每个节点上运行某个服务或应用程序时,比如日志收集、监控代理、网络插件等。使用 DaemonSet 可以确保每个节点都运行该服务或应用程序,并且可以自动在新加入集群的节点上启动相关的 Pod 副本
与其他控制器对象类似,DaemonSet 也支持滚动更新、回滚版本、扩展和缩小副本数量等操作,同时还可以通过 NodeSelector 和 NodeAffinity等特性来指定 DaemonSet 在哪些节点上运行。

注意:由于 DaemonSet 在每个节点上都会运行一个 Pod 副本,因此对于较大的集群,可能会导致资源消耗较大,需要谨慎使用和管理。同时,在使用 DaemonSet 时,需要考虑到节点之间的差异部署。

创建DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine

此时查看每个节点上都创建了一个daemonset(如果设置了污点则不会创建),若想每个pod创建2个daemonset只能再创建一个yaml

指定节点部署(给节点打标签)

参数:

  nodeSelector: 

首先给工作节点打上标签

kubectl label node k8s-node01 k8s-node02 my-label=daemonset

然后在yaml文件加上nodeSelector:参数,并指定标签

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        my-label: daemonset
      containers:
      - name: nginx
        image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine

更新回滚策略

DaemonSet也有 OnDelete 和 RollingUpdate 两种方式
DaemonSet 的更新和回滚与 Deployment 类似,请参考之前StatefulSet与deployment的wiki