【Kubernetes资源篇】DaemonSet控制器入门实战详解

news2024/11/15 21:45:27

文章目录

    • 一、DaemonSet控制器理论知识
      • 1、DaemonSet控制器是什么?
      • 2、DaemonSet控制器工作原理
      • 3、DaemonSet典型应用场景
      • 4、DaemonSet与Deployment的区别
    • 二、案例:DaemonSet控制器实战演示
      • 1、使用DaemonSet部署日志收集组件
      • 2、DaemonSet管理Pod滚动更新
    • 三、总结

一、DaemonSet控制器理论知识

中文官方文档参考:

1、DaemonSet控制器是什么?

Kubernetes中的DaemonSet(简写ds)控制器是一种用来运行守护进程应用程序的控制器,它确保每个Node节点都运行具有指定配置的 Pod副本,当Node节点的加入或删除DaemonSet控制器会自动创建或删除相应的 Pod副本。

特点:

  1. 每个节点只运行一个实例:DaemonSet确保每个节点上只运行一个 Pod 实例。这确保了在每个节点上部署的守护进程能够与主机紧密结合,以提供更高的可用性和可靠性。

  2. 滚动升级:在更新 DaemonSet 时,可以通过几种不同的方式控制滚动升级。可以选择一次更新所有 Pod 实例,也可以在运行新版本之前逐步删除旧的 Pod 实例。

  3. 在启动前执行任务:可以通过 DaemonSet 的

2、DaemonSet控制器工作原理

DaemonSet控制器会监听K8s的daemonset对象、pod对象、node对象,如果这些被监听的对象变动,就会触发syncLoop循环,让K8s集群朝着daemonset对象描述的状态进行演进。

3、DaemonSet典型应用场景

  • 日志和指标收集:在每个节点上运行日志和指标收集器,比如flunentd 、 logstash、filebeat等。

  • 数据存储:在每个节点上运行数据存储,比如glusterd 、ceph等。

  • 监控组件:在每个节点上运行监控组件,比如prometheus、node_exporter、collectd等。

4、DaemonSet与Deployment的区别

  • deployment创建出来的Pod,会分布在各个Node节点,每个节点都可能运行好几个副本。
  • daemonset创建出来的Pod,每个Node节点上最多只能运行一个Pod副本,通常用来运行后台服务和守护进程应用程序。

因此,一般情况下,如果要部署后台服务和守护进程等单节点应用程序,可以使用DaemonSet;如果需要部署复杂的应用程序,如Web服务等,那就需要使用deployment了。

二、案例:DaemonSet控制器实战演示

1、使用DaemonSet部署日志收集组件

部署 fluentd 日志收集组件(只简单演示DaemonSet使用,并非做ELK整体实验)YAML资源清单如下:

cat fluentd-daemonset.yaml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: elasticsearch-fluentd
  namespace: default
spec:
  selector:
    matchLabels:
      app: elasticsearch-fluentd
  template:
    metadata:
      labels:
        app: elasticsearch-fluentd
    spec:
      tolerations:              # 定义容忍度,运行在master节点运行(根据自己master的污点定义)
      - effect: NoSchedule  
        key: node-role.kubernetes.io/control-plane
      volumes:                 # 定义卷名称为 system-log
      - name: system-log
        hostPath: 
          path: /var/log
      containers:
      - name: elasticsearch-fluentd
        image: qinziteng/fluentd:2.5.1 
        imagePullPolicy: IfNotPresent
        resources:              # 定义资源限制
          requests:
            cpu: 100m
            memory: 300Mi
          limits:
            memory: 300Mi
        volumeMounts:
        - name: system-log    # 使用system-log卷,挂载到容器/var/log目录
          mountPath: /var/log

执行YAML文件:

kubectl apply -f fluentd-daemonset.yaml

查看Pod状态,如下图可以看到分包在K8s集群每个节点上创建Pod

kubectl get pods -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rtDxDp8l-1687509544696)(D:\MD归档文档\IMG\image-20230623161952395.png)]

2、DaemonSet管理Pod滚动更新

DaemonSet更新策略在 spec.updateStrategy 字段定义,目前支持两种更新策略:

  • rollingUpdate:由于daemonset不支持一个节点运行多个Pod,所以rollingUpdate更新策略是先删除在更新。
  • OnDelete:默认不做更新,需要手动删除后更新。

第一步:创建daemonset资源并使用 nginx:1.18.0 镜像,YAML 如下:

cat web-daemonset.yaml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: web-daemonset
  namespace: default
spec:
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      app: web-daemonset
  template:
    metadata:
      labels:
        app: web-daemonset
    spec:
      tolerations:            
      - effect: NoSchedule    # 容忍度根据master 污点定义
        key: node-role.kubernetes.io/control-plane
      containers:
      - name: web-daemonset
        image: nginx:1.18.0
        imagePullPolicy: IfNotPresent
        resources:             
          requests:
            cpu: 100m
            memory: 300Mi
          limits:
            memory: 300Mi

执行YAML 文件:

kubectl apply -f web-daemonset.yaml

查看Pod状态:

kubectl get pods -o wide -l app=web-daemonset

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4HXmpoUM-1687509544702)(D:\MD归档文档\IMG\image-20230623162346648.png)]

第二步:更新镜像使用nginx:latest

只更改image地方,其余地方不做操作,然后重新apply 使其生效。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9t4TPjr-1687509544704)(D:\MD归档文档\IMG\image-20230623162435864.png)]

kubectl apply -f web-daemonset.yaml

第三步:验证镜像是否更新

kubectl describe pod web-daemonset-2vtd9|grep Image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TpUqXnXf-1687509544705)(D:\MD归档文档\IMG\image-20230623163222395.png)]

可以看到镜像版本更新成功了,这种更新其实就是先删除旧版本,再使用新的镜像版本进行创建。

三、总结

  • DaemonSet控制器用于控制每个Node节点有运行指定Pod副本集,当添加或删除Node节点时,DaemonSet会自动创建指定的Pod副本集,来保证每一个Node节点都运行此Pod。用于收集日志、监控等场景。
  • DaemonSet rollingUpdate更新策略是先删除旧版本Pod,在创建新版本Pod,因为每个Node节点只能创建一个Pod副本集。

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

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

相关文章

数据库期末复习大总结 数据库课程学习资料(包含数据库全部章节的经典例题)【我的数据库期末复习】

为刚开始上大学数据库课程 提供学习方向【我的数据库期末复习】 第一章 绪论1.1 数据库系统概述 第二章 关系数据库2.1 关系的基本概念2.2 关系的完整性 关系数据库标准语言SQL3.1.1 SQL创建模式和表3.1.2 SQL修改和删除表3.2.1 SQ单表查询3.2.2 分组聚合和分组过滤3.2.3 多表联…

Matplotlib---散点图

1. 散点图 scatter函数用于绘制散点图。下面是scatter函数的语法格式: scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, edgecolorsNone, **kwargs)参数解释: x:指定散点的…

【二分查找】详细图解

目录 一.什么是二分查找法? 二.算法要求 三.算法思想 图解(要找的数k的值为3) 参考代码 一.什么是二分查找法? 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是&am…

GEE:DYNAMICWORLD/V1数据集介绍

作者:CSDN @ _养乐多_ 本文将介绍GOOGLE/DYNAMICWORLD/V1数据集。 在Dynamic World数据集中,每个波段代表了某个特定类别的土地覆盖概率。这些概率表示了一个像素完全被某种土地覆盖类别所覆盖的可能性,其取值范围从0到1。每个波段的名称和描述指示了对应类别的土地覆盖类…

成为CSDN创作者的第2048天,我收获了什么?

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

linux下容器 安装 操作 介绍

介绍: 容器是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个独立的运行环境中,从而实现快速部署、可移植性和可扩展性。容器可以在不同的操作系统和云平台上运行,使得应用程序的部署和管理变得更加简单和高效。 安…

八大指针笔试题带你overcome指针

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《C语言》专栏,本专栏是针对于大学生,编程小白精心打造…

pgsql序列的使用

大家都知道pgsql和mysql不同,mysql字段有有自增属性,pgsql并没有,但是pgsql和oracle一样有序列,很多人刚接触pgsql的时候,并不知道序列是什么,怎么用,下面这篇文章就介绍序列,并且怎…

Flutter系列(十一)实现商城首页和商品详情页

基础工程: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现商城首页和商品详情页,效果如下图: 二、使用的组件 MasonryGridView.count 瀑布流插件&#xff…

几何引擎 约束求解器 3D仿真物理引擎 图形引擎

几何引擎 & 约束求解器 & 3D仿真物理引擎 & 图形引擎 1 介绍技术图谱建模主流CAD/CAM/CAE/AEC所用引擎 2 几何建模引擎2.1 介绍2.2 各家实现 3 图形引擎4 几何约束求解器4.1 介绍4.2 各家实现D-Cubed DCM(西门子)CGM(达索)LGS&am…

OpenGL模型控制(旋转、平移)

1.效果图 2.平移 首先做一个鼠标双击事件,表示平移模型对象,当然,我们需要遍历当前哪个模型对象被选中,才能进行该对象的平移操作。 void AXBOpemglWidget::mouseDoubleClickEvent(QMouseEvent *event) {Q_UNUSED(event);if(m_m…

团体程序设计天梯赛-练习集L1篇⑥

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

命令行编译C程序

目录 设置MSVC环境变量 C文件编译流程 编译 链接 学习起步之初,先用最基础的命令行工具进行学习 设置MSVC环境变量 这个是在VS2019下进行配置的,位置和你安装IDE的位置有关 MSVC D:\VS2019\IDE\VC\Tools\MSVC\14.29.30133WK10_INCLUDE C:\Program …

Android App安装弹窗显示流程

一、APP的安装 1、常见安装方式 系统应用和预制应用安装――开机时完成,没有安装界面,在PKMS的构造函数中完成安装 网络下载或第三方应用安装――调用PackageManager.installPackages(),有安装界面。 ADB工具安装――没有安装界面&#xf…

社交登陆成功回调

1. 点击跳转至第三方授权 2. 这是使用gitee作为第三方授权进行验证 3. 授权成功则跳转至 redirect_url 4. 社交登陆回调逻辑 一、根据第三方授权提供的方式获取token (1)发送请求获取code码(每次发送请求,code码会改变&#xff…

构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录 前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure 中的零信任体系结构(本文重点)4.1 基础知识点(必须了解&#x…

File 类,InputStream, OutputStream 的用法

目录 一.File类 关于名字和路径的操作 关于创建和销毁的操作 创建文件夹(多级目录) InputStream 第一种:字节流读取 第二种: 字符流读取(Reader) OutputStream 第一种:字节流写入 第二种方式:字符流输入 一.File类 File翻译过来"文件" 那么File类的操作实际…

【初识 Docker | 中级篇】 Docker 安装 Redis

文章目录 前言一、安装 docker1、安装docker2、安装docker-compose 二、redis 单机安装1.创建配置文件1.1.创建目录1.2.创建redis.conf1.3.创建docker-compose.yml 2.启动redis容器 总结 前言 可以按照以下步骤在 Docker 中安装 Redis docker pull redis 拉取Redis镜像 docker…

CSS3-定位

网页常见布局方式 1 标准流 1 块级元素独占一行 → 垂直布局 2 行内元素/行内块元素一行显示多个 → 水平布局 2 浮动 可以让原本垂直布局的 块级元素变成水平布局 3 定位 1 可以让元素自由的摆放在网…

软件项目管理 第五章 软件项目的成本管理 课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第五章 软件项目的成本管理 课后习题参考答案 1.选择题 (1)(A)是用系统的功能数量来测量其规模,与实现产品所使用的语言和技术是没有关系的。 A.功能点 B.对象点 C.代码行 D.用例点 (2)如果你是某项目的项目经理,你已经估…