Kubernetes DaemonSet:DevOps-Roadmap节点级服务部署全指南

Kubernetes DaemonSet:DevOps-Roadmap节点级服务部署全指南

【免费下载链接】DevOps-Roadmap DevOps-Roadmap: 是一个关于 DevOps 工程师职业发展和技能提升的路线图。适合 DevOps 工程师和初学者了解 DevOps 行业趋势,学习相关知识和技能。 【免费下载链接】DevOps-Roadmap 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Roadmap

一、节点级部署的痛点与解决方案

你是否遇到过这些场景:需要在每台Kubernetes节点上部署日志收集器却手动操作数十台机器?新加入集群的节点无法自动获得监控代理导致监控盲点?安全策略更新后必须逐个节点重启网络插件?Kubernetes DaemonSet正是为解决这类节点级服务部署难题而生的核心控制器。

本文将系统讲解:

  • DaemonSet的工作原理与应用场景
  • 与Deployment/StatefulSet的核心差异
  • 3种实用部署模式(基础/滚动更新/资源限制)
  • 监控与日志场景的最佳实践
  • 结合DevOps-Roadmap项目的实战案例

二、DaemonSet核心原理与架构

2.1 工作机制图解

mermaid

2.2 与其他控制器的关键差异

特性DaemonSetDeploymentStatefulSet
部署目标每个节点1个Pod集群内随机分布固定标识的有序部署
调度控制节点亲和性+容忍污点完全由Scheduler控制固定标识+Headless Service
更新策略OnDelete/RollingUpdateRollingUpdate/RecreateRollingUpdate/OnDelete/Partition
典型应用监控代理、网络插件、日志收集无状态应用、API服务分布式数据库、ZK集群

2.3 节点选择机制

DaemonSet通过节点亲和性(NodeAffinity)污点容忍(Toleration) 实现精准部署:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/os
          operator: In
          values:
          - linux
tolerations:
- key: node-role.kubernetes.io/master
  effect: NoSchedule

三、三种实用部署模式

3.1 基础部署模板(监控代理场景)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      name: node-exporter
  template:
    metadata:
      labels:
        name: node-exporter
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      containers:
      - name: node-exporter
        image: prom/node-exporter:v1.5.0
        ports:
        - containerPort: 9100
          hostPort: 9100
          name: http
        volumeMounts:
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: rootfs
          mountPath: /rootfs
          readOnly: true
      volumes:
      - name: proc
        hostPath:
          path: /proc
      - name: sys
        hostPath:
          path: /sys
      - name: rootfs
        hostPath:
          path: /

3.2 滚动更新策略配置

spec:
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 0        # 禁止同时创建多个Pod
      maxUnavailable: 1  # 每次更新1个节点
  minReadySeconds: 5    # 就绪检查等待时间
  revisionHistoryLimit: 3  # 保留历史版本数量

3.3 资源限制与安全上下文

containers:
- name: fluentd-elasticsearch
  image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
  resources:
    limits:
      cpu: 500m
      memory: 512Mi
    requests:
      cpu: 100m
      memory: 200Mi
  securityContext:
    runAsUser: 0
    privileged: true
  volumeMounts:
  - name: varlog
    mountPath: /var/log
volumes:
- name: varlog
  hostPath:
    path: /var/log

四、DevOps-Roadmap项目实战案例

4.1 基于DaemonSet的节点监控方案

结合项目中的Prometheus监控栈,通过DaemonSet部署node-exporter:

# 对应项目prometheus/prometheus.yml中的scrape_configs
scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['localhost:9100']  # 由DaemonSet保证每个节点都有实例

4.2 日志收集架构实现

mermaid

4.3 Docker Compose到K8s的迁移对比

原项目docker-compose.yml中的节点服务:

# 项目中的docker-compose.yml片段
services:
  node-exporter:
    image: prom/node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    network_mode: host

迁移为DaemonSet的核心改进:

  • 自动适应集群扩缩容
  • 内置健康检查与自动恢复
  • 支持滚动更新与版本回滚
  • 资源隔离与权限控制

五、高级应用与最佳实践

5.1 静态Pod与DaemonSet的取舍

特性DaemonSet静态Pod
创建方式通过API Server节点本地文件
生命周期管理Kubernetes控制节点kubelet控制
自愈能力支持有限
滚动更新支持不支持
适用场景常规节点服务核心组件(kube-proxy等)

5.2 资源分配策略

# 针对不同节点类型的资源配置
affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      preference:
        matchExpressions:
        - key: node-role.kubernetes.io/worker
          operator: Exists
  tolerations:
  - key: resource-intensive
    operator: Exists
    effect: NoSchedule

5.3 故障排查工具

# 查看DaemonSet状态
kubectl get ds -n monitoring

# 检查未调度原因
kubectl describe ds/node-exporter -n monitoring

# 查看特定节点的Pod
kubectl get pods -n monitoring -o wide --field-selector spec.nodeName=node-1

# 查看事件日志
kubectl events --field-selector involvedObject.kind=DaemonSet,involvedObject.name=node-exporter

六、总结与进阶路线

DaemonSet作为Kubernetes节点级部署的核心方案,在DevOps实践中扮演着不可或缺的角色。掌握它能显著提升集群运维效率,尤其适合:

  • 基础设施监控(node-exporter、cadvisor)
  • 网络插件(calico、flannel)
  • 日志收集(fluentd、logstash)
  • 安全代理(falco、tracee)

进阶学习路径:

  1. DaemonSet与Pod拓扑分布约束结合使用
  2. 动态准入控制实现高级调度逻辑
  3. 结合Prometheus实现DaemonSet监控告警
  4. 利用Operator模式管理DaemonSet生命周期

建议结合DevOps-Roadmap项目中的监控组件(prometheus/grafana目录)进行实操,通过修改prometheus.yml添加更多监控指标,深入理解节点级服务的部署与运维。


收藏本文,关注DevOps-Roadmap项目获取更多Kubernetes实战指南,下期将推出《StatefulSet有状态应用部署完全手册》。

【免费下载链接】DevOps-Roadmap DevOps-Roadmap: 是一个关于 DevOps 工程师职业发展和技能提升的路线图。适合 DevOps 工程师和初学者了解 DevOps 行业趋势,学习相关知识和技能。 【免费下载链接】DevOps-Roadmap 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Roadmap

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值