🚀 Kubernetes所有节点的管理员: DaemonSet指南


📋 目录

  1. 什么是DaemonSet? 🤔
  2. 为什么要使用DaemonSet? 💡
  3. 实践: 创建DaemonSet 🛠️
  4. 也想部署到Control Plane吗? (Taint & Toleration) 🔐
  5. 总结与回顾 🏁

1. 什么是DaemonSet? 🤔

在Kubernetes中,DaemonSet(守护进程集)是一个控制器,它确保在所有(或特定)节点上维护恰好一个Pod

如果说普通的Deployment是根据节点的空闲资源进行适当分散部署的方式,那么DaemonSet可以看作是一个“当新节点添加时,自动在该节点上运行Pod”的忠诚管理员。


2. 为什么要使用DaemonSet? 💡

什么时候需要在所有节点上运行相同的服务呢? 主要与系统运维相关的任务。

  • 日志收集: 收集每个节点日志的fluentd或logstash。
  • 监控: 监控节点状态的Prometheus Node Exporter。
  • 网络配置: 配置集群网络的kube-proxy或Calico等CNI插件。

3. 实践: 创建DaemonSet 🛠️

让我们看看最基本的DaemonSet YAML文件。这个例子是一个在所有节点上运行的简单nginx守护进程集。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
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

应用此文件后,每个普通的Worker Node上都会创建一个Pod。但是,会出现一个问题。那就是在Control Plane(Master Node)上不会创建Pod。


4. 也想部署到Control Plane吗? (Taint & Toleration) 🔐

Kubernetes的Master节点(Control Plane)是一个非常重要的地方。因此,它默认配置了Taint(污点),“禁止”普通Pod进入。

① 检查Master节点的Taint

首先,让我们检查Master节点上有什么“污点”。

kubectl describe node <마스터-노드-이름> | grep Taints

通常会得到如下结果:Taints: node-role.kubernetes.io/control-plane:NoSchedule

这意味着“此节点是control-plane角色,因此不要调度未经许可的Pod (NoSchedule)。”

② 配置Toleration(容忍)

要让DaemonSet也能在Master节点上运行,您需要在Pod配置中添加能够承受此“污点(Taint)”的“容忍(Toleration)”

请查看修改后的YAML的spec部分。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
spec:
  # ... (省略)
  template:
    spec:
      # 这是关键!
      tolerations:
      - 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
  • key: 在Master节点上确认的Taint的键值。
  • operator: Exists表示只要该键存在即可。
  • effect: 允许在NoSchedule状态下也忽略并进入。

这样设置后,DaemonSet不仅可以在普通节点上运行,也可以在Control Plane节点上堂堂正正地运行了。


5. 总结与回顾 🏁

DaemonSet是负责整个集群维护和运营的核心组件。

  1. DaemonSet确保每个节点有1个Pod。
  2. 节点增加时自动扩展。
  3. 要部署到Control Plane,必须检查该节点的Taint,并配置相应的Toleration

现在,您可以在集群的每个角落部署所需的服务了! 🚀


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注