kubernetes工作负载-DamonSet

一、DemonSet的介绍

1、什么是DemonSet

DaemonSet 控制器是用来保证在所有节点上运行一个 Pod 的副本当有节点加入集群时, 也会为他们新增一个 Pod。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

简而言之:
pod不会因为node的故障的转移而转移,pod固定在指定的node的work节点中

DemonSet跟Deployment的不同是,Deployment是可以在不同的node进行故障漂移

2、DemonSet的典型用法

  • 在每个节点上运行集群存储守护进程,如:Gluster、Ceph在每个节点上运行日志收集守护进程,如:fluentd、FilebeatLogstash
  • 在每个节点上运行监控守护进程,如: Prometheus NodeExporter
  • 在每个节点上运行网络插件为Pod提供网络服务,如: flannel、calico

3、DemonSet的编写

DaemonSet 是标准的API资源类型,它在spec字段中嵌套字段有selector、tempalte,与Deployment用法基本相同,但DaemonSet 不管理 Replicas,因为 DaemonSet不是基于期望的副本数,而是基于节点数量来控制Pod数量

4、DemonSet的使用示例

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx-ds
  template:
    metadata:
      labels:
        app: nginx-ds
    spec:
      containers:
      - name: nginx-ds
        image: nginx:1.16
        ports:
        - name: http
          containerPort: 80 
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5

        livenessProbe:          # 就绪  监听80端口,如果80不存在则重启
          httpGet:
            path: '/'
            port: 80
            scheme: HTTP
          initialDelaySeconds: 5
            

查看和删除,daemonset还会在现在的node创建pod
在这里插入图片描述

5、Daemonset采用节点标签进行部署

  • 实验一:
    给DamonSet只做节点标签,node打了标签的才会创建pod
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx-ds
  template:
    metadata:
      labels:
        app: nginx-ds
    spec:
      nodeSelector:    #节点标签选择器
        type: ssd      #节点标签,在node上打的标签
      containers:
      - name: nginx-ds
        image: nginx:1.16
        ports:
        - name: http
          containerPort: 80 
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5

        livenessProbe:          # 就绪  监听80端口,如果80不存在则重启
          httpGet:
            path: '/'
            port: 80
            scheme: HTTP
          initialDelaySeconds: 5
            

在这里插入图片描述

  • 从查看结果看,并没有进行创建,因为没有node服务标签选择器的要求
  • 查看节点标签
kubectl get node --show-labels

在这里插入图片描述

  • 给节点打标签
kubectl  label  nodes node1 type=ssd
  • 查看标签
 kubectl  get node --show-labels  | grep node1
 kubectl  describe  node node1   ##查看labels字段
 kubectl  describe  node node1  | grep -A 5 Labels
 kubectl label  nodes  node1 node2 type=ssd ## 连续给两个节点进行打标签

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 查看pod创建结果
kubectl  get pod -o wide   ## 查看pod创建在node节点中,符合场景要求
kubectl  get daemonset -o wide 

在这里插入图片描述

  • 删除label标签
方法一:
kubectl  label  nodes  node1  type-

6、DaemonSet示例二 DaemonSet部署node_exporter

1.为每个节点都运行一份 Node_exporter,采集当前节点的信息:

apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: node-exports
  namespace: default
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostNetwork: true  ##共享主机网络
      hostPID: true      ##获取主机的PID
      containers:
      - name: prometheus-node-exporter
        image: prom/node-exporter:v0.18.0
        ports:
        - name: node-ex-http
          containerPort: 9100
          hostPort: 9100
        ##存活探测和就绪探测
        livenessProbe:
          tcpSocket:
            port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100
          initialDelaySeconds: 5 ##存活探测时间为5秒
        readinessProbe:
          httpGet:
            path: '/metrics'  ## 就绪探针,这是一个固定的接口
            port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100
          initialDelaySeconds: 5  ## 就绪探针时间为5秒
  • 查看相关信息
kubectl  get daemonsets  ##查看daemonset创建的响应信息
kubectl  describe  daemonsets.apps  node-exports ## 查看daemonset详情信息
kubectl get pod -o wide 
  • 测试
curl -s 192.168.1.201:9100/metrics | grep load15  ## 15分钟的负载信息
也可以使用浏览器进行访问,访问默认的9100端口

7、DaemonSet的更新策略

DaemonSet也支持更新策略,它支持 OnDeLete 和 RollingUpdate两种

  • 0nDeLete: 是在相应节点的Pod资源被删除后重建为新版本,从而允许用户手动编排更新过程。
  • RollingUpdate: 滚动更新,工作逻辑和Deployment滚动更新类似;

1、DaemonSet的更新策略——RollingUpdate

apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: node-exports
  namespace: default
spec:
  minReadySeconds: 10      ## 更新时间,默认是0秒
  revisionHistoryLimit: 20 ## 回滚次数
  updateStrategy:  ## 更新策略
    rollingUpdate:
      type: RollingUpdate  ##更新策略为RollingUpdate
    rollingUpdate:         ## RollingUpdate的策略
      maxUnavailable: 1    ## 一次更新的pod数量
    
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostNetwork: true  ##共享主机网络
      hostPID: true      ##获取主机的PID
      containers:
      - name: prometheus-node-exporter
        image: prom/node-exporter:v0.18.1
        ports:
        - name: node-ex-http
          containerPort: 9100
          hostPort: 9100
        ##存活探测和就绪探测
        livenessProbe:
          tcpSocket:
            port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100
          initialDelaySeconds: 5 ##存活探测时间为5秒
        readinessProbe:
          httpGet:
            path: '/metrics'  ## 就绪探针,这是一个固定的接口
            port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100
          initialDelaySeconds: 5  ## 就绪探针时间为5秒

在这里插入图片描述
在这里插入图片描述
安装默认的 RollingUpdate 策略,node-exports-ds 资源将采用一次更新一个Pod对象,待新建Pod的对象就绪后,在更新下一个Pod对象,直到全部完成。

2、DaemonSet的更新策略——OnDelete

  • 1、将此前创建的node-expoter中的pod模板镜像更新为 prom/node-exporter:v1.3.1,由于升级版本跨度过大,无法确保升级过程中的稳定性,我们就不得不使用 0nDeLete 策略来替换默认的RollingUpdate 策略

  • 2.由于 0nDelete 并非自动完成升级,它需要管理员手动删除Pod,然后重新拉起新的Pod,才能完成更新。 (对于升级有着先后顺序的软件
    这种方法就非常的有用;)

  • OnDelete的使用类型

kubectl  explain  daemonset.spec.updateStrategy.type

在这里插入图片描述

apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: node-exports
  namespace: default
spec:
  minReadySeconds: 10      ## 更新时间,默认是0秒
  revisionHistoryLimit: 20 ## 回滚次数
  updateStrategy:  ## 更新策略
    rollingUpdate:
      type: OnDelete  ##更新策略为OnDelet
    
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostNetwork: true  ##共享主机网络
      hostPID: true      ##获取主机的PID
      containers:
      - name: prometheus-node-exporter
        image: prom/node-exporter:v1.3.1
        ports:
        - name: node-ex-http
          containerPort: 9100
          hostPort: 9100
        ##存活探测和就绪探测
        livenessProbe:
          tcpSocket:
            port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100
          initialDelaySeconds: 5 ##存活探测时间为5秒
        readinessProbe:
          httpGet:
            path: '/metrics'  ## 就绪探针,这是一个固定的接口
            port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100
          initialDelaySeconds: 5  ## 就绪探针时间为5秒
          
  • 发现应用yaml文件后,image并没有发生变化

在这里插入图片描述

  • 通过删除pod 重新创建,会重新自动建立新的镜像的pod
    在这里插入图片描述
  • 相关命令
kubectl get pod  -l app=node-exporter ## 根据标签进行相关pod的查看
kubectl get pod  <pod-ID> -o yaml | grep image ## 查看pod的镜像
kubectl delete daemonset -l app=node-exporter  ##根据标签进行pod删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

递归、搜索与回溯算法(专题二:深搜)

往期文章&#xff08;希望小伙伴们在看这篇文章之前&#xff0c;看一下往期文章&#xff09; &#xff08;1&#xff09;递归、搜索与回溯算法&#xff08;专题零&#xff1a;解释回溯算法中涉及到的名词&#xff09;【回溯算法入门必看】-CSDN博客 &#xff08;2&#xff09…

Android Studio安卓开发--ListView学习整理

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内&#xff0c;同时屏幕上原有的数据则会滚动出屏幕。 1.ListView的简单用法 &#xff08;1&#xff09;activity_main.xml布局中加入ListView控件&#xff1a;&#xff08;先占满整个布局的空间&#xff09;…

matplotlib从起点出发(12)_Tutorial_12_MultiAxes

在一个Figure中安排多个Axes 通常在一个图像中&#xff0c;需要同时呈现多于一个Axes&#xff0c;并且需要对齐到网格. Matplotlib有多种工具用于处理在本库历史中演变的Axes网格&#xff0c;我们将讨论我们认为用户最常使用的工具&#xff0c;支持Axes组织方式的工具&#xf…

Qt弹框展示

1.相关说明 文件选择弹框、目录选择弹框、保存文件弹框、颜色选择弹框、字体选择弹框、进度条弹框、输入对话框、标准消息框等 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QProgressD…

Java集合(3)

1.泛型 1.1泛型概述 泛型的介绍 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: …

软件开发架构

【 一 】软件开发架构图 【 1】ATM和选课系统 三层的开发架构 前段展示台 后端逻辑层 数据处理层 【二】软件开发架构的步骤流程 需求分析&#xff1a;在软件开发架构设计之前&#xff0c;需要对应用系统进行需求分析&#xff0c;明确用户需求、功能模块、业务流程等内容。…

canvas绘制N角形,锯齿状

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

beego API 自动化文档

API 全局设置 必须设置在 routers/router.go 中&#xff0c;文件的注释&#xff0c;最顶部&#xff1a; // APIVersion 1.0.0 // Title mobile API // Description mobile has every tool to get any job done, so codename for the new mobile APIs. // Contact astaxiegmai…

第一篇【传奇开心果系列】beeware开发移动应用:轮盘抽奖移动应用

系列博文目录 beeware开发移动应用示例系列博文目录一、项目目标二、开发传奇开心果轮盘抽奖安卓应用编程思路三、传奇开心果轮盘抽奖安卓应用示例代码四、补充抽奖逻辑实现五、开发传奇开心果轮盘抽奖苹果手机应用编程思路六、开发传奇开心果轮盘抽奖苹果手机应用示例代码七、…

近期学习文章

DNSlog在渗透测试中的实战技巧 - 网安隐藏源IP&#xff0c;提高溯源难度的几种方案 - 网安FreeBuf网络安全行业门户 【漏洞公告】某平台一个有意思的CSRF // SecTrain安全博客 浅谈Web源码泄漏-安全客 - 安全资讯平台 红队-C2 Server基础构建 - 先知社区FreeBuf网络安全行业…

Pytest系列(2) - assert断言详细使用

前言 与unittest不同&#xff0c;pytest使用的是python自带的assert关键字来进行断言assert关键字后面可以接一个表达式&#xff0c;只要表达式的最终结果为True&#xff0c;那么断言通过&#xff0c;用例执行成功&#xff0c;否则用例执行失败 assert小栗子 想在抛出异常之…

大模型增强大模型:通过融合扩展能力(Google DeepMind2024)

1、写作动机&#xff1a; 存在如此多领域特定的模型自然引发一个问题&#xff1a;我们是否能够将一个固定模型与一个特定领域的增强模型组合&#xff0c;以实现新的能力&#xff1f;例如&#xff0c;我们是否可以将增强模型的代码理解能力与固定LLM的语言生成能力组合&#xf…

非科班转码的秋招复盘:地理信息科学GIS专业到后端研发、软件开发

本文介绍地理信息科学&#xff08;GIS&#xff09;专业的2024届应届生&#xff0c;在研三上学期期间&#xff0c;寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况。 首先&#xff0c;这篇文章一开始写于2023年年底&#xff0c;当时为了参加一个征文活动&#xff0c;所…

Spring Boot程序的打包与运行:构建高效部署流程

引言 在现代应用开发中&#xff0c;高效的打包和部署流程对于项目的开发、测试和上线至关重要。Spring Boot作为一种快速开发框架&#xff0c;提供了方便的打包工具和内嵌式的Web服务器&#xff0c;使得打包和运行变得更加简单。本文将研究在Spring Boot应用中如何进行打包&am…

ctfshow php特性(web89-web101)

目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 php特性(php基础知识) web89 <?php include("flag.php"); highlight_file(_FILE_);if(isset($_GET[num])){$num$_GET[num];if(preg_match("/[0-9]/&…

WINCC读写EXCEL-VBS

原创 RENHQ WINCC 关于VBS操作EXCEL的文档不管在论坛上还是在网上&#xff0c;相关的脚本已经很多&#xff0c;但是依然有很多人在问这个问题&#xff0c;于是把我以前在论坛上发的一个集合帖子的脚本拿来&#xff0c;重新开个帖子&#xff0c;如果再有人问的话&#xff0c;可…

MySQL进阶篇:索引(概述,结构,分类,语法,SQL性能分析,索引使用,设计原则)

目录 1.索引概述2.索引结构1.B树&#xff08;多路平衡查找树&#xff09;2.B树3.Hash1.特点2.存储引擎支持 4.选择B树作为InnoDB存储引擎索引结构的原因 3.索引分类1.聚集索引选取规则2.回表查询 4.索引语法1.创建索引2.查看索引3.删除索引 5.SQL性能分析1.SQL执行频率2.慢查询…

Spark流式读取文件数据

流式读取文件数据 from pyspark.sql import SparkSession ss SparkSession.builder.getOrCreate() # todo 注意1&#xff1a;流式读取目录下的文件 --》一定一定要是目录&#xff0c;不是具体的文件&#xff0c;# 目录下产生新文件会进行读取# todo 注意点2&#xff1…

启动低轨道卫星LEO通讯产业与6G 3GPP NTN标准

通讯技术10年一个大跃进&#xff0c;从1990年的2G至2000年的3G网路&#xff0c;2010年的4G到近期2020年蓬勃发展的5G&#xff0c;当通讯技术迈入融合网路&#xff0c;当前的 5G 技术不仅可提供高频宽、低延迟&#xff0c;同时可针对企业与特殊需求以 5G 专网的模式提供各式服务…

面试之Glide如何绑定Activity的生命周期

Glide绑定Activity生命周期 Glide.with() 下面都是它的重载方法&#xff0c;Context&#xff0c;Activity&#xff0c;FragmentActivity, Fragment, android.app.Fragment fragment,View都可以作为他的参数&#xff0c;内容大同小异&#xff0c;都是先getRetriever&#xff0…