当前位置: 首页 > 知识库问答 >
问题:

如何在库伯内特斯cron工作执行脚本外壳

乜璞瑜
2023-03-14

我想使用CronJob在Kubernetes内部运行一个shell脚本,下面是我的CronJon.yaml文件:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - /home/admin_/test.sh
          restartPolicy: OnFailure

CronJob已被创建(kubectl apply -f CronJob.yaml)当我获得CronJob的列表时,我可以看到cron job ( kubectl get cj ),当我运行“kubectl get pods”时,我可以看到pod正在被创建,但是pod崩溃了。谁能帮我学习一下如何在Kubernetes里面创建一个CronJob?

共有1个答案

刘曾琪
2023-03-14

正如注释中正确指出的那样,您需要提供脚本文件才能通过您的Cron作业执行它。您可以通过将文件挂载到卷中来做到这一点。例如,您的Cron作业可能如下所示:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - /myscript/test.sh
            volumeMounts:
            - name: script-dir
              mountPath: /myscript
          restartPolicy: OnFailure
          volumes:
          - name: script-dir
            hostPath:
              path: /path/to/my/script/dir
              type: Directory

上面的示例显示了如何使用卷的hostPath类型来装载脚本文件。

 类似资料:
  • 据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

  • 具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承

  • 我在windows 10中创建了两个在我的minikube环境中运行的POD。一个POD带有Spring boot应用程序容器,另一个POD带有mysql容器。对于Spring boot应用程序,服务类型为nodePort,对于MYSQL pod,服务类型为club sterIP。这意味着Mysql pod只需要在集群内部进行通信。但是对于Spring boot应用程序,需要从浏览器访问,所以我配

  • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url