【k8s资源调度--DaemonSet】

1、什么是守护进程

有以下这样一个商品场景:
1、用户在商城查询商品信息,查询商品信息的时候需要登录用户,如果用户想要下单,需要提交到订单服务,最后下单完成后,需要更新仓库的商品数量信息。
2、如果每一个流程都是后端的一个微服务pod形式,那么如果在某个环节出错,那我们需要去查日志,首先需要去查询商品微服务这个Pod的日志,如果日志没有错误信息,在去查用户这个微服务的Pod日志,如果没有,继续查询其他的日志。
3、如果每次这样去查询的日志的时候,就会很麻烦,不利于解决问题。
4、这次有人会想,那每个node上都装一个日志收集器就可以了,这样其实也可以,但k8s给我们提供了一种更好的的方案----守护资源。

在这里插入图片描述

2、配置文件

apiVersion: apps/v1
kind: DaemonSet   # 创建 DaemonSet 守护资源
metadata:
  name: fluentd  # DaemonSet 名字
spec:
  selector:   # 选择器
    matchLabels: 
    app: logging  # 选择器通过标签匹配pod节点
  template:
    metadata:
      labels:   # 标签
        app: logging
        id: fluentd
      name: fluentd  # pod的名字 
    spec:
      containers:
      - name: fluentd-es  # 容器名字
        image: agilestacks/fluentd-elasticsearch:v1.3.0
        env:   # 环境变量
        - name: FLUENTD_ARGS  # 环境变量的key
          value: -qq          # 环境变量的值
        volumeMounts:   # 加载数据卷,避免数据丢失
        - name: containers  # 数据卷的名字
          mountPath: /var/lib/docker/containers # 数据卷挂载到容器的哪个目录
        - name: varlog  # 数据卷名字
          mountPath: /var/log
      volumes: # 定义数据卷
      - hostPath:  # 数据卷类型,主机路径的模式,也就是与node共享目录
          path: /var/lib/docker/containers  # node中的共享目录
        name: containers  #定义数据卷名称
      - hostPath:
          path: /var/log
        name: varlog

3、使用DaemonSet守护进程

  • DaemonSet会忽略Node的unschedulable状态,有两种方式来指定Pod只运行在指定的Node节点上:
  • nodeSelector:只调度到匹配指定label的Node上
  • nodeAffinity:功能更丰富的Node选择器,比如支持集合操作
  • podAffinity:调度到满足条件的Pod所在的Node上

3.1 创建DaemonSet(不添加选择器)会如何?

如果在创建DaemonSet的时候,不添加选择器

在这里插入图片描述

创建资源的时候会提示我们必须要设置选择器

[root@k8s-master ~]# kubectl create -f fluentd.yaml
The DaemonSet "fluentd" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"logging", "id":"fluentd"}: `selector` does not match template `labels`

3.2 创建DaemonSet资源(添加选择器)

[root@k8s-master ~]# kubectl create -f fluentd.yaml
daemonset.apps/fluentd created

3.3 查看daemonset的状态

可以看到给我们创建了2个fluentd资源,reday 0个,up-to-date 2个

[root@k8s-master ~]# kubectl get daemonsets.apps  fluentd
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
fluentd   2         2         0       2            0           <none>          18s

3.4 查看daemonset的描述信息

可以看到创建了两个pod信息

[root@k8s-master ~]# kubectl describe daemonsets.apps  fluentd
Name:           fluentd
Selector:       app=logging
Node-Selector:  <none>
Labels:         <none>
Annotations:    deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 2
Current Number of Nodes Scheduled: 2
Number of Nodes Scheduled with Up-to-date Pods: 2
Number of Nodes Scheduled with Available Pods: 0
Number of Nodes Misscheduled: 0
Pods Status:  0 Running / 2 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=logging
           id=fluentd
  Containers:
   fluentd-es:
    Image:      agilestacks/fluentd-elasticsearch:v1.3.0
    Port:       <none>
    Host Port:  <none>
    Environment:
      FLUENTD_ARGS:  -qq
    Mounts:
      /var/lib/docker/containers from containers (rw)
      /varlog from varlog (rw)
  Volumes:
   containers:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/docker/containers
    HostPathType:
   varlog:
    Type:          HostPath (bare host directory volume)
    Path:          /var/log
    HostPathType:
Events:
  Type    Reason            Age   From                  Message
  ----    ------            ----  ----                  -------
  Normal  SuccessfulCreate  35s   daemonset-controller  Created pod: fluentd-5rz5d
  Normal  SuccessfulCreate  35s   daemonset-controller  Created pod: fluentd-6kpbr

3.5 查看pod状态

查看到fluentd的这个pod还在创建中

[root@k8s-master ~]# kubectl get pod
NAME            READY   STATUS              RESTARTS      AGE
dns-test        1/1     Running             1 (16h ago)   16h
fluentd-5rz5d   0/1     ContainerCreating   0             54s
fluentd-6kpbr   0/1     ContainerCreating   0             54s

3.6 查看pod的描述信息

从events事件中可以看到在拉取镜像和启动pod,并且已经启动成功

[root@k8s-master ~]# kubectl describe  po fluentd-5rz5d
Name:             fluentd-5rz5d
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-01/10.10.10.177
Start Time:       Sat, 24 Feb 2024 19:43:29 +0800
Labels:           app=logging
                  controller-revision-hash=5c58fcb7d4
                  id=fluentd
                  pod-template-generation=1
Annotations:      <none>
Status:           Running
IP:               10.2.2.28
IPs:
  IP:           10.2.2.28
Controlled By:  DaemonSet/fluentd
Containers:
  fluentd-es:
    Container ID:   docker://d5bf8b2018b02edb79e410041a0f0764efb472801ab446ff672631ef1904ff7e
    Image:          agilestacks/fluentd-elasticsearch:v1.3.0
    Image ID:       docker-pullable://agilestacks/fluentd-elasticsearch@sha256:9a5bd621f61191ac3bc88b8489dee4b711b22bf675cb5d99c7f0a99603e18b82
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 24 Feb 2024 19:45:30 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      FLUENTD_ARGS:  -qq
    Mounts:
      /var/lib/docker/containers from containers (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-rtc4b (ro)
      /varlog from varlog (rw)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  containers:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/docker/containers
    HostPathType:
  varlog:
    Type:          HostPath (bare host directory volume)
    Path:          /var/log
    HostPathType:
  kube-api-access-rtc4b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                             node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists
                             node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                             node.kubernetes.io/unreachable:NoExecute op=Exists
                             node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  2m6s  default-scheduler  Successfully assigned default/fluentd-5rz5d to k8s-node-01
  Normal  Pulling    2m6s  kubelet            Pulling image "agilestacks/fluentd-elasticsearch:v1.3.0"
  Normal  Pulled     7s    kubelet            Successfully pulled image "agilestacks/fluentd-elasticsearch:v1.3.0" in 1m58.498496853s
  Normal  Created    6s    kubelet            Created container fluentd-es
  Normal  Started    6s    kubelet            Started container fluentd-es

3.7 Pod已经成功运行,并且运行在了非master节点上

node节点上并没有我们设置的选择器标签”app=logging“,他会自动创建资源并且运行在非master节点上。

[root@k8s-master ~]# kubectl get po
NAME            READY   STATUS    RESTARTS      AGE
dns-test        1/1     Running   1 (16h ago)   16h
fluentd-5rz5d   1/1     Running   0             2m14s
fluentd-6kpbr   1/1     Running   0             2m14s
[root@k8s-master ~]# kubectl get po  -o wide
NAME            READY   STATUS    RESTARTS      AGE     IP          NODE          NOMINATED NODE   READINESS GATES
dns-test        1/1     Running   1 (16h ago)   16h     10.2.1.38   k8s-node-02   <none>           <none>
fluentd-5rz5d   1/1     Running   0             2m28s   10.2.2.28   k8s-node-01   <none>           <none>
fluentd-6kpbr   1/1     Running   0             2m28s   10.2.1.50   k8s-node-02   <none>           <none>


# node节点上并没有我们设置的选择器标签”app=logging“
[root@k8s-master ~]#  kubectl get nodes  --show-labels
NAME          STATUS   ROLES           AGE     VERSION   LABELS
k8s-master    Ready    control-plane   4d21h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node-01   Ready    <none>          4d20h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node-01,kubernetes.io/os=linux
k8s-node-02   Ready    <none>          2d21h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node-02,kubernetes.io/os=linu

3.8 给node-01节点添加一个标签

[root@k8s-master ~]# kubectl label nodes k8s-node-01  type=microsvc --overwrite
node/k8s-node-01 labeled
[root@k8s-master ~]# kubectl get nodes  --show-labels
NAME          STATUS   ROLES           AGE     VERSION   LABELS
k8s-master    Ready    control-plane   4d22h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node-01   Ready    <none>          4d21h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node-01,kubernetes.io/os=linux,type=microsvc
k8s-node-02   Ready    <none>          2d21h   v1.25.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node-02,kubernetes.io/os=linux

3.9 通过edit选项设置一个node选择器

在这里插入图片描述

3.10 查看DaemonSet资源的状态

如下代码中可以看到DaemonSet的资源变为了1个,reday也是1个,这是由于刚才我们给node-01节点打上了标签,所以只在node-01上有pod,node-02上是没有,如果给node-02上打上标签,node-02上也有会这个pod。

[root@k8s-master ~]# kubectl get daemonsets.apps  fluentd
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
fluentd   1         1         1       1            1           type=microsvc   39m


[root@k8s-master ~]# kubectl get po -o wide
NAME            READY   STATUS    RESTARTS      AGE   IP          NODE          NOMINATED NODE   READINESS GATES
dns-test        1/1     Running   1 (17h ago)   17h   10.2.1.38   k8s-node-02   <none>           <none>
fluentd-59k8k   1/1     Running   0             22s   10.2.2.29   k8s-node-01   <none>           <none>

3.11 给node-02也添加一个标签

[root@k8s-master ~]# kubectl label nodes k8s-node-02 type=microsvc
node/k8s-node-02 labeled
[root@k8s-master ~]# kubectl get daemonsets.apps  fluentd
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
fluentd   2         2         2       2            2           type=microsvc   42m
[root@k8s-master ~]# kubectl get po -o wide
NAME            READY   STATUS    RESTARTS      AGE     IP          NODE          NOMINATED NODE   READINESS GATES
dns-test        1/1     Running   1 (17h ago)   17h     10.2.1.38   k8s-node-02   <none>           <none>
fluentd-59k8k   1/1     Running   0             3m35s   10.2.2.29   k8s-node-01   <none>           <none>
fluentd-hhtls   1/1     Running   0             5s      10.2.1.51   k8s-node-02   <none>           <none>

3.12 DaemonSet的滚动更新

不建议使用RollingUpdate,建议使用OnDelete模式,这样避免频繁更新导致资源的浪费

3.12.1 查看DaemonSet的默认更新方式

在这里插入图片描述

3.12.2 建议设置为OnDelete

在这里插入图片描述

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

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

相关文章

K线实战分析系列之五:刺透形态——多方反攻信号

K线实战分析系列之五&#xff1a;刺透形态——多方反攻信号 一、刺透形态二、类似刺透形态三、刺透形态的总结 一、刺透形态 阴线在前&#xff0c;阳线在后显示市场曾经跌到了低位&#xff0c;但是在盘中又将价格收回&#xff0c;并且多方收复了前一天大部分的失地 二、类似刺…

用旧版本Matlab训练的 classregtree类的决策树model 在新版Matlab无法使用的解决方法

背景 想把原来r2015a版本的代码升级到r2021b&#xff0c;用2021b运行原来的代码时&#xff0c;报错 搜索发现R2019a中已经去除了classregtree函数和classregtree类 解决方法 新版本的Matlab load(‘TreeModel.mat’)后&#xff0c;查看TreeModel的值 val 分类的决策树1 …

Ubuntu安装中文拼音输入法

目录 1.添加中文语言支持2.安装fcitx输入法框架3.设置fcitx为系统输入法4.安装搜狗输入法5.安装一些搜狗输入法的依赖6.设置输入法7.测试搜狗中文输入法8.测试版本参考资料 1.添加中文语言支持 settings -> region & language -> Manage Installed Languages -> …

【海思新品型号总结】

海思新品如下型号&#xff1a; 1、 Hi3559AV100 pin to pin 老版本&#xff1b; 2、Hi3403V100 4K/60 丝印1&#xff1a;108DC2910 开发包型号SS928V100 不可溯源&#xff1b; 丝印2&#xff1a;GK7608V100 开发包型号SS928V100 可国产化证明 3、Hi3519AV200 芯片丝印&#x…

Maven - 代码混淆proguard-maven-plugin vs 代码加密classfinal

文章目录 proguard-maven-plugin 代码混淆官网地址入门小结 ClassFinal 代码加密介绍Gitee项目模块说明功能特性环境依赖使用说明下载加密maven插件方式无密码模式机器绑定启动加密后的jartomcat下运行加密后的war 版本说明协议声明 classfinal实战工程pom编译打包配置文件运行…

MySQL知识点总结(五)——锁

MySQL知识点总结&#xff08;五&#xff09;——锁 锁分类表锁 & 行锁如何添加表锁&#xff1f;如何添加行锁&#xff1f; 读锁 & 写锁行锁 & 间隙锁&#xff08;gap lock&#xff09;& 临键锁&#xff08;next-key lock&#xff09; 加锁机制分析可重复读隔离…

【雷达指标】MTI/MTD性能

目录 一、MTI/MTD性能的指标描述1.1 杂波衰减和对消比1.2 改善因子1.3 杂波中的可见度 二、MATLAB仿真参考文献 雷达通常使用MTI/MTD来进行杂波抑制&#xff0c;采用杂波衰减、对消比、改善因子、杂波中的可见度来描述其性能。 一、MTI/MTD性能的指标描述 1.1 杂波衰减和对消比…

在 where子句中使用子查询(一)

目录 子查询返回单行单列 查询公司工资最低的员工信息 查找公司雇佣最早的员工信息 子查询返回单行多列 查询与 ALLEN 工资相同&#xff0c;职位相同的所有员工信息 子查询返回多行单列 IN 操作 查询职位是“MANAGER”的所有员工的薪水 Oracle从入门到总裁:https://bl…

医院信息系统(HIS):一文扫盲,算是所有信息系统里面复杂的

大家好&#xff0c;我是贝格前端工场&#xff0c;本期继续分享常见的B端管理系统&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是HIS系统 HIS系统&#xff08;Hospital Information System&#xff09;是医院信…

【更换yarn的位置】解决yarn和nodejs不在同一盘下产生的某些命令应用失败问题

具体问题我记得是command fail什么error&#xff0c;记不太清楚了&#xff0c;文章主要写了如何替换yarn路径&#xff0c;希望可以帮助到大家。

Pycharm服务器配置与内网穿透工具结合实现远程开发的解决方法

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

【Linux】docker构建环境编译运行linux内核

文章目录 1. 使用docker构建linux内核编译运行环境1.1. 为普通用户安装docker并验证是否安装成功1.1.1. 安装docker稳定版1.1.2. 启动docker1.1.3. 将当前用户加入docker用户组1.1.4. 验证docker是否安装成功 1.2. docker基本使用1.2.1. 列出所有镜像1.2.2. 查看当前所有容器的…

liunx gcc编译器 以及编译过程

liunx编译器gcc 编译过程 编译过程gccgcc的条件编译gcc 编译指令动态库和静态库 编译过程 预处理 &#xff08;1&#xff09;将所有的#define删除&#xff0c;并且展开所有的宏定义。说白了就是字符替换 &#xff08;2&#xff09;处理所有的条件编译指令&#xff0c;#ifdef …

渗透工具——kali中wpscan简介

一、什么是wpscan 1、常用于做用户名枚举爆破 2、WPScan是一个扫描 WordPress 漏洞的黑盒子扫描器&#xff0c;它可以为所有 Web 开发人员扫描 WordPress 漏洞并在他们开发前找到并解决问题。我们还使用了 Nikto &#xff0c;它是一款非常棒的Web 服务器评估工具&#xff0c;…

1.系统调用接口

1. 系统调用接口 1.1 Linux系统调用概念 系统调用&#xff08;systemcall&#xff09;&#xff1a; 所有的操作系统在内核里都有一些内建的函数&#xff0c;这些函数完成对硬件的访问和对文件的打开、读、写、关闭等操作。 Linux 系统中称这些函数为系统调用。这些函数实现了…

TypeScript基础知识点

TypeScript 简介和发展 TypeScript 是一种由微软开发的开源编程语言&#xff0c;其设计目标是为了解决 JavaScript 在大规模应用开发时所面临的类型安全和可维护性问题。TypeScript 的诞生背景可以追溯到2012年&#xff0c;当时随着Web应用程序复杂度的日益增长&#xff0c;J…

五、使用脚手架

五、使用脚手架 5.1 简单的实现 创建一个 School 组件 <template> <div><h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{address}}</h2> </div> </template><script> export default {name: "S…

python[5]

数据容器的通用操作 通用 for 循环 便历容器&#xff08;字典是遍历Key&#xff09; max 容器内最大元素 min( ) 容器内最小元素 len( ) 容器元素个数 list( ) 转换为列表 tuple( ) 转换为元组 str( ) 转换为字符串 set( ) 转换为集合 sorted(序列, reverse True) 排序&#…

【JavaEE Spring 项目】在线 OJ 系统

在线OJ系统 1. 需求2. 最终页面展示3. 需求分析4. 创建 Spring 项目5. 前后端交互接口约定6. 后端功能实现6.1 编译运行模块6.1.1 进程和线程的相关知识6.1.2 Java 中的多进程编程6.1.3 进程间通信 -- 文件6.1.4 Java中的 IO 知识6.1.5 封装创建进程执行命令工具类6.1.6 实现编…

遍历的三种算法——递归、非递归、层次

一、递归遍历方法&#xff1a; 先序遍历&#xff1a; Status PreOrderTraverse(Tree *t) {if (t NULL) return OK;//合法性检查else {visit(t->data);//访问根节点PreOrderTraverse(t->lchild);//递归遍历左子树PreOrderTraverse(t->rchild);//递归遍历右子树} } …