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

相关推荐
积极向上的Elbert12 分钟前
Mybatis-Plus中的Page方法出现Records的值大于0但是total的值一直是0
java·开发语言·mybatis
Luke~~16 分钟前
实验室服务器Ubuntu安装使用全流程
linux·运维·ubuntu
猿来入此小猿18 分钟前
基于SpringBoot在线音乐系统平台功能实现十七
java·spring boot·后端·毕业设计·音乐系统·音乐平台·毕业源码
犬余20 分钟前
《Java源力物语》-4.集合府邸的新秀
java·开发语言
hc_bmxxf21 分钟前
Linux应用软件编程-多任务处理(线程)
linux·线程
tjjingpan1 小时前
在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档
linux·pdf
苹果醋31 小时前
Vue3响应式数据: 深入分析Ref与Reactive
java·运维·spring boot·mysql·nginx
hope_wisdom1 小时前
Linux系统编程之目录遍历
linux·linux编程·readdir·目录遍历·scandir
缘友一世1 小时前
JAVA代理模式和适配器模式
java·代理模式·适配器模式