k8s 离线部署一个busybox,进而创建cronjob执行任务

  • 首先创建一个yaml,创建一个名字是busybox-test的容器

    apiVersion: v1
    kind: Pod
    metadata:
    name: busybox-test
    labels:
    purpose: demonstrate-busybox
    spec:
    containers:
    - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command:
    - sleep
    - "3600"
    resources:
    limits:
    memory: "128Mi"
    cpu: "500m"

  • 然后拉取busybox的安装镜像(如果可以连上docker仓库则可以不需要下载)

    复制代码
    sudo docker pull busybox
    sudo docker save busybox -o busybox.tar
  • 加载busybox镜像

    sudo ctr -n k8s.io images import busybox.tar

  • 然后根据yaml启动busybox pod

    kubectl apply -f cronjob.yaml

  • 此时busybox的pod已经运行起来了

    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    busybox-test 1/1 Running 0 7m10s
    helloworld-nodejs-78c85f6bc8-kvrw6 1/1 Running 1 (5h15m ago) 3d5h
    helloworld-nodejs-78c85f6bc8-l9mxg 1/1 Running 1 (5h15m ago) 3d5h
    nginx-deployment-54b6f7ddf9-vcl6k 1/1 Running 3 (5h15m ago) 6d22h
    nginx-deployment-54b6f7ddf9-x6j7z 1/1 Running 3 (5h15m ago) 6d22h

  • 可以进pod中执行一些命令

    $ kubectl exec -it busybox-test -- sh
    / # ps aux
    PID USER TIME COMMAND
    1 root 0:00 sleep 3600
    20 root 0:00 sh
    26 root 0:00 ps aux

然后可以将它拓展为一个cronjob的pod,定时运行,yaml改写成:

复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: example-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: example-container
            image: busybox
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

这个yaml的意思就是创建一个cronjob,然后每1分钟(schedule: "*/1 * * * *")会创建一个busybox的pod执行"/bin/sh -c date; echo Hello from the Kubernetes cluster" 命令

  • 可以通过下面命令看到cronjob的pods已经创建起来了

    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    example-cronjob-28659390-fk9kq 0/1 Completed 0 2m15s
    example-cronjob-28659391-gbkps 0/1 Completed 0 75s
    example-cronjob-28659392-sxzzg 0/1 Completed 0 15s
    helloworld-nodejs-78c85f6bc8-kvrw6 1/1 Running 1 (5h29m ago) 3d5h
    helloworld-nodejs-78c85f6bc8-l9mxg 1/1 Running 1 (5h29m ago) 3d5h
    nginx-deployment-54b6f7ddf9-vcl6k 1/1 Running 3 (5h29m ago) 6d23h
    nginx-deployment-54b6f7ddf9-x6j7z 1/1 Running 3 (5h29m ago) 6d23h

    $ kubectl get cronjobs
    NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
    example-cronjob */1 * * * * False 0 10s 8m22s

    $ kubectl get jobs
    NAME COMPLETIONS DURATION AGE
    example-cronjob-28659393 1/1 3s 2m38s
    example-cronjob-28659394 1/1 3s 98s
    example-cronjob-28659395 1/1 3s 38s

  • 查看cronjob的输出, 可以看到yaml里面配置的内容:

    $ kubectl logs example-cronjob-28659396-mklws
    Fri Jun 28 08:36:00 UTC 2024
    Hello from the Kubernetes cluster

  • 删除cronjob

    $ kubectl delete cronjobs example-cronjob
    cronjob.batch "example-cronjob" deleted

相关推荐
希望永不加班1 分钟前
SpringBoot 服务注册与发现:Nacos/Consul/Eureka
java·spring boot·eureka·consul·java-consul
2301_777998342 分钟前
进程控制:进程创建、进程终止、进程等待、进程程序替换
linux·服务器
仙俊红3 分钟前
spring有多个对象时如何注入
java·后端·spring
专注VB编程开发20年5 分钟前
B4A (Basic4Android) Process_Globals(应用全局)和 Globals(类中公用变量)
java·开发语言
小a杰.6 分钟前
PTO ISA 指令架构 - PTO虚拟指令集架构解析
java·开发语言·架构
Java爱好狂.9 分钟前
Redis高级笔记:深入浅出Java面试高频考点!
java·数据库·redis·后端·java面试·java程序员·java八股文
xiaobobo33309 分钟前
Ubuntu 26.04下编译s5pv210芯片的linux内核源码,无法进入menuconfig界面
linux·运维·ubuntu
罗超驿15 分钟前
10.滑动窗口解决:无重复字符的最长子串 | LeetCode 3 Java 题解
java·算法·leetcode·面试
nnsix17 分钟前
MVC、MVP、MVVM 架构 笔记
java·开发语言·前端
野生技术架构师19 分钟前
2026最新Java面试1200题全解析:从基础到架构,覆盖所有技术栈(含答案)
java·面试·架构