【问题标题】:Manually trigger kubernetes cronjob fails手动触发 kubernetes cronjob 失败
【发布时间】:2021-12-16 02:35:21
【问题描述】:

我的k8s版本:

    kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:38:50Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.7-eks-d88609", GitCommit:"d886092805d5cc3a47ed5cf0c43de38ce442dfcb", GitTreeState:"clean", BuildDate:"2021-07-31T00:29:12Z", GoVersion:"go1.15.12", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.22) and server (1.20) exceeds the supported minor version skew of +/-1

我的 cronjob 文件:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  labels:
    app: git-updater
  name: git-updater
  namespace: my-ns
spec:
  concurrencyPolicy: Replace
  failedJobsHistoryLimit: 2
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: git-updater
          name: git-updater
        spec:
          containers:
          - args:
            - sh
            - -c
            - apk add --no-cache git openssh-client && cd /repos && ls -d */*.git/
              | while read dir; do cd /repos/$dir; git gc; git fetch --prune; done
            image: alpine
            name: updater
            volumeMounts:
            - mountPath: test
              name: test
            - mountPath: test
              name: test
          restartPolicy: Never
          volumes:
          - persistentVolumeClaim:
              claimName: pvc
            name: repos
  schedule: '@daily'
  successfulJobsHistoryLimit: 4

...

当我从文件创建作业时,一切顺利:

kubectl -n my-ns create -f git-updater.yaml
cronjob.batch/git-updater created

但我想手动触发它只是为了测试目的,所以我这样做了:

kubectl -n my-ns create job --from=cronjob/git-updater test-job
error: unknown object type *v1beta1.CronJob

这很奇怪,因为我刚刚能够从文件中创建它。
在另一个类似的帖子中,建议从 ApiVersion v1beta1 切换到 v1.... 但是当我这样做时,我得到:

 kubectl -n my-ns create -f git-updater.yaml
error: unable to recognize "git-updater.yaml": no matches for kind "CronJob" in version "batch/v1"

我有点卡在这里,如何测试我新成功创建的 CronJob?

【问题讨论】:

    标签: kubernetes kubernetes-cronjob


    【解决方案1】:

    那是你的 v1.20 集群版本,就是这样做的。 简短的回答是您应该将集群升级到 1.21,其中 cronjobs 工作或多或少稳定。

    检查

    1. no matches for kind "CronJob" in version "batch/v1",特别是评论

    一件事是api版本,另一件事是哪个版本 您正在创建的资源可用。在 1.19.x 版本中,您确实拥有 batch/v1 作为可用的 api 资源,但您没有该资源 CronJob 下。

    1. Kubernetes Create Job from Cronjob not working

    我有一个 1.20.9 的 GKE 集群,遇到和你一样的问题

    $kubectl version
    
    Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:38:50Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.9-gke.1001", GitCommit:"1fe18c314ed577f6047d2712a9d1c8e498e22381", GitTreeState:"clean", BuildDate:"2021-08-23T23:06:28Z", GoVersion:"go1.15.13b5", Compiler:"gc", Platform:"linux/amd64"}
    WARNING: version difference between client (1.22) and server (1.20) exceeds the supported minor version skew of +/-1
    
    cronjob.batch/git-updater created
    
    $kubectl -n my-ns create job --from=cronjob/git-updater test-job
    error: unknown object type *v1beta1.CronJob
    

    同时,您的 cronjob yaml 与 1.21 GKE one 上的 apiVersion: batch/v1 完美配合。

    $kubectl version
    Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:38:50Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3-gke.2001", GitCommit:"77cdf52c2a4e6c1bbd8ae4cd75c864e9abf4c79e", GitTreeState:"clean", BuildDate:"2021-08-20T18:38:46Z", GoVersion:"go1.16.6b7", Compiler:"gc", Platform:"linux/amd64"}
    
    
    $kubectl -n my-ns create -f cronjob.yaml
    cronjob.batch/git-updater created
    $ kubectl -n my-ns create job --from=cronjob/git-updater test-job
    job.batch/test-job created
    
    $kubectl describe job test-job -n my-ns
    Name:           test-job
    Namespace:      my-ns
    Selector:       controller-uid=ef8ab972-cff1-4889-ae11-60c67a374660
    Labels:         app=git-updater
                    controller-uid=ef8ab972-cff1-4889-ae11-60c67a374660
                    job-name=test-job
    Annotations:    cronjob.kubernetes.io/instantiate: manual
    Parallelism:    1
    Completions:    1
    Start Time:     Tue, 02 Nov 2021 17:54:38 +0000
    Pods Statuses:  1 Running / 0 Succeeded / 0 Failed
    ...
    Events:
      Type    Reason            Age   From            Message
      ----    ------            ----  ----            -------
      Normal  SuccessfulCreate  16m   job-controller  Created pod: test-job-vcxx9
    

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2019-12-09
      • 2017-02-21
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多