【k8s】利用crobjob实现定时宿主机集群任务

news/2024/4/15 4:09:04/文章来源:https://blog.csdn.net/qq_33823833/article/details/136532999

可以考虑这么个场景,服务商的服务集群以K8S部署在云端,并以一条防火墙策略放通某专线ip或端口,以供外部用户访问。现在出现了这么个需求,由于周末或节假日不上班,客户要求在这些时刻去禁用这些防火墙策略,以达到用户无法访问的目的。我们能想到最简单的方法是,由运维手动连接到所有节点虚机的控制台,去执行禁用命令,但问题也非常明显,人工操作很容易出现错删、漏删,其次工作日时还要再配置回来,当用户节点过多时,操作工作量就非常大。

整体思路

我们可以利用原生对象crobjob对宿主机进行防火墙策略起禁用,这样只需要在一个master节点执行k8s的api请求即可。首先我们使用python脚本获取所有宿主机节点名称,再使用node select机制让master节点下发至所需要执行的宿主机上,最后就可以使用原生对象crobjob来帮助我们执行命令,注意这时要注意开启特权及共享宿主机pid,否则容器内执行无法影响到宿主机的,详情如图所示:

关键代码

# 开始执行
def main():host_list = get_hostname_list()for hostname in host_list:job_yaml = hostname + '-' + 'job' + '.yaml'job_yaml_path = os.path.join('/tmp', job_yaml)generate_my_job(hostname, job_yaml_path)run_cmd('kubectl apply -f %s' % job_yaml_path)os.remove(job_yaml_path)# 获取宿主机hostname
def get_hostname_list():node_info = subprocess.check_output(['kubectl', 'get', 'node'], shell = False)lines = node_info .decode().split('\n')[1:-1]hostname_list= [line.split()[0] for line in lines]return hostname_list# 创建job
def generate_my_job(hostname, job_yaml_path):image = "sdocker.io/radial/busyboxplus:latest"# 想要执行的命令cmd = "chroot /host systemctl start firewalld.service 2>&1"job_name = hostnamecrob_job_def = f"""apiVersion: batch/v1
kind: CronJob
metadata:name: {job_name}labels:my-job: my-job-lablenamespace: my-job   #命名空间隔离,防止影响其他人
spec:template:metadata:name: my-joblabels:my-job: my-job-lablespec:hostPID: true            #共享宿主机hostNetwork: truenodeSelector:kubernetes.io/hostname: {hostname}tolerations:- key: node-role.kubernetes.io/control-planeoperator: Equaleffect: NoSchedulecontainers:- name:my-jobimage: {image}imagePullPolicy: IfNotPresentcommand:- "sh"- "-c"- |current_time=$(date +"%Y-%m-%d %H:%M:%S")echo "$current_time - start" >> /var/run/my.logres=$({cmd})echo "$current_time - $res" >> /var/run/my.logsecurityContext:privileged: true    #特权模式volumeMounts:- name: host-root-dirmountPath: /host- name: host-log-dirmountPath: /var/runvolumes:- name: host-root-dirhostPath:path: /- name: host-log-dirhostPath:path: /var/run/log/restartPolicy: NeverbackoffLimit: 1 schedule: '0 10 * * 1-5'        #表达式 每个工作日的上午10点suspend: true """# yaml存盘with open(job_yaml_path, "w") as f:try:f.write(crob_job_def )except Exception as e:raise e

Reference

kubernetes之Cronjob应用和踩坑 - 生命不止奋斗不息 - 博客园 (cnblogs.com)

Cron表达式详细讲解,平常看一看就记住了 - 掘金 (juejin.cn)

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

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

相关文章

14:00面试,15:00就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到2月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的RT-DETR的项目,经过实验我发现该卷积模块(作为下采样模块)…

场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

1. 问题 诡异的问题表象: 前端反馈分页接口的Total字段一直为0 使用Visualvm中的 Profiler 注入到应用后,查看JDBC监控得到了分页接口执行的SQL,复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 NULL 🤨 2. 排查…

Unity 动画(旧版-新版)

旧版 旧版-动画组件:Animation 窗口-动画 动画文件后缀: .anim 将制作后的动画拖动到Animation组件上 旧版的操作 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {// Start is called before…

DNS——域名系统

TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备的IP地址是相当困难的,因此专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。在IP地址与主机名之间需要有一种转换和查询机制,…

深度学习_19_卷积

理论: 目前问题在于识别图片所需要的模型权重数量会比较大 一般图片像素在12M也就是一千两百万像素,要用模型对其整体识别的话,需要至少一千两百万权重,那也仅仅是线性模型,若用多层感知机的话,模型的数据…

STM32 | STM32时钟分析、GPIO分析、寄存器地址查找、LED灯开发(第二天)

STM32 第二天 一、 STM32时钟分析 寄存器:寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成 在计算机领域&#x…

2024中国云计算大分野:重回当年,还是走向未来?

再过些年,如果有人写中国云计算发展史,那么他应该会着重描述2024年2月的最后一个星期。 这短短几天里,发生了反差感拉满,且都极具变革意味的两件事。科技产业天天“重磅发布”,但其实真正具有变革意味的重磅消息并不多…

【深度学习笔记】计算机视觉——单发多框检测(SSD)

单发多框检测(SSD) sec_ssd 在 sec_bbox— sec_object-detection-dataset中,我们分别介绍了边界框、锚框、多尺度目标检测和用于目标检测的数据集。 现在我们已经准备好使用这样的背景知识来设计一个目标检测模型:单发多框检测&…

【嵌入式——QT】QTreeWidget

QTreeWidget类是创建和管理目录树结构的类,QTreeWidget每一个节点都是一个QTreeWidgetItem对象,添加一个节点前需先创建。QTreeWidget类是一个便利类,它提供了一个标准的树widget,具有经典的基于item的界面,类似于Qt 3…

【开源】SpringBoot框架开发快乐贩卖馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

前端面试练习24.3.8

防抖和节流 防抖(Debouncing): 防抖是指在短时间内连续触发同一事件时,只执行最后一次触发的事件处理函数。 在实际应用中,常常用于处理用户输入的搜索框或者滚动事件。例如,当用户连续输入搜索关键词时&am…

使用Pytorch导出自定义ONNX算子

在实际部署模型时有时可能会遇到想用的算子无法导出onnx,但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型(注:自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的)。下面给出个具体应用中的…

leetcode:LCR 006. 两数之和 II - 输入有序数组(python3解法)

难度&#xff1a;简单 给定一个已按照 升序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 &#xff0c;所以答案数组应当满足 0 <…

【教程】 iOS构建版本无效问题解决方案

引言 在进行iOS应用上架时&#xff0c;有时会遇到构建版本无效的问题&#xff0c;即通过XCode上传成功后&#xff0c;但在App Store Connect的TestFlight中无法显示构建版本&#xff0c;或者显示一会儿后就消失了。本文将介绍可能的原因分析&#xff0c;并提供解决问题的方法。…

ubuntu系统(11):ubuntu20.04命令行安装vscode

目录 1、更新软件包索引&#xff0c;并且安装依赖软件 2、使用 wget 命令插入 Microsoft GPG key 3、启用vscode存储库 4、更新软件包并安装vscode 5、当前目录进入vscode 6、设置样式&#xff0c;添加所需扩展 最近换了个新的服务器&#xff0c;所以要重新配置服务器的…

[DevOps云实践] 跨AWS账户及Region调用Lambda

[DevOps云实践] 跨AWS账户及Region调用Lambda 本文將幫大家理清一下幾個問題: 如何跨不同AWS賬戶,不同Region來調用Lambda? 不同Lambda之間如何互相調用?有時我們希望我們的Lambda脚本能夠運行在多個AWS賬戶中的不同Region下,但是,我們還不希望每個下面都去建立一個運行…

算法刷题day20:二分

目录 引言概念一、借教室二、分巧克力三、管道四、技能升级五、冶炼金属六、数的范围七、最佳牛围栏八、套餐设计九、牛的学术圈I十、我在哪&#xff1f; 引言 这几天一直在做二分的题&#xff0c;都是上了难度的题目&#xff0c;本来以为自己的二分水平已经非常熟悉了&#x…

Oracle定时任务和存储过程

--1.声明定时任务 DECLAREjob NUMBER; BIGIN dbms_job.sumit(job, --任务ID,系统定义的test_prcedure(19)&#xff0c;--调用存储过程&#xff1f;to_date(20240305 02:00&#xff0c;yyyymmdd hh24:mi) --任务开始时间sysdate1/(24*60) --任务执行周期 [每分钟执行…

springboot 加入 日志+ controller 加入全局异常捕获

提下比较好点 包含将捕获的异常堆栈完整的返回给前端。方便 后端人员用 swagger 或 knife 工具验证接口时&#xff0c;直接看到异常。 有啥用呢&#xff1f;在现场环境&#xff0c;或不方便远程服务器机器时&#xff0c;非常有用&#xff01;&#xff01;&#xff01; 同时&…