Kubernetes DaemonSet 基础实践指南

Kubernetes DaemonSet 基础实践指南

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

概述

本文将详细介绍如何在 Kubernetes 集群中使用 DaemonSet 控制器,确保每个节点上都运行一个特定的 Pod 实例。我们将通过一个实际案例,展示如何创建基础 DaemonSet,并解释其核心组件的工作原理。

什么是 DaemonSet?

DaemonSet 是 Kubernetes 中的一种工作负载控制器,它确保集群中所有(或部分)节点上都运行一个 Pod 副本。当有新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod;当节点从集群中移除时,对应的 Pod 也会被垃圾回收。

典型使用场景包括:

  • 集群存储守护进程(如 glusterd、ceph)
  • 日志收集守护进程(如 fluentd、logstash)
  • 节点监控守护进程(如 Prometheus Node Exporter)

实践准备

在开始之前,请确保您已具备以下条件:

  1. 一个可用的 Kubernetes 集群
  2. 集群中至少有两个节点(一个控制平面节点和一个工作节点)
  3. 已配置 kubectl 命令行工具并能够与集群通信

创建基础 DaemonSet

我们将创建一个简单的 DaemonSet,它会在每个节点上运行一个 Pod,该 Pod 包含以下组件:

  1. init 容器:在 Pod 启动前执行,用于读取节点的 /etc/machine-id 文件内容并记录到日志
  2. 主容器:使用 pause 容器保持 Pod 运行
  3. hostPath 卷:将节点的 /etc/machine-id 文件挂载到 Pod 中

以下是完整的 YAML 清单文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      name: example-daemonset
  template:
    metadata:
      labels:
        name: example-daemonset
    spec:
      initContainers:
      - name: init-log-machine-id
        image: busybox
        command: ["sh", "-c", "cat /etc/machine-id > /var/log/machine-id.log"]
        volumeMounts:
        - name: etc-machine-id
          mountPath: /etc/machine-id
          readOnly: true
        - name: log-dir
          mountPath: /var/log
      containers:
      - name: pause
        image: k8s.gcr.io/pause
      volumes:
      - name: etc-machine-id
        hostPath:
          path: /etc/machine-id
      - name: log-dir
        hostPath:
          path: /var/log

部署与验证

  1. 应用 DaemonSet 配置:
kubectl apply -f basic-daemonset.yaml
  1. 检查 DaemonSet 状态:
kubectl get daemonsets
  1. 查看 Pod 分布情况(每个节点应有一个 Pod):
kubectl get pods -o wide
  1. 检查 init 容器记录的日志内容:
kubectl exec <pod-name> -- cat /var/log/machine-id.log

关键组件解析

  1. init 容器

    • 在 Pod 的主容器启动前运行
    • 本例中用于读取主机文件并记录日志
    • 必须成功完成才能启动主容器
  2. hostPath 卷

    • 将节点文件系统挂载到 Pod 中
    • 本例中挂载了 /etc/machine-id(节点唯一标识文件)
    • 需要谨慎使用,可能带来安全风险
  3. pause 容器

    • 轻量级容器,仅保持 Pod 运行
    • 作为 Pod 的基础容器,维持命名空间

清理资源

完成实验后,删除 DaemonSet:

kubectl delete daemonset example-daemonset

进阶学习建议

掌握了基础 DaemonSet 后,您可以进一步探索:

  1. 滚动更新策略:学习如何安全地更新 DaemonSet 中的 Pod
  2. 节点选择器:控制 DaemonSet 在特定节点上运行
  3. 资源限制:为 DaemonSet Pod 设置资源请求和限制
  4. 污点和容忍度:在带有污点的节点上运行 DaemonSet Pod

通过本文的实践,您应该已经理解了 DaemonSet 的基本概念和使用方法。DaemonSet 是 Kubernetes 中管理节点级别工作负载的强大工具,合理使用可以简化集群管理任务。

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卓艾滢Kingsley

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

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

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

打赏作者

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

抵扣说明:

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

余额充值