当前位置: 首页 > news >正文

k8s学习-DaemonSet和Job

1.1DaemonSet是什么

Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有:
(1)在集群的每个节点上运⾏存储Daemon,比如glusterd或ceph。
(2)在每个节点上运行日志收集Daemon,比如flunentd或logstash。
(3)在每个节点上运行监控Daemon,比如PrometheusNodeExporter或collectd。

其实Kubernetes自己就在用DaemonSet运行系统组件。执行如下命令,如下所示。

kubectl get daemonset --namespace=kube-system
kubectl get daemonset --namespace=kube-flannel
[root@k8s-master ~]# kubectl get daemonset --namespace=kube-flannel
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-flannel-ds   3         3         3       3            3           <none>          10d
[root@k8s-master ~]# kubectl get daemonset --namespace=kube-flannel
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-flannel-ds   3         3         3       3            3           <none>          10d

DaemonSet kube-flannel-ds和kube-proxy分别负责在每个节点上运⾏flannel和kube-proxy组件,在通过查看Pod副本,看看各个节点的分布情况:

kubectl get pod --namespace=kube-system -o wide
[root@k8s-master ~]# kubectl get pod --namespace=kube-system -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP                NODE         NOMINATED NODE   READINESS GATES
coredns-7ff77c879f-ltqn4             1/1     Running   2          10d   10.244.0.8        k8s-master   <none>           <none>
coredns-7ff77c879f-xb6qm             1/1     Running   2          10d   10.244.0.9        k8s-master   <none>           <none>
etcd-k8s-master                      1/1     Running   2          10d   192.168.200.128   k8s-master   <none>           <none>
kube-apiserver-k8s-master            1/1     Running   2          10d   192.168.200.128   k8s-master   <none>           <none>
kube-controller-manager-k8s-master   1/1     Running   2          10d   192.168.200.128   k8s-master   <none>           <none>
kube-proxy-dcprp                     1/1     Running   2          10d   192.168.200.128   k8s-master   <none>           <none>
kube-proxy-nklr5                     1/1     Running   2          10d   192.168.200.129   k8s-node1    <none>           <none>
kube-proxy-slslc                     1/1     Running   4          10d   192.168.200.130   k8s-node2    <none>           <none>
kube-scheduler-k8s-master            1/1     Running   2          10d   192.168.200.128   k8s-master   <none>           <none>
metrics-server-7f6b85b597-k6b26      1/1     Running   2          10d   10.244.1.29       k8s-node1    <none>           <none>

1.2 DaemonSet的创建和运行

本小节以Prometheus Node Exporter为例演示用户如何运行自己的DaemonSet。Prometheus 是 流行的系统监控方案 , Node Exporter 是Prometheus的agent,以Daemon的形式运行在每个被监控节点
上。
vi node-exporter.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:name: node-exporter-daemonsetnamespace: agent
spec:selector:matchLabels:app: prometheustemplate:metadata:labels:app: prometheusspec:hostNetwork: truecontainers:- name: node-exporterimage: prom/node-exporterimagePullPolicy: IfNotPresentcommand:- /bin/node_exporter- --path.procfs- /host/proc- --path.sysfs- /host/sys-  --collector.filesystem.ignored-mount-points- ^/(sys|proc|dev|host|etc)($|/)volumeMounts:- name: procmountPath: /host/proc- name: sysmountPath: /host/sys- name: rootmountPath: /rootfsvolumes:- name: prochostPath:path: /proc- name: syshostPath:path: /sys- name: roothostPath:path: /

先创建个命名空间

kubectl create namespace agent

通过kubectl创建资源:

kubectl apply -f node-exporter.yaml

然后,通过kubectl查看Pod分布情况:

[root@k8s-master ~]# kubectl get pod --namespace=agent -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP                NODE        NOMINATED NODE   READINESS GATES
node-exporter-daemonset-5rrq4   1/1     Running   1          44h   192.168.200.129   k8s-node1   <none>           <none>
node-exporter-daemonset-hjkzs   1/1     Running   1          44h   192.168.200.130   k8s-node2   <none>           <none>

2.1 Job

容器按照持续运行的时间可分为两类:服务类容器和工作类容器。
服务类容器通常持续提供服务,需要⼀直运行,比如HTTPServer、Daemon等。工作类容器则是⼀次性任务,比如批处理程序,完成后容器就退出。
Kubernetes的Deployment、ReplicaSet和DaemonSet都用于管理服务类容器;
对于工作类容器,我们使用Job。先看⼀个简单的Job配置文件件myjob.yml。

vi myjob.yml

apiVersion: batch/v1
kind: Job
metadata:name: myjobnamespace: jobs
spec:template:metadata:labels:app: myjobspec:containers:- name: hello-jobimage: busyboximagePullPolicy: IfNotPresentcommand: ["echo", "hello  k8s job!"]restartPolicy: Never
kubectl apply -f myjob.yml

通过查看Job运行情况可以知道,其运行结束就结束了,如下图所示,变成了Completed状态。

kubectl get pod -n jobs
[root@k8s-master ~]# kubectl get pod -n jobs
NAME                              READY   STATUS      RESTARTS   AGE
myjob-krgdh                       0/1     Completed   0          44h

还可以通过查看Log看看这个Job留下的足迹:

kubectl logs myjob-krgdh -n jobs #查看日志
kubectl describe pods/myjob-krgdh --namespace jobs #查看job描述

ng)

[root@k8s-master ~]# kubectl logs myjob-krgdh -n jobs
hello  k8s job!
[root@k8s-master ~]# kubectl describe pods/myjob-krgdh --namespace jobs
Name:         myjob-krgdh
Namespace:    jobs
Priority:     0
Node:         k8s-node2/192.168.200.130
Start Time:   Sat, 27 Jan 2024 16:53:58 +0800
Labels:       app=myjobcontroller-uid=1a312a0b-b6eb-4219-958f-801edc224608job-name=myjob
Annotations:  <none>
Status:       Succeeded
IP:           10.244.2.14
IPs:IP:           10.244.2.14
Controlled By:  Job/myjob
Containers:hello-job:Container ID:  docker://0403ccea759585e45f39431bf3958a169211210ef948a0b7c1d4be1ed411e272Image:         busyboxImage ID:      docker-pullable://busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678Port:          <none>Host Port:     <none>Command:echohello  k8s job!State:          TerminatedReason:       CompletedExit Code:    0Started:      Sat, 27 Jan 2024 16:53:59 +0800Finished:     Sat, 27 Jan 2024 16:53:59 +0800Ready:          FalseRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-vz4wm (ro)
Conditions:Type              StatusInitialized       TrueReady             FalseContainersReady   FalsePodScheduled      True
Volumes:default-token-vz4wm:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-vz4wmOptional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

2.2 并行Job

如果希望能够同时并行运行多个Pod以提高Job的执行效率,Job提供了一个贴心的配置:parallesim。例如下面的配置,我们将上面的小Job改为并行运行的Pod数量设置为3。
修改 myjob.yml

apiVersion: batch/v1
kind: Job
metadata:name: testjob
spec:parallelism: 3template:metadata:labels:app: testjobspec:containers:- name: hello-jobimage: busyboximagePullPolicy: IfNotPresentcommand: ["echo", "hello  k8s job!"]restartPolicy: Never
kubectl get pod -o wide -n default

可以看出,Job一共启动了3个Pod,都是同时结束的(可以看到三个Pod的AGE都是相同的)。

[root@k8s-master ~]# kubectl get pod -o wide -n default
NAME                                READY   STATUS      RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
testjob-jmlzm                       0/1     Completed   0          44h   10.244.2.18    k8s-node2   <none>           <none>
testjob-r62f4                       0/1     Completed   0          44h   10.244.2.17    k8s-node2   <none>           <none>
testjob-vg7c6                       0/1     Completed   0          44h   10.244.2.16    k8s-node2   <none>           <none>

2.3 定时Job

Linux中有cron程序定时执行任务,Kubernetes的CronJob提供了类似的功能,可以定时执行Job。
vi hello-cron-job.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello-cron-jobnamespace: jobs
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: hello-cron-jobimage: busyboximagePullPolicy: IfNotPresentcommand: ["echo", "hello edison's k8s cron job!"]restartPolicy: OnFailure

上面加粗的配置是CronJob的独有配置,需要注意的是schedule,它的格式和Linux Cron一样,这里的"*/1 * * * *"代表每一分钟启动执行一次。对于CronJob,它需要的是jobTemplate来定义Job的模板。

kubectl get cronjob -n jobs
[root@k8s-master ~]# kubectl get cronjob -n jobs
NAME             SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello-cron-job   */1 * * * *   False     0        43h             43h

查看job

可以看到,在过去的三分钟里,每一分钟都启动了一个Pod,符合预期。

kubectl get jobs -n jobs
[root@k8s-master ~]# kubectl get jobs -n jobs
NAME                        COMPLETIONS   DURATION   AGE
hello-cron-job-1706350440   1/1           1s         43h
hello-cron-job-1706350500   1/1           1s         43h
hello-cron-job-1706350560   1/1           1s         43h

相关文章:

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上&#xff0c;每个Node都可能运行好几个副本。DaemonSet的不同之处在于&#xff1a;每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有&#xff1a; &#xff08;1&#xff09;在集群的每个节点上运⾏存…...

【开源】SpringBoot框架开发海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...

Windows10更新失败 错误 0x80070643、KB5034441的解决方法之二

Windows10更新失败 错误 0x80070643、KB5034441 在知乎Windows10更新失败 错误 0x80070643、KB5034441的原因分析和几个解决方法 - 知乎 参考文章进行操作&#xff0c;更详细信息自己看上面链接。 我电脑的硬盘是mbr格式&#xff0c;而且没有划分恢复分区。 Microsoft Windo…...

SQL中LIMIT的简单用法

在SQL的世界里&#xff0c;有一位神秘而强大的限制者&#xff0c;它就是 LIMIT。今天&#xff0c;我们将深入探讨这个神秘的SQL关键字&#xff0c;揭开它的神秘面纱&#xff0c;让你能够更好地使用它来操控你的数据。 背景 首先&#xff0c;让我们了解一下为什么我们需要 LIM…...

canvas自定义扩展方法:文字自动换行

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

【2024全网最详细】Google 搜索命令终极指南

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 你是否尝试过使用 Google 搜索作为免费的 SEO …...

R-kknn包-类别插值可视化绘制

前面的推文我们介绍了使用scikit-learn结合分类散点数据&#xff0c;构建机器学习分类模型并将模型结果可视化展示&#xff0c;具体链接如下&#xff1a; 机器学习和可视化还能一起这样用&#xff1f;Python教你全搞定。今天这篇推文&#xff0c;我们就使用R语言的kknn包进行类…...

探究HMAC算法:消息认证与数据完整性的完美结合

Hash-based Message Authentication Code&#xff08;基于哈希的消息认证码&#xff0c;简称HMAC&#xff09;算法作为一种广泛应用的消息认证码&#xff08;MAC&#xff09;算法&#xff0c;在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…...

10s 内得到一个干净、开箱即用的 Linux 系统

安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…...

轮转数组[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个整数数组nums&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…...

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring

IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置&#xff1a;依赖管理&#xff1a;内嵌服务器&#xff1a;开发体验&#xff1a; 实例Spring项目示例&#xff1a;Spring Boot项目示例&#xff1a; 总结强烈推荐专栏集锦写在最后 强烈…...

idea自动生成实体类

第一步&#xff1a;idea连接数据库 出现这个就连接成功 第二步&#xff1a;选择数据库 第三步&#xff1a;创建实体类 也可以点击数据库一下子全部创建 选择创建实体类所放位置 这样就完成了&#xff0c;点击看看对其做相应修改...

uniapp -- picker民族选择器

目录 一、实现思路 二、实现步骤 ①view部分展示 ② JavaScript 内容 ③css中样式展示 三、效果展示...

生信学习笔记1:学习如何用OPLS-DA分析代谢组数据(从入门到掌握)

偏最小二乘法(PLS)和正交偏最小二乘法(OPLS)是统计模型,用于寻找两组数据矩阵之间的关系。它们广泛应用于化学计量学、生物信息学、经济预测等领域。 偏最小二乘法(PLS) 偏最小二乘法是一种多变量分析方法,主要用于找到两组数据(通常是预测变量集和响应变量集)之间…...

CDR2024最新版本怎么下载?Coreldraw相关快捷键教程分享

想必从事平面设计的大咖们都知道&#xff0c;Coreldraw是一款优秀的图形设计软件&#xff0c;被广泛地运用在平面设计、包装设计、服装设计各个生活领域&#xff0c;因此了解一些关于CorelDRAW快捷键的知识是很有必要的。因为使用快捷键不仅使用起来方便快捷&#xff0c;而且提…...

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…...

人工智能时代:AI提示工程的奥秘 —— 驾驭大语言模型的秘密武器

文章目录 一、引言二、提示工程与大语言模型三、大语言模型的应用实践四、策略与技巧五、结语《AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录获取方式 一、引言 随着人工智能技术的飞速发展&#xff0c;大语言模型作为一种新…...

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试...

解密人工智能:探索机器学习奥秘

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…...

C语言第十四弹---函数递归

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数递归 1、递归是什么&#xff1f; 1.1、递归的思想 1.2、递归的限制条件 2、递归举例 2.1、举例1&#xff1a;求n的阶乘 2.1.1、分析和代码实现 2.1.2、…...

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…...

时间序列预测——GRU模型

时间序列预测——GRU模型 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元&#xff08;GRU&#xff09;模型&#xff0c;包括其理论基础…...

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 TeamCity 2023.11正式版下载 TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能&a…...

C语言:register类型变量

register—— 寄存器存储 register 是 C 语言中的一种存储类别&#xff08;Storage Class&#xff09;&#xff0c;它用于告诉编译器将变量存储在寄存器中。在 C 语言中&#xff0c;变量的存储位置可以是寄存器、堆栈或静态存储区&#xff0c;使用 register 存储类别可以帮助我…...

android 自定义下拉框

一、 简介&#xff1a; 原生Android 提供的spinner下拉框不怎么方便&#xff0c;样式有点丑。修改起来麻烦&#xff0c;于是就自己动手写了一下拉列表。 实现原理使用的是&#xff0c;popwindow弹框&#xff0c;可实现宽高自定义&#xff0c;下拉列表使用listview. 二、pop弹框…...

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…...

vue3 源码解析(5)— patch 函数源码的实现

什么是 patch 在 vue 中 patch 函数的作用是在渲染的过程中&#xff0c;比较新旧节点的变化&#xff0c;通过打补丁的形式&#xff0c;进行新增、删除、移动或替换操作&#xff0c;此过程避免了大量的 dom 操作&#xff0c;提升了运行的性能。 patch 执行流程 patch 函数整体…...

蓝桥杯2024/1/28----十二届省赛题笔记

题目要求&#xff1a; 2、 竞赛板配置要求 2.1将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。 2.2键盘工作模式跳线 J5 配置为 KBD 键盘模式。 2.3扩展方式跳线 J13 配置为 IO 模式。 2.4 请注意 &#xff1a; 选手需严格按照以上要求配置竞赛板&#xff0c;编写和调…...

STM32+ESP8266 实现物联网设备节点

目录 一、硬件准备 二、编译环境 三、源代码地址 四、说明 五、测试方法 六、所有测试工具和文档 本项目使用stm32F103ZEesp8266实现一个物联网的通信节点&#xff0c;目前支持的协议有mqtt&#xff0c;tcp。后续会持续更新&#xff0c;增加JSON&#xff0c;传感器&#…...

免费的ChatGPT网站(7个)

还在为找免费的chatGPT网站或者应用而烦恼吗&#xff1f;博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI语言大模型&#xff0c;我们都来接触一下吧。 免费&#xff01;免费&#xff01;免费&#xff01;...&#xff0c;建议收藏保存。 1&…...