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上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有: (1)在集群的每个节点上运⾏存…...

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

Windows10更新失败 错误 0x80070643、KB5034441的解决方法之二
Windows10更新失败 错误 0x80070643、KB5034441 在知乎Windows10更新失败 错误 0x80070643、KB5034441的原因分析和几个解决方法 - 知乎 参考文章进行操作,更详细信息自己看上面链接。 我电脑的硬盘是mbr格式,而且没有划分恢复分区。 Microsoft Windo…...
SQL中LIMIT的简单用法
在SQL的世界里,有一位神秘而强大的限制者,它就是 LIMIT。今天,我们将深入探讨这个神秘的SQL关键字,揭开它的神秘面纱,让你能够更好地使用它来操控你的数据。 背景 首先,让我们了解一下为什么我们需要 LIM…...

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

【2024全网最详细】Google 搜索命令终极指南
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 你是否尝试过使用 Google 搜索作为免费的 SEO …...

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

探究HMAC算法:消息认证与数据完整性的完美结合
Hash-based Message Authentication Code(基于哈希的消息认证码,简称HMAC)算法作为一种广泛应用的消息认证码(MAC)算法,在现代信息安全领域起着至关重要的作用。本文将从算法原理、优缺点、实际应用等方面&…...

10s 内得到一个干净、开箱即用的 Linux 系统
安装 使用官方脚本安装我的服务器不行 官方脚本 mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) 下面是我的完整安装过程 mkdir /opt/instantbox cd /opt/instantbox 1.脚本文件 (这个没…...

轮转数组[中等]
优质博文:IT-BLOG-CN 一、题目 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中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行业有哪些证书含金量高?强烈推荐前言区别项目配置:依赖管理:内嵌服务器:开发体验: 实例Spring项目示例:Spring Boot项目示例: 总结强烈推荐专栏集锦写在最后 强烈…...

idea自动生成实体类
第一步:idea连接数据库 出现这个就连接成功 第二步:选择数据库 第三步:创建实体类 也可以点击数据库一下子全部创建 选择创建实体类所放位置 这样就完成了,点击看看对其做相应修改...
uniapp -- picker民族选择器
目录 一、实现思路 二、实现步骤 ①view部分展示 ② JavaScript 内容 ③css中样式展示 三、效果展示...
生信学习笔记1:学习如何用OPLS-DA分析代谢组数据(从入门到掌握)
偏最小二乘法(PLS)和正交偏最小二乘法(OPLS)是统计模型,用于寻找两组数据矩阵之间的关系。它们广泛应用于化学计量学、生物信息学、经济预测等领域。 偏最小二乘法(PLS) 偏最小二乘法是一种多变量分析方法,主要用于找到两组数据(通常是预测变量集和响应变量集)之间…...

CDR2024最新版本怎么下载?Coreldraw相关快捷键教程分享
想必从事平面设计的大咖们都知道,Coreldraw是一款优秀的图形设计软件,被广泛地运用在平面设计、包装设计、服装设计各个生活领域,因此了解一些关于CorelDRAW快捷键的知识是很有必要的。因为使用快捷键不仅使用起来方便快捷,而且提…...

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

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

Idea编写mapper.xml文件提示表名和字段
一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试...

解密人工智能:探索机器学习奥秘
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…...

C语言第十四弹---函数递归
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 函数递归 1、递归是什么? 1.1、递归的思想 1.2、递归的限制条件 2、递归举例 2.1、举例1:求n的阶乘 2.1.1、分析和代码实现 2.1.2、…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...