【k8s】deamonset文件和说明

目录

deamonset的相关命令

deamonset的定义

deamonset的使用场景

deamonset的例子

deamonset字段说明

serviceAccountName

DaemonSet的结构及其各个部分的作用


deamonset的相关命令
 

#查看<name-space>空间内有哪些deamonset
kubectl get DaemonSet  -n  <name-space>   

#查看<pod name>的deamonset
kubectl describe DaemonSet -n <name-space>  <pod name>

#导出 <name-space>空间内<pod name>的deamonset
kubectl get daemonset <pod name> -n <name-space>  -o yaml > daemonset.yaml

#应用某个deamonset  (给k8s加载这个DaemonSet文件)
kubectl create -f nginx-deployment.yaml

deamonset的定义

官方说明:

        DaemonSet 是 Kubernetes 集群中的一种资源对象,用来确保所有(或某些特定)节点上都运行该容器的副本。DaemonSet 确保当有节点加入集群时,节点上会启动你指定的容器;同时当节点从集群中移除时,这些容器也会被垃圾回收。

举个例子,如果你有一个名为 daemonset.yaml 的文件,你可以通过以下命令将其应用到 Kubernetes 集群:

kubectl apply -fdaemonset.yaml

这个命令告诉 kubectl 根据 daemonset.yaml 文件中定义的配置来在集群中创建或更新资源

大白话:

这个文件是一个K8S资源描述文件,它定义了一个DaemonSet资源,

DaemonSet告诉K8S如何在集群所有(或部分)节点上运行Pod的副本。

DaemonSet 最常见的应用场景之一是在节点上部署系统级守护进程。例如,Kubernetes 官方提供的 kube-proxy 和 kube-dns 组件都是以 DaemonSet 的形式运行在每个节点上的。

deamonset的使用场景

1,根据dockerfile文件生成了一个pod的镜像 

让k8s 把这个pod镜像要在哪些节点上运行,需要哪些资源(port,内存等),就需要一个配置文件告诉k8s,这个就是DaemonSet文件。

2,配置DaemonSet文件,告诉K8s在哪些节点运行这个pod镜像,给这个pod镜像分配什么资源等。

3,给k8s加载这个DaemonSet文件

deamonset的例子

    在下面这个 YAML 文件中,我们定义了一个 Deployment 对象,它的主体部分(spec.template 部分)是一个使用 Nginx 镜像的 Pod,而这个 Pod 的副本数是 2(replicas=2)。

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment    #这个pod的名字

  labels:

    app: nginx

spec:

  replicas: 2

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx             #pod 内第一个容器的名字

        image: nginx:1.7.9   #<---镜像的id,确保这个镜像已经拉到本地了

        ports:

        - containerPort: 80

使用下面的命令给k8s加载这个DaemonSet文件

$ kubectl create -f nginx-deployment.yaml

这样k8s就根据DaemonSet的要求把这个pod 在集群的节点上运行了。

deamonset字段说明

以下是该文件内容的详细解释:
- `apiVersion: apps/v1`: 使用的API版本,表示这是一个稳定版本的DaemonSet。
- `kind: DaemonSet`: 资源类型是DaemonSet。
- `metadata`: 包含用于描述DaemonSet的元数据。
  - `annotations`: 包含键值对的注释信息。
    - `deprecated.daemonset.template.generation`: 这个注解表示这个DaemonSet的控制器检测到template是第二次改变。
  - `creationTimestamp`: DaemonSet资源创建的时间标记。
  - `generation`: 表示DaemonSet的版本,每次修改DaemonSet时都会递增。
  - `name`: DaemonSet的名字是`engine-peon`。
  - `namespace`: DaemonSet被创建在`product-storage`命名空间下。
  - `resourceVersion`: 内部资源的版本号。
  - `uid`: 资源的唯一id。
- `spec`: DaemonSet的规格。
  - `revisionHistoryLimit`: DaemonSet的修订历史限制,表示会保持10个历史的DaemonSet revision。
  - `selector`: 用于选择Pod的标签。
    - `matchLabels`: DaemonSet管理的Pod必须具备的标签。
  - `template`: 用于创建Pod的模板。
    - `metadata`: 模板的元数据。
    - `spec`: 描述创建Pod的详细内容。
      - `affinity`: Pod的亲和性设置。
        - `nodeAffinity`: 设置Pod调度的节点亲和性限制。
      - `containers`: 定义了容器的列表。
        - `image`: 使用的容器镜像。
        - `name`: 容器的名称。
        - `ports`: 容器所开放的端口设定。
        - `resources`: 资源限制和请求。
        - `securityContext`: 安全上下文设定。
        - `terminationMessagePath`: 容器停止时输出的信息存放路径。
        - `volumeMounts`: 容器挂载的卷。
      - `dnsPolicy`: DNS策略。
      - `hostNetwork`: 是否使用主机网络。
      - `initContainers`: 在主容器运行前运行的初始化容器。
      - `priorityClassName`: 优先级类名。
      - `restartPolicy`: Pod的重启策略。
      - `schedulerName`: 使用的调度器名称。
      - `serviceAccount`: 使用的服务账号。
      - `terminationGracePeriodSeconds`: 清理Pod所需要等待的时间。
      - `volumes`: Pod上挂载的卷。
  - `updateStrategy`: 更新策略设置,如何应对Pod的更新。
- `status`: DaemonSet的当前状态信息。
  - `currentNumberScheduled`: 当前应该运行的Pod数量。
  - `desiredNumberScheduled`: 追求的目标Pod数量。
  - `numberAvailable`: 可用Pod数。
  - `numberMisscheduled`: 错误调度的Pod数。
  - `numberReady`: 准备就绪的Pod数。
  - `observedGeneration`: DaemonSet控制器最后一次观察到的`generation`。
  - `updatedNumberScheduled`: 更新版的Pod的数量。

总之,这个DaemonSet用于部署名为`engine-peon`的Pod,该Pod将在标签为`role/stor-worker=true`的节点上运行,并且整个集群中每个符合条件的节点会运行一个该DaemonSet管理的Pod。


当创建DaemonSet资源时,Kubernetes的控制平面会接收这个YAML配置,并根据其中的描述创建并管理DaemonSet所管理的Pods。DaemonSet确保在集群中的每个符合条件的节点上运行指定的Pod副本。继续解释一下DaemonSet中的其他关键组件:

### selector
`selector`字段用于告诉DaemonSet如何找到它应该管理的Pods。它是通过匹配标签来识别Pods。
- `matchLabels`: 这个键值对与`template.metadata.labels`中定义的标签一致,确保DaemonSet知道只应该管理哪些具有这些标签的Pods。在这里,匹配标签为`app: example`。

### template
这部分定义了当DaemonSet创建新的Pod副本时,这些Pod的样子。这个template是模板,用于生成具体的Pod实例。
- `metadata.labels`: 在`template`下的`metadata`中,`labels`定义了Pod的标签,在这个例子中是`app: example`。这个标签确保了Pod可以被上面提及的`selector`正确匹配。

### template.spec
`template`下的`spec`字段详细定义了Pod内部的配置,如下所示:
- `containers`: 这个列表包含了在Pod中运行的容器的定义。每个容器都需要有一个名字,并且可以指定要使用的镜像、端口、环境变量等一系列参数。

对于这个示例DaemonSet来说,意味着集群中的每个符合条件的节点上都会运行一个名为`example-container`的容器,该容器采用的镜像是`nginx`。DaemonSet控制器会自动在新增的符合条件的节点上创建Pod,并且如果有节点被删除,相应的Pod也会被清理。

DaemonSet常用于需要在集群的每个节点上运行的服务,比如日志收集器、监控代理等。这种分布在每个节点的特性确保了这些服务可以收集到所有节点的数据或监控节点的状态。

serviceAccountName

简介:

是Pod使用的Service Account的名称,Pod与Kubernetes API进行交互时,例如拉取配置信息,更新资源状态等,需要对API请求进行授权。通过Service Account,Kubernetes可以控制Pod对API的访问权限,确保它只能访问它需要的资源。

详细说明:

在Kubernetes的`DaemonSet`配置文件的`template`下的`spec`部分,可以指定`serviceAccount`或`serviceAccountName`。据我所知截止到我的知识截止点,`DaemonSet`中是不具有`serviceAccount`字段的,只有`serviceAccountName`字段。下面是`serviceAccountName`字段的用途:

- `serviceAccountName`: 该字段用于指定Pod使用的Service Account的名称。Service Account在Kubernetes中提供了一个身份认证机制,用于给Pod授予访问Kubernetes API的权限。当Pod需要与Kubernetes API进行交互时,例如拉取配置信息,更新资源状态等,需要对API请求进行授权。通过Service Account,Kubernetes可以控制Pod对API的访问权限,确保它只能访问它需要的资源。

当你在一个Pod模板中指定`serviceAccountName`时,所有由这个模板创建的Pod都会自动挂载一个包含指定Service Account凭据的秘钥。这意味着Pod中运行的容器将能够使用这些凭据与Kubernetes API进行交互。

通常,Service Account与特定的访问控制策略相关联,这些策略是通过Role和RoleBinding(或ClusterRole和ClusterRoleBinding,如果需要集群级别的访问权限)来定义的。这样,你可以对Pod进行精细化的权限管理,只给予它们完成其工作所需要的最小权限。

如果你在一个`DaemonSet`配置中看到了`serviceAccount`字段,这可能是一个定制化的Kubernetes发行版支持的特定扩展。不过,根据最常见的Kubernetes API文档,通常只使用`serviceAccountName`来声明应该与Pod关联的Service Account。

DaemonSet的结构及其各个部分的作用

在 DaemonSet 对象中,有以下几个部分:

  • metadata:元数据部分包含了对象的名称、命名空间、标签等信息。
  • spec:规格部分包含了 DaemonSet 对象的规格,如选择器、Pod 模板等。
  • status:状态部分包含了 DaemonSet 对象的当前状态信息,如运行中的 Pod 数量等。

 

其中,spec 部分是 DaemonSet 对象中最重要的部分,它包含了以下几个字段:

  • selector:指定了哪些节点需要运行 Pod 副本。可以使用节点标签选择器指定节点的标签,也可以使用节点名称选择器指定节点的名称。
  • template:指定了要运行在节点上的 Pod 模板。模板中可以指定容器镜像、启动命令等信息。
  • updateStrategy:指定了 DaemonSet 的更新策略。默认情况下,DaemonSet 会在每个节点上运行一个 Pod 副本,如果需要更新 Pod 版本,则会逐个节点进行更新。可以使用 RollingUpdate 策略实现平滑的更新过程,也可以使用 OnDelete 策略实现在节点删除时更新 Pod 版本。

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

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

相关文章

华为OD机试 - 两个字符串间的最短路径问题(Java JS Python C)

题目描述 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 "ABCABBA",B字符串为 "CBABAC" 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,A) 为水…

普中STM32-PZ6806L开发板(HAL库函数实现-USART2 中断接收)

简介 实现USART2 的 中断接收&#xff0c; 发送数据。电路原理图 USART2接线 原理图USART2 在主芯片引脚 实物图 其他知识 APIs stm32f1xx_hal_uart.h /* 堵塞发送, pData是发送数据, Size发送数据大小, Timeout是超时时间 */ HAL_StatusTypeDef HAL_UART_Transmit(UAR…

md文件图片上传方案:Github+PicGo 搭建图床

文章目录 1. PicGo 下载2. 配置Github3. 配置PicGo4. PicGo集成Typora4.1 picGo监听端口设置 5. 测试 1. PicGo 下载 下载地址&#xff1a;https://molunerfinn.com/PicGo/ 尽量下载稳定版本 2. 配置Github 1. 创建一个新仓库&#xff0c;用于存放图片 2. 生成一个token&a…

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;…

[密码学]ECC加密

椭圆曲线加密 Ellipse Curve Cryptography 椭圆曲线上的离散对数问题 Ellipse Curve Discrete logarithm Problem 椭圆曲线 注意积分公式的分母&#xff0c;椭圆曲线由此得名。这种曲线和椭圆一点不像。 离散对数&#xff1a; yg^x mod p,对于给定的g,x,p求y很容易&#…

JVM工作原理与实战(三):字节码文件的组成

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、基础信息 1.Magic魔数 2.主副版本号 3.其他信息 二、常量池 1.案例解析 三、方法 1.方法介绍 2.案例解析 四、字段 五、属性 总结 前言 JVM作为Java程序的运行环境&…

【致远OA】获取指定人员的协同已办列表

接口说明 按人员编码获取所有待办事项&#xff08;V6.0接口更新:不在传入ticket&#xff0c;改为传memberId人员ID&#xff09; 兼容版本 since V7.0 请求方式 V6.0之前http请求方式&#xff1a;GET http://ip:port/seeyon/rest/affairs/done 如 http://127.0.0.1/seeyon/…

Builder建造者模式(对象创建)

Builder 链接&#xff1a;建造者模式实例代码 解析 目的 在软件系统中&#xff0c;有时候面临着“一个复杂对象”的创建工作&#xff0c;其通常由各个部分的子对象用一定的算法构成&#xff1b;由于需求的变化&#xff0c;这 个复杂对象的各个部分经常面临着剧烈的变化&…

深入理解C#中的隐式类型转换

深入理解C#中的隐式类型转换 在C#中&#xff0c;类型转换可以是显式的或隐式的。理解这些转换的工作原理对于编写高效、可维护的代码至关重要。本文将深入探讨C#中的隐式类型转换&#xff0c;特别关注赋值操作符&#xff08;&#xff09;在隐式转换中的角色&#xff0c;并对比C…

FL Studio 21最新版本for mac 21.2.2.3740中文解锁版2024最新图文安装教程

FL Studio 21最新版本for mac 21.2.0.3740中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境&#xff08;IDE&#xff09;来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发的。…

三种方式在ASP.NET Core中实现代理功能请求获取数据的接口(以请求百度统计数据接口为例)

一、定义请求数据属性 TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表 //定义属性:TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表public class ToResponseBody{[JsonPropertyName("Target…

安装 Node.js、npm

安装 nodejs 安装Node.js的最简单的方法是通过软件包管理器。 Node.js官网&#xff1a;https://nodejs.org/en/download/ cd /usr/local/src/wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz xz -d node-v18.16.0-linux-x64.tar.xz tar -xf node…

使用react+vite开发项目时候,部署上线后刷新页面无法访问解决办法

说一下我这边的环境和使用的路由模式&#xff1a;vitereactBrowserRouter路由模式&#xff0c;所以如果你和我一样的话&#xff0c;可以试试我的这种解决办法&#xff0c;我是将项目打包后直接丢到服务器上的目录里面&#xff0c;然后配置nginx直接访问根目录。 我的nginx配置…

Android 模拟器检测

文章目录 普遍检测代码如下&#xff1a;推荐模拟器检测方法&#xff1a;设备信息检测代码&#xff1a;蓝牙检测代码&#xff1a;光传感器检测代码&#xff1a;CPU检测代码&#xff1a; 最近看到某客户端有一个检测模拟器的方法&#xff0c;我正常手机结果被判断是模拟器了&…

Python 自学(一) 之语言基础

目录 0. 前言 1. 声明python解释器 2. 变量的类型 type() id() P35 3. 类型转换 str() P37 4. 换行 r"" P40 5. 常用类型转换函数 P41 6. 特殊的运算符 // ** P42 7. 特殊的比较运算符 0 < a <100 P45 8. 函数输入 input() P51 9. print…

Windows使用IIS服务搭建WebDAV站点结合内网穿透公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

基于mediapipe的人体姿态估计模型——没有GPU依然速度飞起

关于人体姿态检测模型,我们前期也介绍过了很多相关的模型,比如基于Yolo-NAS的姿态检测以及基于YOLOv8的人体姿态检测,而人体姿态估计一直是计算机视觉任务中比较重要的一个模型。但是基于YOLO系列的人体姿态检测模型需要较大的算力,且很难在CPU模型上快速的运行。 基于medi…

【漏洞复现】OpenSSH ProxyCommand命令注入漏洞(CVE-2023-51385)

文章目录 前言一、漏洞背景二、漏洞详情三、影响范围四、漏洞验证 前言 OpenSSH存在命令注入漏洞&#xff08;CVE-2023-51385&#xff09;&#xff0c;攻击者可利用该漏洞注入恶意Shell字符导致命令注入。 一、漏洞背景 OpenSSH 是 SSH &#xff08;Secure SHell&#xff09…

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现 之前&#xff0c;我们依据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;提出了新的YOLOV1架构&#xff0c;并解决前向推理过程中的两个问题&#xff0c;继续按照此书进行YOLOV1的复现。 经典目标…

Qt(三):udp组播的发送与接收

1. 创建UDP套接字 使用QUdpSocket类创建一个UDP套接字。 udpSendnew QUdpSocket(this);udpRecenew QUdpSocket(this); 2. 绑定套接字 绑定套接字到一个本地地址和端口。可以使用bind()函数来完成。 如果要在组播中发送数据&#xff0c;可以将套接字绑定到一个通配符地址&#…