k8s笔记 | 高度调度
CronJob计划任务
简介:在k8s中周期性运行计划任务,与linux中的crontab相同;注意点 CornJob执行的时间是controller-manager的时间,所以一定要确保controller-manager的时间是准确的,另外cornjob
cron表达式
文章参考
┌─────────────秒 (0 - 59)│ ┌─────────────分钟 (0 - 59)│ │ ┌─────────────小时 (0 - 23)│ │ │ ┌─────────────日 (1 - 31)│ │ │ │ ┌─────────────月 (1 - 12)│ │ │ │ │ ┌─────────────周 (0 - 6) (0 表示周日)│ │ │ │ │ │ ┌─────────────年 (可选,1970 - 2099)│ │ │ │ │ │ ││ │ │ │ │ │ │* * * * * * *
配置文件
cron-job-pd.yaml
apiVersion: batch/v1
kind: CronJob # 定时任务
metadata:name: cron-job-test # 定时任务名字
spec:concurrencyPolicy: Allow # 开发调度策略 Allow允许开发调度,Forbid 不允许开发调度 Replace 如果之前的任务还没有执行完,就直接执行新的,放弃上一个failedJobsHistoryLimit: 1 # 保留多少个失败任务successfulJobsHistoryLimit: 3 # 保留多少个成功任务suspend: false # 是否挂起任务,若为true 则该任务不会执行schedule: "* * * * *" # 调度策略jobTemplate:spec:template:spec:containers:- name: helloimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
操作:
# 创建
kubectl create -f cron-job-pd.yaml# 查看
kubectl get cronjob
kubectl get cj# 描述
kubectl describe cj cron-job-test
初始化容器
简介:相对于postStart来说,首先InitContainer 能够保证一定在EntryPoint之前执行,而postStart 不能,其次postStart更适合去执行一些命令操作,而initContainer实际就是一个容器,可以在其他基础容器环境下执行更复杂的初始化功能
配置参考 nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploylabels:type: nginx-deploytest: 1.0.0namespace: default
spec:replicas: 1 # 副本数revisionHistoryLimit: 10 # 保留的历史版本数selector: # 选择器matchLabels:app: nginx-deploytest: 1.0.0strategy: # 更新策略type: RollingUpdate # 更新策略类型 RollingUpdate、RecreaterollingUpdate:maxUnavailable: 25% # 更新时最大不可用副本数maxSurge: 25% # 更新时最大超出副本数template: # 模板metadata:labels:app: nginx-deploytest: 1.0.0spec:initContainers:- image: nginx:latestimagePullPolicy: IfNotPresentcommand: ["sh", "-c", "echo 'inited;' >> ~/.init"]name: init-testcontainers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:requests:cpu: 100mmemory: 256Milimits:cpu: 200mmemory: 512MiterminationMessagePath: /dev/termination-log # 容器终止时的消息路径terminationMessagePolicy: File # 容器终止时的消息策略dnsPolicy: ClusterFirst # DNS策略restartPolicy: Always # 重启策略schedulerName: default-scheduler # 调度器名称securityContext: {} # 安全上下文terminationGracePeriodSeconds: 30 # pod被删除时的等待时间
测试
# 创建
kubectl create -f nginx-deploy.yaml# 查看po
kubectl get po -o wide# 结果
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-5bcc8cd95b-bb7fn 1/1 Running 0 85s 10.244.107.210 k8s-node3 <none> <none>
nginx-deploy-5bcc8cd95b-fq5gs 1/1 Running 0 75s 10.244.169.177 k8s-node2 <none> <none>
nginx-pod 0/1 Terminating 0 46h <none> k8s-node3 <none> <none>
pvc-test-pd 1/1 Running 0 3h30m 10.244.122.110 k8s-node4 <none> <none># 查看日志
kubectl exec -it nginx-deploy-5bcc8cd95b-bb7fn -- sh
# 结果
Defaulted container "nginx" out of: nginx, init-test (init)
污点和容忍度
简介:
容忍:是标在pod上的,当pod被调度时,如果没有配置容忍,则该pod不会被调度到有污点的节点上,只有该pod上标注了满足某个节点的所有污点,则会被调度到这些节点
tolerations:- key: "污点的key"value: "污点的value"offset:"NoSchedule" # 污点产生的影响operator:"Equal" # 表示value与污点的value要相等,也可以设置为Exists 表示存在key即可,此时可以不用设置 value
nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploylabels:type: nginx-deploytest: 1.0.0namespace: default
spec:replicas: 1 # 副本数revisionHistoryLimit: 10 # 保留的历史版本数selector: # 选择器matchLabels:app: nginx-deploytest: 1.0.0strategy: # 更新策略type: RollingUpdate # 更新策略类型 RollingUpdate、RecreaterollingUpdate:maxUnavailable: 25% # 更新时最大不可用副本数maxSurge: 25% # 更新时最大超出副本数template: # 模板metadata:labels:app: nginx-deploytest: 1.0.0spec:tolerations:- key: "memory"operator: "Equal"value: "low"effect: "NoSchedule"# initContainers:# - image: nginx:latest# imagePullPolicy: IfNotPresent# command: ["sh", "-c", "echo 'inited;' >> ~/.init"]# name: init-testcontainers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:requests:cpu: 100mmemory: 256Milimits:cpu: 200mmemory: 512MiterminationMessagePath: /dev/termination-log # 容器终止时的消息路径terminationMessagePolicy: File # 容器终止时的消息策略dnsPolicy: ClusterFirst # DNS策略restartPolicy: Always # 重启策略schedulerName: default-scheduler # 调度器名称securityContext: {} # 安全上下文terminationGracePeriodSeconds: 30 # pod被删除时的等待时间
测试
# 创建
kubectl create -f nginx-deploy.yaml# 查看po
kubectl get po -o wide# 结果
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-5997fbff9d-h7m8f 1/1 Running 0 9s 10.244.107.212 k8s-node3 <none> <none>
nginx-deploy-5997fbff9d-lbgmn 1/1 Running 0 12s 10.244.122.111 k8s-node4 <none> <none>
nginx-pod 0/1 Terminating 0 47h <none> k8s-node3 <none> <none># 编辑 查看 nginx-deploy
kubectl edit deploy nginx-deploy
核心代码
tolerations:
- effect: NoSchedulekey: memoryoperator: Equalvalue: low# 将node4中的 NoSchedule 移除
kubectl taint no k8s-node4 memory=flow:NoSchedule-
kubectl taint no k8s-node4 memory=flow:NoExecute# 在查看po
kubectl get po -o wide
# 结果
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-5997fbff9d-h7m8f 1/1 Running 0 13m 10.244.107.212 k8s-node3 <none> <none>
nginx-deploy-5997fbff9d-q8z92 1/1 Running 0 11s 10.244.169.178 k8s-node2 <none> <none>
nginx-pod 0/1 Terminating 0 47h <none> k8s-node3 <none> <none># 由之前部署在k8s-node4跑到了 k8s-node2# 查看node4
kubectl describe no k8s-node4#核心内容
...
Taints: memory=flow:NoExecute
...
污点Taint
NoSchedule 不能容忍的pod不能被调度到该节点,但是已经存在的节点不会被驱逐
NoExecute 不能容忍的节点会被立即清除,能容忍且没有配置tolerationSeconds属性的可以一直运行,设置了的 则还会在该node运行对应的时间
有点懵。。。。
污点
亲和力
简介:
相关文章:

k8s笔记 | 高度调度
CronJob计划任务 简介:在k8s中周期性运行计划任务,与linux中的crontab相同;注意点 CornJob执行的时间是controller-manager的时间,所以一定要确保controller-manager的时间是准确的,另外cornjob cron表达式 文章参…...

Rom应用开发遇到得一些小bug
记录一些细碎得bug ROM时间类问题 问题描述: 设备拔电重启,ROM时间为默认时间如1970年1月1日,与某些业务场景互斥 问题原因: 后台接口校验https证书校验失败,要求是2年内得请求头校验了时间戳,时间戳过期…...

Python简介
Python简介 1. Python定义 Python 是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python提供了高级数据结构,它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。 Python 是解释型语言: 开发过程中没有了编译这个环…...

C++完成特色旅游管理信息系统
背景: 继C完成淄博烧烤节管理系统后,我们来到了特色旅游管理信息系统的代码编写,历史链接点下方。 C完成淄博烧烤节管理系统_淄博烧烤总账管理系统的-CSDN博客 问题描述: 为了更好的管理各个服务小组,开发相应的管…...

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!
贵州大学计算机科学与技术学院坐落在贵州大学北校区(贵阳花溪)。 学院现有教职工139人,其中专职教师126人,教授17人,副教授37人,讲师46人,高级实验师4人,实验师17人。具有博士学位的…...

分区4K对齐那些事,你想知道的都在这里
在对磁盘进行分区时,有一个很重要的注意事项,就是要将分区对齐,不对齐可能会造成磁盘性能的下降。尤其是固态硬盘SSD,基本上都要求4K对齐。磁盘读写速度慢还找不到原因?可能就是4K对齐的锅。那么分区对齐究竟是怎么回事?为什么要对齐?如何才能对齐?如何检测是否对齐呢?…...

达梦数据库学习笔记
架构、特点和基本概念 达梦数据库(DM Database)是中国达梦数据库有限公司自主研发的关系型数据库管理系统。它广泛应用于政府、金融、电信、能源等行业,具备高性能、高可靠性和高安全性的特点。 架构 达梦数据库的架构设计注重高性能和高可…...

安卓绕过限制直接使用Android/data无需授权,支持安卓14(部分)
大家都知道,安卓每次更新都会给权限划分的更细、收的更紧。 早在安卓11的时候还可以直接通过授权Android/data来实现操作其他软件的目录,没有之前安卓11授权的图了,反正都长一个样,就直接贴新图了。 后面到了安卓12~13的…...

【知识蒸馏】多任务模型 logit-based 知识蒸馏实战
一、什么是逻辑(logit)知识蒸馏 Feature-based蒸馏原理是知识蒸馏中的一种重要方法,其关键在于利用教师模型的隐藏层特征来指导学生模型的学习过程。这种蒸馏方式旨在使学生模型能够学习到教师模型在特征提取和表示方面的能力,从…...

C:技术面试总结
1 变量的声明和定义: 定义:为变量分配地址和存储空间 声明:不分配地址。一个变量可以在多个地方声明,但只能在一个地方定义。extern修饰的变量声明,说明此变量将在文件以外或文件后面部分定义。 2 局部变量是否能与全局变量重名: 可以,局部变量会屏蔽全局变量 局部…...

OpenHarmony 实战开发——一文总结ACE代码框架
一、前言 ACE_Engine框架是OpenAtom OpenHarmony(简称“OpenHarmony”)的UI开发框架,为开发者提供在进行应用UI开发时所必需的各种组件,以及定义这些组件的属性、样式、事件及方法,通过这些组件可以方便进行OpenHarmo…...

【数据结构与算法】之堆的应用——堆排序及Top_K问题!
目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、堆排序 对一个无序的数组…...

啊哈!算法-第2章-栈、队列、链表
啊哈!算法-第2章-栈、队列、链表 第1节 解密qq号——队列第2节 解密回文——栈第3节 纸牌游戏——小猫钓鱼第4节 链表第5节 模拟链表 第1节 解密qq号——队列 新学期开始了,小哈是小哼的新同桌(小哈是个大帅哥哦~),小哼向小哈询问 QQ 号, 小…...

简述 v-if 和 v-show 的区别
v-if 和 v-show 都是 Vue.js 中用于控制元素显示与隐藏的指令,但它们的工作方式有显著的差异。以下是它们之间的主要区别: 渲染方式: v-if:v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和…...

Linux驱动学习之模块化,参数传递,符号导出
1.模块化 1.1.模块化的基本概念: 模块化是指将特定的功能或组件独立出来,以便于开发、测试和维护。在Linux设备驱动中,模块化允许将驱动程序作为内核模块动态加载到系统中,从而提高了系统的灵活性和可扩展性。 1.2.Linux内核模…...

RabbitMQ02-RebbitMQ简介及交换器
一. AMQP协议 什么是AMQP协议 AMQP(Advanced Message Queuing Protocol,高级消息队列协议):它是进程之间传递异步消息的网络协议 AMQP工作过程 发布者通过发布消息,通过交换机,交换机根据路由规则将收到的消息分发交换机绑定的下消息队列,最…...

Matlab自学笔记三十:元胞数组的修改、添加、删除和连接
1.说明 元胞数组的子数组或元素也是元胞型的,其元素内容(值)是本身类型,因此,在添、删、改和连接处理时,必须明确每个元素的值的类型和大小,否则,编程报错是不可避免的了。看本文前…...

【LeetCode】数组——双指针法
1 双指针法 1.1 介绍 双指针法是一种常用的算法技巧,通常用于处理数组或链表中的问题。它使用两个指针,通常一个从数组的开始位置遍历,另一个从数组的末尾位置开始遍历,根据问题的不同,这两个指针可以同时移动&#…...

react 低代码平台方案汇总
React作为当前最流行的前端框架之一,其生态系统中孕育了多种低代码平台方案,旨在加速应用开发过程。以下是几款基于React的低代码平台或工具,它们通过可视化构建、预制组件、数据绑定等功能,帮助开发者快速构建应用程序࿱…...

oss对象上传文件设置格式
PostMapping("upload")ApiOperation(value "上传文件")public Result<UploadDTO> upload(RequestParam("file") MultipartFile file) throws Exception {if (file.isEmpty()) {return new Result<UploadDTO>().error(ModuleErrorCo…...

【Linux学习】进程
下面是有关进程的相关介绍,希望对你有所帮助! 小海编程心语录-CSDN博客 目录 1. 进程的概念 1.1 进程与程序 1.2 进程号 2. 进程的状态 2.1 fork创建子进程 2.2 父子进程间的文件共享 3. 进程的诞生与终止 3.1 进程的诞生 3.2 进程的终止 1. 进…...

Python数据分析实验四:数据分析综合应用开发
目录 一、实验目的与要求二、主要实验过程1、加载数据集2、数据预处理3、划分数据集4、创建模型估计器5、模型拟合6、模型性能评估 三、主要程序清单和运行结果四、实验体会 一、实验目的与要求 1、目的: 综合运用所学知识,选取有实际背景的应用问题进行…...

基于51单片机的盆栽自动浇花系统
一.硬件方案 工作原理是湿度传感器将采集到的数据直接传送到ADC0832的IN端作为输入的模拟信号。选用湿度传感器和AD转换,电路内部包含有湿度采集、AD转换、单片机译码显示等功能。单片机需要采集数据时,发出指令启动A/D转换器工作,ADC0832根…...

SpirngMVC框架学习笔记(一):SpringMVC基本介绍
1 SpringMVC 特点&概述 SpringMVC 从易用性,效率上 比曾经流行的 Struts2 更好 SpringMVC 是 WEB 层框架,接管了 Web 层组件, 比如控制器, 视图, 视图解析, 返回给用户的数据格式, 同时支持 MVC 的开发模式/开发架构SpringMVC 通过注解,…...

实现信号发生控制
1. 信号发生器的基本原理 信号发生器是一种能够产生特定波形和频率的电子设备,常用于模拟信号的产生和测试。 信号发生器的基本原理 信号发生器的工作原理基于不同的技术,但最常见的类型包括模拟信号发生器和数字信号发生器(DDS࿰…...

二叉树基于队列实现的操作详解
一、队列知识补充 有关队列的知识请详见博主的另一篇博客:http://t.csdnimg.cn/3PwO4 本文仅仅附上需要的队列操作供读者参考 //结构体定义 typedef struct BinaryTreeNode* QDataType;typedef struct QueueNode {struct QueueNode* next;QDataType val; }QNode;…...

LabVIEW常用开发架构有哪些
LabVIEW常用开发架构有多种,每种架构都有其独特的特点和适用场合。以下是几种常用的开发架构及其特点和适用场合: 1. 单循环架构 特点: 简单易用适用于小型应用将所有代码放在一个循环中 适用场合: 简单的数据采集和处理任务…...

告别 Dart 中的 Future.wait([])
作为 Dart 开发人员,我们对异步编程和 Futures 的强大功能并不陌生。过去,当我们需要同时等待多个 future 时,我们依赖 Future.wait([]) 方法,该方法返回一个 List<T>。然而,这种方法有一个显着的缺点࿱…...

Cisco ASA防火墙抓包命令Capture
在日常运维中,遇到故障时经常需要在ASA上抓包进行诊断。 从抓包中可以看到流量是否经过ASA流量是否被ASA放行,或block,匹配的哪一条ACL capture在Firepower平台上同样适用,无论跑的是ASA还是FTD 1 抓包命令 capture 2 配置方…...

Linux网络编程:HTTP协议
前言: 我们知道OSI模型上层分为应用层、会话层和表示层,我们接下来要讲的是主流的应用层协议HTTP,为什么需要这个协议呢,因为在应用层由于操作系统的不同、开发人员使用的语言类型不同,当我们在传输结构化数据时&…...