【问题标题】:k8s cronjob not running updated codes, but manual create this job worksk8s cronjob 未运行更新的代码,但手动创建此作业有效
【发布时间】:2021-12-23 18:36:46
【问题描述】:

我有一个在 k8s 和特定容器内运行的 cronjob。我有一个 python 脚本可以在这个 cronjob 中运行,但是它没有运行最新的代码,但是我检查了它提取的图像是最新的。

当我手动运行kubectl create job --from=....时,它确实运行了最新的python代码。 p>

我错过了什么吗?

我已经尝试删除现有的 cronjob 并再次应用它,它仍然没有运行最新的代码。只有当我手动创建作业时它才会运行最新的代码。

自动和手动运行同一个作业的行为很奇怪......

描述作业 - cronjob 自动运行

Name:           severity-1637733600
Namespace:      security
Selector:       controller-uid=167b250b-831c-4725-a1f8-bb46553e2948
Labels:         controller-uid=167b250b-831c-4725-a1f8-bb46553e2948
                job-name=severity-1637733600
Annotations:    <none>
Controlled By:  CronJob/severity
Parallelism:    1
Completions:    1
Start Time:     Wed, 24 Nov 2021 14:00:00 +0800
Completed At:   Wed, 24 Nov 2021 14:00:51 +0800
Duration:       51s
Pods Statuses:  0 Running / 1 Succeeded / 0 Failed
Pod Template:
  Labels:  controller-uid=167b250b-831c-4725-a1f8-bb46553e2948
           job-name=severity-1637733600
  Containers:
   fetch-y-info:
    Image:      security/portal:3c62acai
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/sh
    Args:
      -c
      python scripts/severity.py -vv
    Environment:
      DB_DRIVER:    <set to the key 'driver' in secret 'security-secret'>    Optional: false
    Mounts:         <none>
  Volumes:          <none>
Events:             <none>

描述作业 - 手动运行

Name:           severity-manual
Namespace:      security
Selector:       controller-uid=97952b85-24a5-4bbc-8e49-247e8bf2dcb1
Labels:         controller-uid=97952b85-24a5-4bbc-8e49-247e8bf2dcb1
                job-name=severity-manual
Annotations:    cronjob.kubernetes.io/instantiate: manual
Parallelism:    1
Completions:    1
Start Time:     Wed, 24 Nov 2021 15:34:56 +0800
Completed At:   Wed, 24 Nov 2021 15:35:18 +0800
Duration:       22s
Pods Statuses:  0 Running / 1 Succeeded / 0 Failed
Pod Template:
  Labels:  controller-uid=97952b85-24a5-4bbc-8e49-247e8bf2dcb1
           job-name=severity-manual
  Containers:
   fetch-y-info:
    Image:      security/portal:3c62acai
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/sh
    Args:
      -c
      python scripts/severity.py -vv
    Environment:
      DB_DRIVER:    <set to the key 'driver' in secret 'security-secret'>    Optional: false
    Mounts:         <none>
  Volumes:          <none>
Events:
  Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
  Normal  SuccessfulCreate  2m7s  job-controller  Created pod: severity-manual-hbtzd
  Normal  Completed         105s  job-controller  Job completed

【问题讨论】:

  • 错误是什么?
  • 没有错误。它只是没有运行我最新的代码....
  • 在这种情况下,您需要将 CronJob yaml 发布到问题中,并 kubectl describe 完成的作业(手动运行 vs k8s 计划)。
  • 我已经发布了描述,谢谢
  • CronJob 运行 51 秒,而手动作业运行 22 秒。如果他们用相同的数据集做了同样的事情,你怎么知道哪个是“最新的代码”,你在看某种输出,例如。日志?桌子?您能否简要(不需要详细信息)描述两者之间的不同之处,让您相信其中一个不是最新的,以及您的集群中有多少个工作节点?

标签: python kubernetes cron yaml containers


【解决方案1】:

可能有几个原因。检查两个作业(手动创建的作业和 cronjob 创建的作业)是否使用相同的镜像 ID:(假设您的 pod 中只有一个容器)

kubectl get job &lt;job-name&gt; -o=jsonpath='{.spec.template.spec.containers[0].image}'

如果它们都匹配,则可能是具有相同标签的两个不同图像,它们已经存在于集群中的不同节点上。这与 cronjob 上指定的 image pull policy 有关。您可以通过将 cronjob 中的图像 ID 更改为图像摘要来检查是否是这种情况。

为确保 Pod 始终使用相同版本的容器镜像,您可以指定镜像的摘要;将 : 替换为 @(例如,image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 2022-06-10
    • 2013-11-28
    • 1970-01-01
    • 2018-02-01
    • 2014-12-05
    • 2021-11-30
    • 2012-09-18
    相关资源
    最近更新 更多