DaemonSet

DaemonSet是Kubernetes中的一种控制器,确保每个节点或特定节点上都运行一个Pod副本,常用于系统级任务,如日志收集、监控代理等。通过示例展示了如何配置DaemonSet来部署fluentd-elasticsearch,用于日志收集,并包含了容忍度设置以允许在控制平面节点上运行。

概念

DaemonSet用于在集群中的全部节点上同时运行一份指定的Pod资源副本,后续新加入集群的工作节点也会自动创建一个相关的Pod对象,当从集群移除节点时,此类Pod对象也将被自动回收而无须重建。管理员也可以使用节点选择器及节点标签指定仅在部分具有特定特征的节点上运行指定的Pod对象。

DaemonSet是一种特殊的控制器,它有特定的应用场景,通常运行那些执行系统级操作任务的应用,其应用场景具体如下。
□运行集群存储的守护进程,如在各个节点上运行glusterd或ceph。
□在各个节点上运行日志收集守护进程,如fluentd和logstash。
□在各个节点上运行监控系统的代理守护进程,如Prometheus Node Exporter、collectd、Datadog agent、New Relic agent或Ganglia gmond等。

当然,既然是需要运行于集群内的每个节点或部分节点,于是很多场景中也可以把应用直接运行为工作节点上的系统级守护进程,不过,这样一来就失去了运用Kubernetes管理所带来的便捷性。另外,也只有必须将Pod对象运行于固定的几个节点并且需要先于其他Pod启动时,才有必要使用DaemonSet控制器,否则就应该使用Deployment控制器。

DaemonSet控制器

DaemonSet

实践

k create ns baipx
vi ds.yaml
k apply -f ds.yaml
kb get ds
kb get pod

DaemonSet

在这里插入图片描述

在这里插入图片描述

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: fluentd-elasticsearch

  namespace: baipx

  labels:

    k8s-app: fluentd-logging

spec:

  selector:

    matchLabels:

      name: fluentd-elasticsearch

  template:

    metadata:

      labels:

        name: fluentd-elasticsearch

    spec:

      tolerations:

      # 这些容忍度设置是为了让该守护进程集在控制平面节点上运行

      # 如果你不希望自己的控制平面节点运行 Pod,可以删除它们

      - key: node-role.kubernetes.io/control-plane

        operator: Exists

        effect: NoSchedule

      - key: node-role.kubernetes.io/master

        operator: Exists

        effect: NoSchedule

      containers:

      - name: fluentd-elasticsearch

        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2

        resources:

          limits:

            memory: 200Mi

          requests:

            cpu: 100m

            memory: 200Mi

        volumeMounts:

        - name: varlog

          mountPath: /var/log

        - name: varlibdockercontainers

          mountPath: /var/lib/docker/containers

          readOnly: true

      terminationGracePeriodSeconds: 30

      volumes:

      - name: varlog

        hostPath:

          path: /var/log

      - name: varlibdockercontainers

        hostPath:

          path: /var/lib/docker/containers
Kubernetes 中的 DaemonSet 是一种控制器(Controller),它的主要作用是确保所有(或某些)节点上都运行一个指定的 Pod 副本。与 Deployment 或 ReplicaSet 不同,DaemonSet 并不控制副本数量,而是根据节点数量自动调整 Pod 的分布[^1]。 当集群中新增节点时,DaemonSet 会自动在该节点上调度一个 Pod;当节点被移除时,对应的 Pod 也会被清理。这种机制非常适合需要在每个节点上运行的系统级任务,例如日志收集、监控代理、网络插件等。 DaemonSet 的典型应用场景包括: - **节点监控**:例如 Prometheus Node Exporter 可以通过 DaemonSet 在每个节点上运行,采集主机级别的性能指标[^1]。 - **日志收集**:例如 Fluentd 或 Filebeat 通常以 DaemonSet 形式部署,用于收集节点上的容器日志并发送到中心存储系统[^1]。 - **网络插件**:例如 Calico、Flannel 等 CNI 插件通常使用 DaemonSet 来在每个节点上运行网络管理组件[^1]。 - **安全扫描与合规检查**:例如定期在每个节点上运行安全检查工具,确保节点符合安全策略。 DaemonSet 支持节点选择器(`nodeSelector`)和污点容忍度(Tolerations),可以控制其调度到哪些节点上运行。例如,可以配置 DaemonSet 仅在具有特定标签的节点上部署 Pod。 以下是一个 DaemonSet 的 YAML 示例: ```yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: containers: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: memory: "200Mi" requests: cpu: "100m" memory: "200Mi" volumeMounts: - name: varlog mountPath: /var/log volumes: - name: varlog hostPath: path: /var/log ``` 上述示例定义了一个名为 `fluentd-elasticsearch` 的 DaemonSet,它会在每个节点上运行一个日志收集容器,并挂载宿主机的 `/var/log` 目录以访问日志文件。 DaemonSet 的更新策略支持 `OnDelete` 和 `RollingUpdate` 两种方式: - **OnDelete**:仅当手动删除旧的 Pod 后,才会创建新的 Pod。 - **RollingUpdate**:支持滚动更新,逐步替换旧 Pod,适用于 Kubernetes 1.6 及以上版本。 DaemonSetKubernetes 中实现节点级服务自动化部署的重要手段,适用于需要与节点强绑定的场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值