研发工程师玩转Kubernetes——非定时任务

news2024/11/25 2:39:11

在《研发工程师玩转Kubernetes——自动扩缩容》一文中,我们使用在本地使用wrk进行了压力测试。如果我们希望在容器中运行,该怎么做呢?

构建/推送wrk镜像

Dockerfile如下。主要就是在Ubuntu22中安装wrk。

From ubuntu:22.04
RUN apt-get update 
RUN apt-get install -y wrk
WORKDIR /

然后构建镜像:

docker build -t wrk:v1 .
docker tag wrk:v1 localhost:32000/wrk:v1
docker push localhost:32000/wrk:v1

非定时任务

顾名思义,非定时任务是指不可以指定执行周期的任务。在kubernetes中,我们通过Job来实现。

单次任务

apiVersion: batch/v1
kind: Job
metadata:
  name: wrk-job
spec:
  template:
    spec:
      containers:
      - name: wrk
        image: localhost:32000/wrk:v1
        command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
      restartPolicy: Never

Job会创建一个Pod来实现。template字段用于描述Pod的内容。在本例中,新创建的Pod包含一个容器。这个容器使用了上面创建的wrk镜像,并且使用wrk进行了30秒的压测。

kubectl describe jobs.batch wrk-job 
Name:             wrk-job
Namespace:        default
Selector:         controller-uid=80799172-670b-4769-9078-8da47c3a571b
Labels:           controller-uid=80799172-670b-4769-9078-8da47c3a571b
                  job-name=wrk-job
Annotations:      batch.kubernetes.io/job-tracking: 
Parallelism:      1
Completions:      1
Completion Mode:  NonIndexed
Start Time:       Mon, 29 May 2023 17:55:01 +0800
Pods Statuses:    1 Active (1 Ready) / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  controller-uid=80799172-670b-4769-9078-8da47c3a571b
           job-name=wrk-job
  Containers:
   wrk:
    Image:      localhost:32000/wrk:v1
    Port:       <none>
    Host Port:  <none>
    Command:
      wrk
      -t20
      -c20
      -d30
      http://192.168.137.248:30000
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
  Normal  SuccessfulCreate  7s    job-controller  Created pod: wrk-job-wxwmc

可以通过下面指令查看该Job创建的Pod。

kubectl describe pod
Name:             wrk-job-wxwmc
Namespace:        default
Priority:         0
Service Account:  default
Node:             fangliang-virtual-machine/192.168.137.248
Start Time:       Mon, 29 May 2023 17:55:01 +0800
Labels:           controller-uid=80799172-670b-4769-9078-8da47c3a571b
                  job-name=wrk-job
Annotations:      cni.projectcalico.org/containerID: 1b92441ff39e22b76a3c1b3523068347e2aee8ed070a02260fd51e7d48bcf23b
                  cni.projectcalico.org/podIP: 10.1.62.165/32
                  cni.projectcalico.org/podIPs: 10.1.62.165/32
Status:           Running
IP:               10.1.62.165
IPs:
  IP:           10.1.62.165
Controlled By:  Job/wrk-job
Containers:
  wrk:
    Container ID:  containerd://ef5b58f80bf5b091bba87332df0f4fb9dd94b765fe7167e2ce4024b411429d46
    Image:         localhost:32000/wrk:v1
    Image ID:      localhost:32000/wrk@sha256:3548119fa498e871ac75ab3cefb901bf5a069349dc4b1b92afab8db4653f6b25
    Port:          <none>
    Host Port:     <none>
    Command:
      wrk
      -t20
      -c20
      -d30
      http://192.168.137.248:30000
    State:          Running
      Started:      Mon, 29 May 2023 17:55:02 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-x8sss (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-x8sss:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  28s   default-scheduler  Successfully assigned default/wrk-job-wxwmc to fangliang-virtual-machine
  Normal  Pulled     28s   kubelet            Container image "localhost:32000/wrk:v1" already present on machine
  Normal  Created    28s   kubelet            Created container wrk
  Normal  Started    28s   kubelet            Started container wrk

待wrk执行完毕,我们调用log指令查看其输出

kubectl logs wrk-job-wxwmc
Running 30s test @ http://192.168.137.248:30000
  20 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    14.50ms   21.82ms  87.86ms   90.48%
    Req/Sec    10.92      8.23    20.00     38.46%
  21 requests in 30.05s, 2.91KB read
  Socket errors: connect 0, read 21, write 0, timeout 0
Requests/sec:      0.70
Transfer/sec:      99.00B

需要注意的是,上面的清单创建Job以及Pod在运行结束后不会自动被删除,容器会处于Terminated状态。下面指令可以查看到该Pod的状态已经发生改变。

kubectl describe pod wrk-job-wxwmc
Name:             wrk-job-wxwmc
Namespace:        default
Priority:         0
Service Account:  default
Node:             fangliang-virtual-machine/192.168.137.248
Start Time:       Mon, 29 May 2023 17:55:01 +0800
Labels:           controller-uid=80799172-670b-4769-9078-8da47c3a571b
                  job-name=wrk-job
Annotations:      cni.projectcalico.org/containerID: 1b92441ff39e22b76a3c1b3523068347e2aee8ed070a02260fd51e7d48bcf23b
                  cni.projectcalico.org/podIP: 
                  cni.projectcalico.org/podIPs: 
Status:           Succeeded
IP:               10.1.62.165
IPs:
  IP:           10.1.62.165
Controlled By:  Job/wrk-job
Containers:
  wrk:
    Container ID:  containerd://ef5b58f80bf5b091bba87332df0f4fb9dd94b765fe7167e2ce4024b411429d46
    Image:         localhost:32000/wrk:v1
    Image ID:      localhost:32000/wrk@sha256:3548119fa498e871ac75ab3cefb901bf5a069349dc4b1b92afab8db4653f6b25
    Port:          <none>
    Host Port:     <none>
    Command:
      wrk
      -t20
      -c20
      -d30
      http://192.168.137.248:30000
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 29 May 2023 17:55:02 +0800
      Finished:     Mon, 29 May 2023 17:55:32 +0800
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-x8sss (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-x8sss:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  3m13s  default-scheduler  Successfully assigned default/wrk-job-wxwmc to fangliang-virtual-machine
  Normal  Pulled     3m12s  kubelet            Container image "localhost:32000/wrk:v1" already present on machine
  Normal  Created    3m12s  kubelet            Created container wrk
  Normal  Started    3m12s  kubelet            Started container wrk

手工删除任务

下面指令

 kubectl delete jobs.batch wrk-job 

job.batch “wrk-job” deleted

自动删除

如果我们不用查看Job创建的Pod的输出,则可以在Job运行结束后自动删除,而不用手工删除。具体的方法就是在清单文件中新增ttlSecondsAfterFinished: 0。它表示Job处于Complete 或 Failed状态后,立即删除自己。

apiVersion: batch/v1
kind: Job
metadata:
  name: wrk-job
spec:
  ttlSecondsAfterFinished: 0
  template:
    spec:
      containers:
      - name: wrk
        image: localhost:32000/wrk:v1
        command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
      restartPolicy: Never

多次任务

只需要在上述清单中新增spec.completions字段即可。为了清晰的看到Pod的创建过程,我删除了创建后立即删除的字段ttlSecondsAfterFinished。

apiVersion: batch/v1
kind: Job
metadata:
  name: wrk-job
spec:
  completions: 3
  template:
    spec:
      containers:
      - name: wrk
        image: localhost:32000/wrk:v1
        command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
      restartPolicy: Never

上面清单表示,我们将挨个创建Pod。只有Pod处于完成状态时,下一个Pod才会创建。直至达到3个。
通过下面指令创建这个任务

kubectl create -f wrk_job.yaml 

下图可以见得,只有处于Completed状态的Pod才算会让completions计数自增。
在这里插入图片描述
如果没有dashboard,可以使用下面指令查看

kubectl get  jobs.batch wrk-job --watch
NAME      COMPLETIONS   DURATION   AGE
wrk-job   0/3           53s        53s
wrk-job   0/3           2m13s      2m13s
wrk-job   0/3           2m14s      2m14s
wrk-job   0/3           2m14s      2m14s
wrk-job   0/3           2m15s      2m15s
wrk-job   0/3           4m27s      4m27s
wrk-job   0/3           4m28s      4m28s
wrk-job   0/3           4m28s      4m28s
wrk-job   0/3           4m29s      4m29s
wrk-job   0/3           5m         5m
wrk-job   0/3           5m1s       5m1s
wrk-job   1/3           5m1s       5m1s
wrk-job   1/3           5m2s       5m2s
wrk-job   1/3           5m33s      5m33s
wrk-job   1/3           5m34s      5m34s
wrk-job   2/3           5m34s      5m34s
wrk-job   2/3           5m35s      5m35s
wrk-job   2/3           7m47s      7m47s
wrk-job   2/3           7m48s      7m48s
wrk-job   2/3           7m48s      7m48s
wrk-job   2/3           7m49s      7m49s
wrk-job   2/3           10m        10m
wrk-job   2/3           10m        10m
wrk-job   2/3           10m        10m
wrk-job   2/3           10m        10m
wrk-job   2/3           12m        12m
wrk-job   2/3           12m        12m
wrk-job   2/3           12m        12m
wrk-job   2/3           12m        12m
wrk-job   2/3           14m        14m
wrk-job   2/3           14m        14m
wrk-job   2/3           14m        14m
wrk-job   2/3           14m        14m
wrk-job   2/3           14m        14m
wrk-job   2/3           15m        15m
wrk-job   3/3           15m        15m

并行Pod

如果单个Pod的压力不够,我们同时启动多个Pod。这是通过设置spec.parallelism字段来设置的。

apiVersion: batch/v1
kind: Job
metadata:
  name: wrk-job
spec:
  completions: 4
  parallelism: 2
  template:
    spec:
      containers:
      - name: wrk
        image: localhost:32000/wrk:v1
        command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
      restartPolicy: Never

这个清单文件表示,我们需要运行成功4(completions)个Pod,同时最大并行2(parallelism)个Pod。
在这里插入图片描述
如果没有dashboard可以通过下面指令查看过程。

kubectl get jobs.batch wrk-job --watch
NAME      COMPLETIONS   DURATION   AGE
wrk-job   0/4           14s        14s
wrk-job   0/4           32s        32s
wrk-job   0/4           33s        33s
wrk-job   2/4           34s        34s
wrk-job   2/4           36s        36s
wrk-job   2/4           66s        66s
wrk-job   2/4           68s        68s
wrk-job   4/4           67s        68s

参考资料

  • https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Nodejs】Node-js笔记

Node.js 文章目录 Node.js一、Node.js概述1.1、介绍1.2、官网1.3、Node.js应用场景1.4、安装Node.js1.5、npm包管理器1.5.1、介绍1.5.2、切换npm源1.5.3、生成JSON配置文件1.5.4、查看当前安装的树形模块1.5.5、安装模块1.5.6、自定义脚本命令1.5.7 、自动重启应用 1.6、模块化…

VehicleHal.java - fwk层对应VehicleService

VehicleHal.java - fwk层对应VehicleService 1、VehicleHal.java初始化1.1 hal服务区分1.2 简要时序图 2、PowerHalService为例2.1 PowerHalService初始化和订阅2.2 简要时序图 android12-release 【IVI】VehicleService启动 【IVI】车载设备硬件抽象层VHAL 【IVI】CarService启…

【人脸识别】insightface 使用记录和搭建服务注意点和坑 从0到1

文章目录 前言1.开始1.1 前置1.2 再次运行&#xff0c;人脸检测跑通1.3 人脸特征抽取1.3.1 模型下载1.3.2 重新跑一下检测和识别1.3.3 人脸监测返回值分析1.3.4 计算相似度 1.4 全流程的相似度 2. 业务化人脸识别 前言 人脸识别项目&#xff0c;再走一遍。之前是公司老人留下的…

HTML+CSS实训——Day05——JavaScript基础知识点

前言 上一周我们只做了静态页面&#xff0c;这周开始要学js了&#xff0c;那我们先来认识一下他的语法和变量吧。 知识点 变量定义 学习了var还有console.log()输出变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

点云配准算法综述-完整解读

点云配准的挑战 同源点云配准 同源点云的配准是指从同一类型的传感器,但在不同的时间或视角下获取的点云在进行配准问题中存在的挑战,其主要包含了 噪声和离群值。在不同的采集时间,环境和传感器噪声是不同的,采集到的点云在同一三维位置附近会包含噪声和异常值。部分重叠…

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python接口自动化测…

设计模式之美-为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

我愿意称之为最强设计书籍之一。看完这篇文章使我对代码编写有了新的思考。值得注意的是文章全篇写的是伪代码&#xff0c;并没有真正实现方法的逻辑&#xff0c;不过这样反而有利于逻辑的理解。 在上一节课中&#xff0c;我们讲了接口和抽象类&#xff0c;以及各种编程语言是如…

如何跑通一个java项目

查找项目代码的途径&#xff1a;github,码云&#xff0c;掘金网 以小说精品屋项目(掘金网)为例&#xff1a; 先读Readme&#xff08;这里会介绍项目结构和技术选型&#xff09;&#xff0c;这里还会告诉你们怎么跑起来这个项目&#xff0c;比如让你先安装数据库&#xff0c;然…

从业者指南:专业编辑和校对技巧

在写作领域&#xff0c;编辑和校对是确保高质量作品的关键步骤。作为从业者&#xff0c;你需要掌握专业的编辑和校对技巧&#xff0c;以提高客户满意度和自己的市场竞争力。以下是一些值得关注的专业编辑和校对技巧。 1.建立良好的沟通 与客户保持良好的沟通是提高编辑和校对质…

如何更改 Linux 文件和目录权限?

在Linux系统中&#xff0c;文件和目录权限是安全性和访问控制的关键组成部分。正确设置文件和目录的权限可以确保只有授权的用户能够读取、写入或执行这些文件和目录。 本文将详细介绍如何在Linux系统中更改文件和目录的权限。 1. 文件和目录权限概述 在Linux系统中&#xff…

解决Kubernetes就绪检查导致网关不可用的问题

引言 在K8s环境中&#xff0c;由于就绪检查设置不合理的问题&#xff0c;导致出现网关不可用的情况。 本文将详细探讨这个问题的原因&#xff0c;并提供一些解决方案&#xff0c;帮助有需要的同学解决类似的问题。 注&#xff1a;网关使用 spring-cloud-gateway 问题描述 描…

记录两个Windows和Mac上部署阿里Canal无法启动的神坑

目录 一、问题列表 二、解决方案 三、参考资料 四、配置详解 五、数据库相关操作 一、问题列表 1、问题一&#xff1a;点击 startup.bat 窗口出现后立马闪退的问题。 2、问题二&#xff1a;启动后日志文件报错&#xff1a; ERROR com.alibaba.otter.canal.deployer.Cana…

办公OA系统性能分析案例

前言 信息中心老师反应&#xff0c;用户反馈办公系统有访问慢的情况&#xff0c;需要通过流量分析系统来了解系统的运行情况&#xff0c;此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量&am…

多项创新技术加持,实现零COGS的Microsoft Editor语法检查器

编者按&#xff1a;Microsoft Editor 是一款人工智能写作辅助工具&#xff0c;其中的语法检查器&#xff08;grammar checker&#xff09;功能不仅可以帮助不同水平、领域的用户在写作过程中检查语法错误&#xff0c;还可以对错误进行解释并给出正确的修改建议。神经语法检查器…

自动化测试框架的秘密,资深8年测试带你揭开,跟上测试“潮流“...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

携手共创开源新格局|2023开放原子全球开源峰会将于6月11日在京隆重开幕

6月11-13日&#xff0c;2023开放原子全球开源峰会将在全球数字经济大会期间召开。本次峰会将以“开源赋能&#xff0c;普惠未来”为主题&#xff0c;通过开幕式暨高峰论坛、分论坛、主题展览、开源活动周等多种形式&#xff0c;聚集政、产、学、研、用、创、投、金等各领域优势…

RPC学习笔记【一】:概述

文章目录 一、简介1.1 引言1.2 架构的演变过程 二、RPC 的设计2.1 设计目标2.2 核心问题01 通信方式02 协议03 序列化04 远程代理类 2.3 衍生方案 - 注册中心 一、简介 1.1 引言 RPC 是远程过程调用 &#xff08;Remote Procedure Call&#xff09;的缩写形式&#xff0c;是一…

一文搞懂Python时间序列预测(步骤,模板,python代码)

预测包括&#xff0c;数值拟合&#xff0c;线性回归&#xff0c;多元回归&#xff0c;时间序列&#xff0c;神经网络等等 对于单变量的时间序列预测&#xff1a;模型有AR,MA,ARMA,ARIMA&#xff0c;综合来说用ARIMA即可表示全部。 数据和代码链接&#xff1a;数据和Jupyter文…

ArcGIS10.8下载及安装教程(附安装步骤)

谷歌云&#xff1a; https://drive.google.com/drive/folders/10igu7ZSMaR0v0WD7-2W-7ADJGMUFc2ze?uspsharing ArcGIS10.8 百度网盘&#xff1a; https://pan.baidu.com/s/1s5bL3QsCP5sgcftCPxc88w 提取码&#xff1a;kw4j 阿里云&#xff1a; https://www.aliyundriv…

Linux—实操篇:远程登录到linux服务器

远程登录客户端工具有 Xshell7(远程登录)&#xff0c;Xftp7&#xff08;文件传输&#xff09;,这里介绍Xshell和Xftp&#xff0c;其他的远程工具大同小异 1、远程登录Linux—Xshell 介绍&#xff1a;Xshell是目前最好的远程登录到Linux的软件&#xff0c;流畅的速度并且完美解…