【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析
    • 引言
    • DaemonSet介绍
    • DaemonSet原理
      • 定义对象
      • 调度Pod
      • 监控Pod
      • 更新Pod
      • 节点选择
    • DaemonSet用法
      • 创建DaemonSet
      • 更新DaemonSet
      • 删除DaemonSet
    • 实战应用案例分析
      • 部署日志收集组件Fluentd
      • 实战效果
      • DaemonSet的高级特性
        • 容忍度(Tolerations)
        • 亲和性(Affinity)
      • 实战应用案例分析:部署监控代理Node Exporter
        • 部署步骤
        • 实战效果
      • 注意事项
    • 总结

Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

引言

Kubernetes(简称K8s)作为容器编排的领导者,提供了多种工作负载控制器来管理集群中的Pod。其中,DaemonSet是一种特殊的控制器,它确保在集群的每个节点(或指定的节点)上运行一个Pod的副本。这种特性使得DaemonSet非常适合部署集群级别的守护进程或服务,如日志收集器、监控代理等。本文将详细介绍DaemonSet的介绍、原理、用法以及实战应用案例分析。

DaemonSet介绍

DaemonSet是Kubernetes中的一种控制器对象,其主要目的是在集群的每个节点上运行一个Pod的副本。与Deployment和StatefulSet不同,DaemonSet主要用于部署那些需要在每个节点上运行的守护进程或服务。这种特性使得DaemonSet成为部署集群级服务的理想选择。

DaemonSet原理

定义对象

用户通过定义一个DaemonSet对象来指定Pod模板和其他配置选项。Pod模板定义了Pod的规格,包括容器、存储和网络配置。

调度Pod

当DaemonSet控制器接收到创建请求时,它会在每个匹配的节点上创建一个Pod实例。如果节点标签选择器被指定,DaemonSet则只会在满足条件的节点上创建Pod。

监控Pod

DaemonSet控制器会持续监控Pod的状态,确保每个节点上都有Pod实例在运行。如果节点失败或重启,DaemonSet会自动在该节点上重新创建Pod实例,以保证服务的连续性。

更新Pod

当用户更新Pod模板时,DaemonSet控制器会负责在所有节点上滚动更新Pod实例,以应用新的配置。DaemonSet支持RollingUpdate和OnDelete两种更新策略,但通常建议使用OnDelete模式以避免频繁更新。

节点选择

DaemonSet允许用户通过节点标签选择器(nodeSelector)和亲和性调度规则(affinity)来指定Pod运行的节点。这使得用户可以根据节点属性灵活调度Pod。

DaemonSet用法

创建DaemonSet

创建DaemonSet通常通过编写YAML文件并使用kubectl apply -f daemonset.yaml命令来完成。YAML文件中定义了DaemonSet的元数据、Pod模板、节点选择器等配置。

更新DaemonSet

更新DaemonSet可以通过修改YAML文件后重新应用,或者通过kubectl set image等命令直接更新Pod镜像。

删除DaemonSet

删除DaemonSet可以通过kubectl delete daemonset <name>命令完成,这将删除所有由该DaemonSet创建的Pod。

实战应用案例分析

部署日志收集组件Fluentd

Fluentd是一个流行的开源日志收集器,可以通过DaemonSet在Kubernetes集群的每个节点上部署。以下是一个Fluentd DaemonSet的示例配置:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd-loggingnamespace: kube-systemlabels:k8s-app: fluentd-logging
spec:selector:matchLabels:name: fluentd-loggingtemplate:metadata:labels:name: fluentd-loggingspec:tolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedulecontainers:- name: fluentd-elasticsearchimage: fluent/fluentd:v1.11-1resources:limits:memory: 200Mirequests:cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/log- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: truevolumes:- name: varloghostPath:path: /var/log- name: varlibdockercontainershostPath:path: /var/lib/docker/containers

实战效果

通过上述配置,Fluentd DaemonSet将在Kubernetes集群的每个节点上自动部署Fluentd Pod。这些Pod将收集节点上的日志,并转发到指定的日志存储系统(如Elasticsearch)。这种方式极大地简化了日志收集系统的部署和管理,提高了系统的可靠性和效率。

当然,我们可以继续深入探讨DaemonSet的更多细节和高级用法,以及在实际应用中的其他案例。

DaemonSet的高级特性

容忍度(Tolerations)

在前面的Fluentd DaemonSet示例中,我们提到了容忍度(Tolerations)的配置。容忍度允许Pod在具有污点(Taints)的节点上运行。污点是节点上的一个标签,用来表示该节点有某种问题(如专用节点、维护模式等),只有配置了相应容忍度的Pod才能在该节点上运行。通过配置容忍度,DaemonSet可以确保即使在有污点的节点上也能运行必要的守护进程。

亲和性(Affinity)

除了节点选择器外,DaemonSet还可以使用亲和性规则来更精细地控制Pod的调度。亲和性允许用户根据节点的标签、Pod的标签或其他属性来定义Pod的调度偏好。这可以用来确保DaemonSet的Pod尽可能靠近某些特定的节点或远离某些节点,以满足特定的业务需求或优化资源使用。

实战应用案例分析:部署监控代理Node Exporter

Node Exporter是一个基于Prometheus的监控代理,它可以收集主机级别的指标,如CPU、内存、磁盘和网络使用情况。通过将Node Exporter部署为DaemonSet,可以确保在集群的每个节点上都运行一个监控代理实例,从而实现对整个集群的实时监控。

部署步骤
  1. 编写DaemonSet YAML文件:定义Node Exporter Pod的模板,包括容器镜像、资源限制、存储卷和容忍度等配置。

  2. 应用DaemonSet:使用kubectl apply -f daemonset.yaml命令将DaemonSet部署到集群中。

  3. 验证部署:通过kubectl get pods --namespace=<namespace>命令检查Node Exporter Pod是否在每个节点上成功创建。

  4. 配置Prometheus:在Prometheus配置文件中添加Node Exporter作为数据源,以便Prometheus能够收集并展示集群的监控数据。

实战效果

部署完成后,Prometheus将能够实时收集集群中每个节点的性能指标,并通过其Web界面或Grafana等可视化工具展示出来。这有助于运维人员及时发现并解决潜在的性能问题,确保集群的稳定运行。

注意事项

  • 资源限制:在为DaemonSet中的Pod设置资源限制时,要考虑到节点上可能同时运行的其他Pod和服务,以避免资源竞争导致的问题。
  • 安全性:确保DaemonSet中运行的容器具有适当的安全配置,如使用最小权限原则、配置只读存储卷等。
  • 更新策略:在更新DaemonSet时,要谨慎选择更新策略,以避免在更新过程中影响服务的连续性。
  • 监控与日志:为DaemonSet中的Pod配置适当的监控和日志收集机制,以便在出现问题时能够快速定位和解决。

总结

DaemonSet是Kubernetes中一个非常有用的控制器,它能够在集群的每个节点上自动部署和管理Pod,非常适合部署集群级别的守护进程或服务。通过灵活的配置和调度策略,DaemonSet能够确保服务的连续性和可靠性,提高集群的整体效能。在实际应用中,DaemonSet可以用于部署日志收集器、监控代理等多种类型的守护进程,为Kubernetes集群的运维和管理提供有力支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】填充每个节点的下一个右侧节点指针 II

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树&#xff1a; struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NUL…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

Mindspore框架循环神经网络RNN模型实现情感分类|(二)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;RNN模型构建 Mindspore框架循环神经网络RNN模型实现情…

实测!高性能PCIe 5.0 SSD为AI训练贡献了啥?

如今&#xff0c;AI 的火热程度已经不需要解释。算力、算法、数据&#xff0c;构成驱动 AI 技术快速发展的三驾马车&#xff1a; 算力越强&#xff0c;越能够处理更加复杂的训练模型&#xff0c;并加速训练进程&#xff1b;算法越先进&#xff0c;越能高效的从数据中学习并优化…

element-plus的el-table自定义表头筛选查询

文章目录 一、效果二、代码1.代码可直接复制使用 三、问题1.使用el-popover完成筛选框 一、效果 二、代码 1.代码可直接复制使用 <template><div class"page-view" click"handleClickOutside"><el-button click"resetFilters"&…

云服务器2核2G配置可以干嘛?2C2G用来做什么合适?

最便宜的服务器2核2G配置可以做什么&#xff1f;可用来搭建Web网站服务器、小程序服务器、APP后端服务器、图床、开发测试环境、小型电子商务网站及文件存储等使用场景。服务器百科网fwqbk.com举例说明&#xff1a; 搭建个人博客&#xff1a;使用开源WordPress等博客程序系统&…

git使用、git与idea结合、gitee、gitlab

本文章基于黑马程序javase模块中的"git"部分 先言:git在集成idea中,不同版本的idea中页面显示不同,操作时更注重基于选项的文字;git基于命令操作参考文档实现即可,idea工具继承使用重点掌握 1.git概述 git是目前世界上最先进的分布式文件版本控制系统 分布式:将…

照片怎么改大小kb?分享5个改小图片的工具

夏日炎炎&#xff0c;正是出游拍照的大好时节&#xff0c;然而随之而来的问题也让人头疼——手机里的美照越来越多&#xff0c;存储空间却越来越紧张。 不仅如此&#xff0c;上传至社交媒体时&#xff0c;大尺寸的照片常常让加载速度慢如蜗牛&#xff0c;影响了分享的乐趣。 …

[Spring Boot]Protobuf解析MQTT消息体

简述 本文主要针对在MQTT场景下&#xff0c;使用Protobuf协议解析MQTT的消息体 Protobuf下载 官方下载 https://github.com/protocolbuffers/protobuf/releases网盘下载 链接&#xff1a;https://pan.baidu.com/s/1Uz7CZuOSwa8VCDl-6r2xzw?pwdanan 提取码&#xff1a;an…

【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

&#x1f4e2;博客主页&#xff1a;肩匣与橘 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也…

mysql + Oracle

eg627. 变更性别 Salary 表&#xff1a; ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int | ----------------------- id 是这个表…

小程序-4(自定义组件:数据、属性、数据监听器、生命周期函数、插槽、父子通信、behaviors)

目录 1.组件的创建和引用 局部引用组件 全局引用组件 组件和页面的区别 组件样式隔离 ​编辑 组件样式隔离的注意点 修改组件的样式隔离选项 data数据 methods方法 properties属性 data和properties属性的区别 使用setData修改properties的值 2.数据监听器 什么…

昇思25天学习打卡营第19天|MindNLP ChatGLM-6B StreamChat

文章目录 昇思MindSpore应用实践ChatGML-6B简介基于MindNLP的ChatGLM-6B StreamChat Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 ChatGML-6B简介 ChatGLM-6B 是由清华大学和智谱AI联合研发的产品&#xff0c;是一个开源的、支持…

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…

IO多路复用-poll的使用详解【C语言】

1.什么是poll poll 是一种用于监控多个文件描述符状态的系统调用&#xff0c;它可以等待多个文件描述符上的事件发生。它与 select 和 epoll 类似&#xff0c;但在某些场景下使用更为方便。 poll的机制与select类似&#xff0c;与select在本质上没有多大差别&#xff0c;使用…

xinput1-3.dll文件丢失找不到的修复方法

在电脑使用过程中&#xff0c;遇到“xinput1-3.dll丢失”或“找不到xinput1-3.dll”这类错误提示&#xff0c;可能会导致某些游戏或应用程序无法正常运行。以下是修复步骤&#xff0c;帮助您快速找回缺失的dll文件。 一、xinput1-3.dll的作用 xinput1-3.dll是Microsoft Direct…

Android APP 基于RecyclerView框架工程(知识体系积累)

说明&#xff1a;这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来&#xff08;比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多&#xff0c;工程量的增加&#xff0c;后期想高效的分析和查找并不容易&#xff09;&#xf…

1.Fabric框架

要了解Fabric&#xff0c;首先要知道Hyperledger开源项目。 2015年12月&#xff0c;由开源世界的旗舰组织Linux基金会牵头&#xff0c;30家初始企业成员共同宣布Hyperledger联合项目成立。Hyperledger 超级账本&#xff0c;是首个面向企业应用场景的分布式账本平台&#xff0c…

【每日一练】python编写一个简易计算器

程序代码: #循环语句&#xff0c;条件为真所以循环执行 while True: #定义两个数的变量和运算符号 num1 float(input("第一个数:")) num2 float(input("第一个数:")) syminput("选择运算符 - * /&#xff1a;") #判断运算符号 …

Camera Raw:评级和标签

在 Camera Raw 中&#xff0c;评级 Rating和标签 Label功能为摄影师和图像编辑者提供了一种高效的图像组织和管理方法。通过这些功能&#xff0c;用户可以轻松地对照片进行分类、标记和筛选&#xff0c;以便在大量图像中快速找到需要的照片。 ◆ ◆ ◆ 设置星级 Set Rating 星…