k8s中控制器DaemonSet简介及用法

立山  金牌会员 | 2024-7-12 11:25:03 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 580|帖子 580|积分 1740

一、简介
在 Kubernetes 中,DaemonSet 是一种控制器范例,用于确保集群中的每个节点运行一个特定的 Pod 实例。通常环境下,DaemonSet 被用来在集群的每个节点上运行一个特定的系统服务大概应用步伐副本,例如日志收集器(如 Fluentd 或 Filebeat)、监控署理(如 Prometheus Node Exporter)、存储办理方案(如 Ceph 的 OSD 部署)等。
二、主要用途
确保每个节点上运行相同的 Pod 实例:
DaemonSet 确保在集群的每个节点上都有一个 Pod 的副本在运行,从而保证了特定使命或服务在整个集群中的广泛性。
   1.节点级别的使命部署:
可以用来在每个节点上运行具有特定设置的使命,例如日志收集、监控等使命,这些使命通常需要与节点自己密切关联。
2.服务发现和负载平衡:
在某些环境下,DaemonSet 可以用于运行网络服务或负载平衡器的实例,以便每个节点都可以直接处理惩罚来自外部的流量。
3.更新和升级:
DaemonSet 也支持更新和升级,可以通过更改 Pod 模板或镜像来进行滚动更新,确保新的设置或版本可以安全地应用到每个节点。
DaemonSet 的主要作用,是让你在 k8s 集群里,运行一个 Daemon Pod。
  这个 Pod 有如下三个特性:
   

  • 这个 Pod 运行在 k8s 集群里的每一个节点(Node)上;
  • 每个节点上只有一个如许的 Pod 实例;
  • 当有新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来;而当旧节点被删除后,它上面的 Pod 也相应地会被回收掉。
  举例:
   各种网络插件的 Agent 组件,都必须运行在每一个节点上,用来处理惩罚这个节点上的容器网络;
  各种存储插件的 Agent 组件,也必须运行在每一个节点上,用来在这个节点上挂载远程存储目次,操作容器的 Volume 目次;
  各种监控组件和日志组件,也必须运行在每一个节点上,负责这个节点上的监控信息和日志搜集。
  三、示例
以下是一个简化的 DaemonSet 示例 YAML 文件,用于在每个节点上运行一个日志收集器:
  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4.   name: fluentd
  5.   namespace: kube-system
  6. spec:
  7.   selector:
  8.     matchLabels:
  9.       app: fluentd
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: fluentd
  14.     spec:
  15.       containers:
  16.       - name: fluentd
  17.         image: fluentd:v1.0.0
  18.         volumeMounts:
  19.         - name: varlog
  20.           mountPath: /var/log
  21.         - name: varlibdockercontainers
  22.           mountPath: /var/lib/docker/containers
  23.           readOnly: true
  24.       volumes:
  25.       - name: varlog
  26.         hostPath:
  27.           path: /var/log
  28.       - name: varlibdockercontainers
  29.         hostPath:
  30.           path: /var/lib/docker/containers
复制代码
表明


  • metadata.name: DaemonSet 的名称为 fluentd。
  • spec.selector.matchLabels: 选择器用于选择要管理的 Pod,这里选择 app: fluentd 标签的 Pod。
  • spec.template: 定义要创建的 Pod 的模板。
  • spec.template.spec.containers: 定义 Pod 中运行的容器,这里是 fluentd 容器。
  • spec.template.spec.volumes: 定义 Pod 使用的卷,用于将宿主机的日志目次和 Docker 容器目次挂载到容器内部,以便收集日志。
创建 DaemonSet 对象

  1. kubectl create -f fluentd-elasticsearch.yaml
复制代码
检察 DaemonSet 对象

  1. [root@k8s-master set]# kubectl get ds -n kube-system fluentd-elasticsearch
  2. NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
  3. fluentd-elasticsearch   3         3         3       3            3           <none>          22m
复制代码
注:k8s 里比力长的 API 对象都有短名字,比如 DaemonSet 对应的是 ds,Deployment 对应的是 deploy。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表