【云原生篇】K8S之DaemonSet 详解

Kubernetes 的 DaemonSet 是一种特殊的工作负载控制器,它确保所有(或某些特定的)节点上都运行一个 Pod 的副本。当有新节点加入集群时,DaemonSet 会自动在新节点上添加相应的 Pod,当节点从集群中移除时,这些 Pod 也会被垃圾回收。DaemonSet 通常用于运行集群范围内的关键服务,例如日志收集器、监控代理或其他守护进程。

核心特性

  • 自动部署:DaemonSet 确保指定的所有节点自动启动其管理的 Pod 副本。
  • 自动扩展:当集群中添加新节点时,DaemonSet 会自动在新节点上启动 Pod 副本。
  • 集群范围的服务:适用于需要在集群中每个节点上运行的服务,如日志收集和监控。

工作原理

  1. 定义 DaemonSet:通过 YAML 文件定义 DaemonSet,指定要运行的容器镜像及其配置。
  2. 创建 DaemonSet:使用 kubectl apply -f daemonset.yaml 命令创建 DaemonSet。Kubernetes 的 API 服务器接收到请求后,DaemonSet 控制器接管并开始部署 Pod。
  3. 调度 Pod:DaemonSet 控制器会为集群中的每个节点调度一个 Pod,除非节点被标记为不可调度(taint)且 Pod 没有相应的容忍(toleration)。
  4. 监控节点变化:DaemonSet 控制器会监听节点的添加和移除事件。当新节点加入时,控制器会在该节点上创建一个新的 Pod 副本;当节点被移除时,Pod 也会被删除。
  5. 管理 Pod 生命周期:DaemonSet 确保其管理的 Pod 始终运行。如果某个 Pod 失败或被删除,DaemonSet 会替换它,以保持在每个节点上都有一个运行的 Pod 副本。

更新策略

DaemonSet 支持两种更新策略:

  • RollingUpdate(默认策略):当 DaemonSet 更新时,旧版本的 Pod 会逐渐被新版本替换,类似于 Deployment 的更新方式。这种策略可以最小化服务中断。
  • OnDelete:当 DaemonSet 的 Pod 模板更新时,新 Pod 只有在手动删除旧 Pod 后才会创建。这允许管理员手动控制更新过程。

使用场景

  • 日志收集:在每个节点上运行日志收集代理(如 Fluentd 或 Logstash),以收集和转发容器日志。
  • 监控:部署如 Prometheus Node Exporter 或 Datadog Agent 等监控代理,以收集节点和容器的性能指标。
  • 网络插件:运行网络插件相关的 Pod,如 Calico 或 Weave Net 节点代理,以管理节点间的网络通信。
  • 存储:部署特定的存储守护进程,如 Ceph、GlusterFS 或 NFS 客户端,以支持分布式存储系统。

示例

以下是一个 DaemonSet 的定义示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-logging
  template:
    metadata:
      labels:
        name: fluentd-logging
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd:v1.11-1
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

这个 DaemonSet 定义了一个 Fluentd 日志收集器,它会被自动部署到集群中的每个节点上。DaemonSet 使用 hostPath 卷将节点上的日志目录挂载到 Pod 中,以便 Fluentd 可以访问并处理这些日志。

DaemonSet 是 Kubernetes 中的一种重要资源类型,非常适合于需要在集群中每个节点上运行的应用场景,提高了服务的可靠性和效率。

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林木森^~^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值