【云原生】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.rhkb.cn/news/383460.html

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

相关文章

59、mysql存储过程

存储过程 一、存储过程&#xff1a; 1.1、存储过程的概念 概念&#xff1a;完成特定功能的sql语句的集合。把定义好的sql集合在一个特定的sql的函数当中 每次执行调用函数即可。还可以实现传参的调用。 1.2、存储过程的语法&#xff1a; delimiter $$ ##delimiter开始和结…

Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST

1. 新建 cmake 工程 vs2022_cmake_sampleOnnxMNIST_test( 如何新建 cmake 工程&#xff0c;请参考博客&#xff1a;Visual Studio 2022新建 cmake 工程测试 opencv helloworld ) 2. 删除默认生成的 vs2022_cmake_sampleOnnxMNIST_test.h 头文件 3. 修改默认生成的 vs2022_cma…

Docker简单快速入门

1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…

叮!2024 龙蜥操作系统大会议题征集正式启动

定啦&#xff01;2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&#xff0c;以下简称“龙蜥大会”&#xff09;将于 2024 年 8 月 30 日在北京中关村国家自主创新示范区会议中心盛大召开。 2024 龙蜥大会由中关村科学城管委会、海淀区委网信办、中国开源软件推进联…

Python从0到100(四十三):数据库与Django ORM 精讲

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Arduino学习笔记1——IDE安装与起步

一、IDE安装 去浏览器直接搜索Arduino官网&#xff0c;点击Software栏进入下载界面&#xff0c;选择Windows操作系统&#xff1a; 新版IDE下载不需要提前勾选所下载的拓展包&#xff0c;下载好后直接点击安装即可。 安装好后打开Arduino IDE&#xff0c;会自动开始下载所需的…

World of Warcraft [CLASSIC] Timebadge

游戏币【每个服务器实时金价不一样&#xff0c;本例子是5000-6000金】 1枚【魔兽世界时光徽章】 30天游戏时间。 5760金币游戏币&#xff0c;策划如何消耗游戏里面的金币总量&#xff0c;以及如何留住那些非人民币玩家呢 30天加上去了 World of Warcraft [CLASSIC] [魔兽世界…

怎么使用动态IP地址上网

如何设置动态IP地址上网&#xff1f; 设置动态IP地址上网的步骤如下&#xff1a; 一、了解动态IP地址 动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分配给用户的IP地址&#xff0c;它会根据用户的需求和网络情况实时改变。相比于静态IP地址&#xff0c;动态…

使用VuePress-Reco快速搭建博客(保姆级)

简介&#xff1a;VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题&#xff0c;可以自由搭建自己的风格&#xff0c;比较方便简洁。 链接&#xff1a;vuepress-reco 准备环境&#xff1a; Node.Js >20.5.0&#xff0c;Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

七、SpringBoot日志

1. 得到日志对象 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; //打印日志…

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多&#xff0c;所以一定是html包python最优&#xff01;于是引出今天的模板。 大体分为三个步骤&#xff1a;…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说&#xff0c;外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎&#xff1a;“这个网站的内容是有价值的&#xff0c;值得推荐。”因此&#xff0c;外链的数量和质量直接影响你的网站在搜索引擎中的排…

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母&#xff0c;需要的个数 (2)再创一个字典的方法统计&#xff0c;输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

vue3编程-import.meta.glob实现动态路由(菜单)

import.meta.glob 是vite提供的批量懒加载组件的方法 本地开发环境&#xff1a; const modules import.meta.glob(../views/**/*.vue)这段代码返回的modules是一个Map&#xff1a; key是vue文件的相对路径&#xff0c;值是一个函数&#xff0c;将函数打印出来&#xff0c;如…

Python鲁汶意外莱顿复杂图拓扑分解算法

&#x1f3af;要点 &#x1f3af;算法池化和最佳分区搜索&#xff1a;&#x1f58a;网格搜索 | &#x1f58a;发现算法池 | &#x1f58a;返回指定图的最佳划分 | &#x1f58a;返回指定图的最佳分区 | &#x1f3af;适应度和聚类比较功能&#xff1a;&#x1f58a;图的划分 |…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址&#xff0c;其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme&#xff1a;协议&#xff0c;常用的协议有 Http&#xff0c;https&#xff0c;ftp等等&#xff1b;usern…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中&#xff0c;随着面积的不断扩张和布局的日益复杂&#xff0c;传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室&#xff0c;不同的业务。这种低效的寻路过程不仅影响了客户的来访体验&#xff0c;也…

Flink时间和窗口

目录 时间语义 水位线&#xff08;Watermarks&#xff09; 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示&#xff0c;由事件生成器&#xff08;Event Pr…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid&#xff0c;使用中发现唯一建冲突&#xff0c;生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…