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-dsnamespace: default
spec:selector:matchLabels:app: nginx-dstemplate:metadata:labels:app: nginx-dsspec:containers:- name: nginx-dsimage: nginx:1.16ports:- name: httpcontainerPort: 80 livenessProbe:tcpSocket:port: 80initialDelaySeconds: 5livenessProbe:          # 就绪  监听80端口,如果80不存在则重启httpGet:path: '/'port: 80scheme: HTTPinitialDelaySeconds: 5

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

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

  • 实验一:
    给DamonSet只做节点标签,node打了标签的才会创建pod
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-dsnamespace: default
spec:selector:matchLabels:app: nginx-dstemplate:metadata:labels:app: nginx-dsspec:nodeSelector:    #节点标签选择器type: ssd      #节点标签,在node上打的标签containers:- name: nginx-dsimage: nginx:1.16ports:- name: httpcontainerPort: 80 livenessProbe:tcpSocket:port: 80initialDelaySeconds: 5livenessProbe:          # 就绪  监听80端口,如果80不存在则重启httpGet:path: '/'port: 80scheme: HTTPinitialDelaySeconds: 5

在这里插入图片描述

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

在这里插入图片描述

  • 给节点打标签
kubectl  label  nodes node1 type=ssd
  • 查看标签
 kubectl  get node --show-labels  | grep node1kubectl  describe  node node1   ##查看labels字段kubectl  describe  node node1  | grep -A 5 Labelskubectl 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-exportsnamespace: default
spec:selector:matchLabels:app: node-exportertemplate:metadata:labels:app: node-exporterspec:hostNetwork: true  ##共享主机网络hostPID: true      ##获取主机的PIDcontainers:- name: prometheus-node-exporterimage: prom/node-exporter:v0.18.0ports:- name: node-ex-httpcontainerPort: 9100hostPort: 9100##存活探测和就绪探测livenessProbe:tcpSocket:port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100initialDelaySeconds: 5 ##存活探测时间为5秒readinessProbe:httpGet:path: '/metrics'  ## 就绪探针,这是一个固定的接口port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100initialDelaySeconds: 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-exportsnamespace: default
spec:minReadySeconds: 10      ## 更新时间,默认是0秒revisionHistoryLimit: 20 ## 回滚次数updateStrategy:  ## 更新策略rollingUpdate:type: RollingUpdate  ##更新策略为RollingUpdaterollingUpdate:         ## RollingUpdate的策略maxUnavailable: 1    ## 一次更新的pod数量selector:matchLabels:app: node-exportertemplate:metadata:labels:app: node-exporterspec:hostNetwork: true  ##共享主机网络hostPID: true      ##获取主机的PIDcontainers:- name: prometheus-node-exporterimage: prom/node-exporter:v0.18.1ports:- name: node-ex-httpcontainerPort: 9100hostPort: 9100##存活探测和就绪探测livenessProbe:tcpSocket:port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100initialDelaySeconds: 5 ##存活探测时间为5秒readinessProbe:httpGet:path: '/metrics'  ## 就绪探针,这是一个固定的接口port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100initialDelaySeconds: 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-exportsnamespace: default
spec:minReadySeconds: 10      ## 更新时间,默认是0秒revisionHistoryLimit: 20 ## 回滚次数updateStrategy:  ## 更新策略rollingUpdate:type: OnDelete  ##更新策略为OnDeletselector:matchLabels:app: node-exportertemplate:metadata:labels:app: node-exporterspec:hostNetwork: true  ##共享主机网络hostPID: true      ##获取主机的PIDcontainers:- name: prometheus-node-exporterimage: prom/node-exporter:v1.3.1ports:- name: node-ex-httpcontainerPort: 9100hostPort: 9100##存活探测和就绪探测livenessProbe:tcpSocket:port: node-ex-http  ##存活探测,探测port的name其实就是探测端口9100initialDelaySeconds: 5 ##存活探测时间为5秒readinessProbe:httpGet:path: '/metrics'  ## 就绪探针,这是一个固定的接口port: node-ex-http  ## 就绪探针探测port的name其实就是探测端口9100initialDelaySeconds: 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删除

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

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

相关文章

【算法理论】期末复习-选填

算法的五个特征 1.有效性 算法必须在有限的时间能够完成&#xff0c;甚至用纸和笔完成 2.确定性 算法的每一步能够清楚的定义. 3.有限性 算法能够在有限的步骤完成 4.Input 算法有0个或者多个输入 5.Output 算法有一个或者多个输出 满足有效性&#xff0c;确定性&am…

Js-WebAPIs-事件(二)

事件监听&#xff08;绑定&#xff09; 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮 什么是事件监听&#xff1f; 就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响…

C 语言->编译和链接实现原理

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 今天学习&#xff1a;浅学编译和链接内部实现原理 前提&#xff1a;本文是在gcc编译环…

kotlin Kmp多平台模板生成

地址: Kotlin Multiplatform Wizard | JetBrains 可生成kotlin多个平台模板 https://terrakok.github.io/Compose-Multiplatform-Wizard/

go语言(八)---- map

map的声明方式有以下三种。 package mainimport "fmt"func main() {//第一种声明方式//声明map1是一个map类型&#xff0c;key是String&#xff0c;value是Stringvar myMap1 map[string] stringif myMap1 nil {fmt.Println("myMap1 是一个空map")}//在使…

如何从命令行运行testng.xml?

目录 创建一个新的java项目并从命令行运行testng.xml 使用命令行运行XML文件 从命令行运行现有maven项目的XML文件 在这篇文章中&#xff0c;我们将使用命令行运行testng.xml。有多种场景需要使用命令行工具运行testng.xml。也许您已经创建了一个maven项目&#xff0c;现在想…

中文词向量训练-案例分析

1 数据预处理&#xff0c;解析XML文件并分词 #!/usr/bin/env python # -*- coding: utf-8 -*- # process_wiki_data.py 用于解析XML&#xff0c;将XML的wiki数据转换为text格式 import logging import os.path import sys from gensim.corpora import WikiCorpus import jieba…

Node.JS 中 Buffer 和 Stream 的区别

Node.JS 中 Buffer 和 Stream 的区别 缓冲区和流 今天我将讨论缓冲区和流。当我开始使用 Node.JS 时,我很难掌握这些概念,所以我分享了围绕这些概念的学习,以帮助开发人员。 首先,让我用简单的术语解释什么是缓冲和流。 缓冲只是当我们播放视频时收集数据的动作。 流是从服…

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时&#xff0c;发现有一个拼图demo&#xff0c;介绍拖…

ChatGPT付费创作系统V2.6.2独立版+前端

1、在宝塔新建个站点&#xff0c;php版本使用 7.4&#xff0c;把压缩包上传到站点根目录&#xff0c;运行目录设置为/public 2、导入根目录下数据库文件 3、修改数据库连接配置&#xff0c;后台配置文件是/.env 4、超管后台地址&#xff1a;http://域名/super 初始账号密码&…

蓝桥杯-最少刷题数

&#x1f4d1;前言 本文主要是【算法】——最少刷题数的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#x…

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;本文内容是我为复试准备的第二个项目 &#x1f4ab;欢迎…