kubernetes k8s Daemonset 控制器 原理 讲解 配置

news2024/12/28 3:48:20

目录

1  DaemonSet控制器:概念、原理解读

1.1  DaemonSet概述

1.2  DaemonSet工作原理:如何管理Pod?

1.3  Daemonset典型的应用场景

1.4  DaemonSet 与 Deployment 的区别Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。

DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

2 DaemonSet资源清单文件编写技巧

3 DaemonSet使用案例:部署日志收集组件fluentd

4 Daemonset管理pod:滚动更新


文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘

链接:https://pan.baidu.com/s/1mJ1mWjn4dmT6zGPo4RTFCA 
提取码:m0r6 
 

1  DaemonSet控制器:概念、原理解读

1.1  DaemonSet概述

DaemonSet控制器能够确保k8s集群所有的节点都运行一个相同的pod副本,当向k8s集群中增加node节点时,这个node节点也会自动创建一个pod副本,当node节点从集群移除,这些pod也会自动删除;删除Daemonset也会删除它们创建的pod

1.2  DaemonSet工作原理:如何管理Pod?

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

1.3  Daemonset典型的应用场景

在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd  logstash、filebeat等
在每个节点上运行监控组件,比如:Prometheus Node Exporter 、collectd

1.4  DaemonSet 与 Deployment 的区别
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。


DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

2 DaemonSet资源清单文件编写技巧

#查看定义Daemonset资源需要的字段有哪些?

[root@xianchaomaster1 ~]# kubectl explain ds

KIND:     DaemonSet

VERSION:  apps/v1

DESCRIPTION:

     DaemonSet represents the configuration of a daemon set.

FIELDS:

   apiVersion <string> #当前资源使用的api版本,跟VERSION:  apps/v1保持一致

   kind <string>  #资源类型,跟KIND:  DaemonSet保持一致

   metadata <Object> #元数据,定义DaemonSet名字的

   spec <Object>    #定义容器的

   status <Object>  #状态信息,不能改

#查看DaemonSet的spec字段如何定义?

[root@xianchaomaster1 ~]# kubectl explain ds.spec

KIND:     DaemonSet

VERSION:  apps/v1

RESOURCE: spec <Object>

DESCRIPTION:

     The desired behavior of this daemon set. More info:

     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

     DaemonSetSpec is the specification of a daemon set.

FIELDS:

   minReadySeconds <integer>   #当新的pod启动几秒种后,再kill掉旧的pod。

   revisionHistoryLimit <integer> #历史版本

   selector <Object> -required-  #用于匹配pod的标签选择器

   template <Object> -required-

#定义Pod的模板,基于这个模板定义的所有pod是一样的

   updateStrategy <Object> #daemonset的升级策略

#查看DaemonSet的spec.template字段如何定义?

#对于template而言,其内部定义的就是pod,pod模板一个独立的对象

[root@xianchaomaster1 ~]# kubectl explain ds.spec.template

KIND:     DaemonSet

VERSION:  apps/v1

RESOURCE: template <Object>

FIELDS:

   metadata <Object>

   spec<Object>

3 DaemonSet使用案例:部署日志收集组件fluentd

#fluentd-2-5-1.tar.gz上传到xianchaomaster1和xianchaonode2和xianchaonode1上,解压

特别注意:因为我们安装的k8s版本是1.25,那就需要按照文档步骤ctr -n=k8s.io images import导出镜像,如果k8s版本是1.24之前的,可以用docker load -i解压,视频里用的docker load -i,现在我们课程安装更新到了k8s1.25,所以导出镜像需要用ctr -n=k8s.io images import

[root@xianchaonode2]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz

[root@xianchaonode1]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz

[root@xianchaomaster1]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz

#编写一个DaemonSet资源清单

[root@xianchaomaster1 ~]# cat daemonset.yaml

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:

      tolerations:

      - key: node-role.kubernetes.io/master

        effect: NoSchedule

      containers:

      - name: fluentd-elasticsearch

        image: xianchao/fluentd:v2.5.1

        resources:

          limits:

            memory: 200Mi

          requests:

            cpu: 100m

            memory: 200Mi

        volumeMounts:

        - name: varlog

          mountPath: /var/log

        - name: varlibdockercontainers

          mountPath: /var/lib/docker/containers

          readOnly: true

      terminationGracePeriodSeconds: 30

      volumes:

      - name: varlog

        hostPath:

          path: /var/log

      - name: varlibdockercontainers

        hostPath:

          path: /var/lib/docker/containers

[root@xianchaomaster1 ~]# kubectl apply -f daemonset.yaml

daemonset.apps/fluentd-elasticsearch created

[root@xianchaomaster1 ~]# kubectl get ds -n kube-system

NAME               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE

fluentd-elasticsearch   3          3          3           3                   3                    

[root@xianchaomaster1 ~]# kubectl get pods -n kube-system -o wide

#通过上面可以看到在k8s的三个节点均创建了fluentd这个pod

#pod的名字是由控制器的名字-随机数组成的

#资源清单详细说明

apiVersion: apps/v1  #DaemonSet使用的api版本

kind: DaemonSet     # 资源类型

metadata:

  name: fluentd-elasticsearch   #资源的名字

  namespace: kube-system      #资源所在的名称空间

  labels:

    k8s-app: fluentd-logging    #资源具有的标签

spec:

  selector:         #标签选择器

    matchLabels:

      name: fluentd-elasticsearch

  template:

    metadata:

      labels:  #基于这回模板定义的pod具有的标签

        name: fluentd-elasticsearch

    spec:

      tolerations:   #定义容忍度

      - key: node-role.kubernetes.io/master

        effect: NoSchedule

      containers:    #定义容器

      - name: fluentd-elasticsearch

        image: xianchao/fluentd:v2.5.1

        resources:  #资源配额

          limits:

            memory: 200Mi

          requests:

            cpu: 100m

            memory: 200Mi

        volumeMounts:

        - name: varlog

          mountPath: /var/log   #把本地/var/log目录挂载到容器

        - name: varlibdockercontainers

          mountPath: /var/lib/docker/containers  

#/var/lib/docker/containers/挂载到容器里

          readOnly: true  #挂载目录是只读权限

      terminationGracePeriodSeconds: 30  #优雅的关闭服务

      volumes:

      - name: varlog

        hostPath:

          path: /var/log  #基于本地目录创建一个卷

      - name: varlibdockercontainers

        hostPath:

          path: /var/lib/docker/containers  #基于本地目录创建一个卷

4 Daemonset管理pod:滚动更新

#DaemonSet实现pod的滚动更新

#查看daemonset的滚动更新策略

[root@xianchaomaster1 ~]# kubectl explain ds.spec.updateStrategy

KIND:     DaemonSet

VERSION:  apps/v1

RESOURCE: updateStrategy <Object>

DESCRIPTION:

     An update strategy to replace existing DaemonSet pods with new pods.

     DaemonSetUpdateStrategy is a struct used to control the update strategy for

     a DaemonSet.

FIELDS:

   rollingUpdate <Object>

     Rolling update config params. Present only if type = "RollingUpdate".

   type <string>

     Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is

     RollingUpdate.

#查看rollingUpdate支持的更新策略

[root@xianchaomaster1 ~]# kubectl explain ds.spec.updateStrategy.rollingUpdate

KIND:     DaemonSet

VERSION:  apps/v1

RESOURCE: rollingUpdate <Object>

DESCRIPTION:

     Rolling update config params. Present only if type = "RollingUpdate".

     Spec to control the desired behavior of daemon set rolling update.

FIELDS:

   maxUnavailable <string>

#上面表示rollingUpdate更新策略只支持maxUnavailabe,先删除在更新;因为我们不支持一个节点运行两个pod,因此需要先删除一个,在更新一个

#更新镜像版本,可以按照如下方法:

kubectl set image daemonsets fluentd-elasticsearch=ikubernetes/filebeat:5.6.6-alpine -n kube-system

kubectl set image daemonsets fluentd-elasticsearch fluentd-elasticsearch=ikubernetes/filebeat:5.6.6-alpine -n kube-system

这个镜像启动pod会有问题,主要是演示daemonset如何在命令行更新pod

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

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

相关文章

Docker安全与资源

一、cgroup资源配置方法 1.cgroup概念 cgroup&#xff08;control group控制族群&#xff09; &#xff08;1&#xff09;什么是cgroup 和namespace类似&#xff0c;也是将进程进程分组&#xff0c;但是目的与namespace不一样&#xff0c;namespace是为了隔离进程组之前的资…

制作网站的流程有哪些

制作一个网站需要经历一系列的流程&#xff0c;下面将详细介绍制作网站的主要流程。 1. 确立目标和需求分析&#xff1a;在开始设计网站之前&#xff0c;首先要明确网站的目标和需求。这包括确定网站的用途&#xff0c;目标受众&#xff0c;所需功能等。这个阶段的目的是为了确…

八股之数据库

一、Mysql 基础知识 1.为什么不推荐使用外键与级联&#xff1f; 增加了复杂性&#xff1a; a. 每次做 DELETE 或者 UPDATE 都必须考虑外键约束&#xff0c;会导致开发的时候很痛苦, 测试数据极为不方便; b. 外键的主从关系是定的&#xff0c;假如那天需求有变化&#xff0c;数…

深度解析:AI大模型高效推理技术全览,掌握顶尖性能优化策略!

1 介绍 大型语言模型在人工智能领域中具有巨大的潜力 &#xff0c;但推理过程中的禁止记忆和计算预算阻碍了其部署。 为了应对这些挑战&#xff0c;提出了许多针对LLMs的专业压缩方法&#xff0c;包括剪枝、知识传递、量化、紧凑的架构设计以及动态网络等。这些方法有助于减少…

219页PDF || 大模型技术引领行业变革:2024大模型典型示范应用案例集(附案例集下载)

大家好&#xff0c;今天给大家分享一本《2024大模型典型示范应用案例集》我已将这本案例集打包好了&#xff0c;包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习&#xff0c;等录播视频免费分享出来&#xff0c;需要的小伙伴可以扫取。 引…

Nacos配置内容加密实现

一&#xff0c;背景 因为项目中安全检查的要求&#xff0c;需要将nacos配置的内容进行加密&#xff0c;所以需要实现将配置内容加密处理&#xff0c;这里引入nacos-aes-encryption-plugin插件来完成这一需求。 二&#xff0c;实现步骤 1, 重新编译nacos服务端 1.1 从githu…

海量数据处理商用短链接生成器平台 - 17

第五十八章 数据可视化ADS层-应用数据服务开发实战 第1集 数据可视化ADS层介绍和微服务整合ClickHouse项目 简介&#xff1a; 数据可视化ADS层介绍和微服务整合ClickHouse项目 数据分层 数据分层分层描述数据生成计算工具存储ODS原生数据&#xff0c;短链访问基本信息Sprin…

计算机的启动过程

通常搜索到的往往是 BIOS 按照“启动顺序”&#xff0c;把控制权转交给排在第一位的存储设备&#xff1a;硬盘。然后在硬盘里寻找主引导记录的分区&#xff0c;这个分区告诉电脑操作系统在哪里&#xff0c;并把操作系统被加载到内存中&#xff0c;然后你就能看到经典的启动界面…

HarmonyOS NEXT - 三方库axios的使用和封装

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新&#xff0c;请前往github查看最新代码 在demo中这些组件和工具类都通过module实现了&#xff0c;具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils HarmonyOS NEXT - 三方库axios的使用…

Matplotlib入门与进阶:数据可视化的强大工具

Matplotlib入门与进阶&#xff1a;数据可视化的强大工具 在当今数据驱动的世界中&#xff0c;数据可视化成为了数据分析的重要一环。数据可视化不仅能够帮助开发者理解和分析数据&#xff0c;还能使数据展示更具说服力。本文将详细介绍Python中的2D绘图库——Matplotlib。通过…

通过共享目录上传后门

本文来自无问社区&#xff0c;更多实战内容可前往查看http://www.wwlib.cn/index.php/artread/artid/13337.html 操作步骤 枚举目标主机开启的共享服务信息&#xff1a;10.0.0.6 smbclient -L //10.0.0.6 -U spotWARNING: The "syslog" option is deprecated Ente…

flink车联网项目前篇:数据开发(第66天)

系列文章目录 03_数据仓库开发 开发规范 1.1 数据库划分规范 1.2 表命名规范 1.3 表字段类型规范开发前准备 3.1 业务系统表 3.2 数据导入 04_维度主题相关表结构 1.1 dim_area - 城市字典表 1.2 dim_car_info - 车辆信息表 1.3 dim_car_vendor - 车队信息表 1.4 dim_date_wo…

虹科技术|优化始于数据:Baby-LIN设备如何高效存储总线数据?

记录汽车总线数据对于监控汽车电子控制单元&#xff08;ECU&#xff09;间的通信和诊断网络故障具有重要意义。通过记录测试时的总线数据&#xff0c;不仅可以监控产品是否按照预期运行&#xff0c;还能追踪特定错误或故障背后的原因&#xff0c;这对确保汽车产品质量和性能至关…

MySQL查询居然不区分大小写

MySQL查询居然不区分大小写 事故现场真实原因BINARY 关键字总结MySQL 为什么要这样设计呢&#xff1f;解决方案修改排序规则binary &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;懵逼了&#xff0c; MySQL 查询居然不区分大小写&#xff0c;第一次听到这么陌…

实验9 根据材料编程《汇编语言》- 王爽

1. 需求 编程&#xff1a;在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 welcome to masm! 2. 分析 &#xff08;1&#xff09;材料中提到&#xff0c;一个在屏幕上显示的字符&#xff0c;具有前景&#xff08;字符色&#xff09;和背景&#xff08;底色&#xff09;…

[000-01-030].第7节:Zookeeper工作原理

1.Zookeeper工作原理&#xff1a; 1.1.Zookeeper的工作机制 1.Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff1b;2.Zookeeper负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的注册&#xff0c;一旦这些数据的…

来了,秋天的第一个POC

立秋就这么水灵灵地过了 又到了“秋天的第一杯奶茶”刷屏的时刻 而我们要追求的是“秋天的第一个POC” 做好变强的准备了吗 Yak POC编写&#xff0c;这一篇就够了 文章中指代的POC仅指使用 Yaklang 编程语言编写的POC 在此篇文章中就详细描述 Yaklang 语法的学习了&#x…

【昱合昇天窗】消防排烟天窗设计使用需注意问题

消防排烟天窗在设计和使用过程中&#xff0c;需要避免出现以下三个问题&#xff0c;以免影响其排烟效果和安全性。1、只关注价格 很多人在选择消防排烟天窗时&#xff0c;只关心天窗的价格&#xff0c;不重视天窗型号、配置选择是否满足厂房需求。这样做的坏处在于安装的天窗可…

还在画恐怖片?局部重绘,艺术再创造 —— Stable diffusion inPainting功能详解与实战指南

前言 在AI绘画的世界里&#xff0c;我们常常面临这样的困境&#xff1a;一幅作品&#xff0c;除了手部姿势、面部表情其他都很完美&#xff1b;这时候&#xff0c;如果要重新生成整幅画&#xff0c;不仅效率低下&#xff0c;而且可能会破坏原本满意的部分。幸好&#xff0c;St…

JAVA毕业设计|(免费)ssm视康眼镜网店销售系统的包含文档代码讲解

收藏点赞不迷路 关注作者有好处 编号&#xff1a;ssm538 ssm视康眼镜网店销售系统的 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 文末获取源码 1.系统展示 2.万字文档展示 …