标签: kubernetes-cronjob

如何自动删除已完成的Kubernetes工作?

有没有办法自动删除已完成的工作,除了使用cronjob清理已完成的工作?

K8S工作文件规定,完成作业的预期行为是他们留在已完成的状态,直到手动删除.因为我每天通过k8s cronjobs运行成千上万的工作,我不想保持完成的工作.

cron kubernetes kubernetes-cronjob kubernetes-jobs

45
推荐指数
8
解决办法
4万
查看次数

CronJob 中的“kubectl create job”失败,并显示“错误:未知对象类型 *v1beta1.CronJob”

我有一个具有以下版本的 Kubernetes 集群:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.1", GitCommit:"632ed300f2c34f6d6d15ca4cef3d3c7073412212", GitTreeState:"clean", BuildDate:"2021-08-19T15:38:26Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.13", GitCommit:"aac5f64a5218b0b1d0138a57d273a12db99390c9", GitTreeState:"clean", BuildDate:"2021-01-18T07:43:30Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.22) and server (1.16) exceeds the supported minor version skew of +/-1
Run Code Online (Sandbox Code Playgroud)

我的 Kubernetes 集群中有一个 CronJob。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: abc-cronjob
   namespace: abc-namespace
...
Run Code Online (Sandbox Code Playgroud)

Kubernetes 集群识别 cron 作业的 api 资源。

$ kubectl -n abc-namespace api-resources
NAME                              SHORTNAMES   APIVERSION                        NAMESPACED   KIND
...
cronjobs                          cj           batch/v1beta1                     true …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubectl kubernetes-cronjob kubernetes-jobs

29
推荐指数
3
解决办法
2万
查看次数

Kronnetes中的Cron Jobs - 连接到现有的Pod,执行脚本

我确定我错过了一些明显的东西.我查看了Kubernetes上ScheduledJobs/CronJobs的文档,但是我找不到按计划执行以下操作的方法:

  1. 连接到现有Pod
  2. 执行脚本
  3. 断开

我有其他方法可以做到这一点,但他们感觉不对.

  1. 安排一个cron任务:kubectl exec -it $(kubectl get pods --selector = some-selector | head -1)/ path/to/script

  2. 创建一个具有"Cron Pod"的部署,该部署也包含应用程序,以及许多"Non Cron Pod",它们只是应用程序.Cron Pod将使用不同的图像(一个安排了cron任务).

如果可能的话,我宁愿使用Kubernetes ScheduledJobs来防止同一个Job同时运行多次,也因为它让我感觉更合适.

有没有办法通过ScheduledJobs/CronJobs来做到这一点?

http://kubernetes.io/docs/user-guide/cron-jobs/

kubernetes kubernetes-cronjob

20
推荐指数
2
解决办法
1万
查看次数

Pod 无限期地停留在 PodInitializing 状态

我有一个 k8s cronjob,它由一个 init 容器和一个 pod 容器组成。如果 init 容器失败,主容器中的 Pod 永远不会启动,并无限期地停留在“PodInitializing”中。

如果 init 容器失败,我的目的是让作业失败。

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: job-name
  namespace: default
  labels:
    run: job-name
spec:
  schedule: "15 23 * * *"
  startingDeadlineSeconds: 60
  concurrencyPolicy: "Forbid"
  successfulJobsHistoryLimit: 30
  failedJobsHistoryLimit: 10
  jobTemplate:
    spec:
      # only try twice
      backoffLimit: 2
      activeDeadlineSeconds: 60
      template:
        spec:
          initContainers:
          - name: init-name
            image: init-image:1.0
          restartPolicy: Never
          containers:
          - name: some-name
            image: someimage:1.0
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

pod 上的 kubectl 卡住会导致:

Name:               job-name-1542237120-rgvzl
Namespace:          default
Priority:           0 …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod kubernetes-cronjob kubernetes-jobs

15
推荐指数
3
解决办法
3万
查看次数

本地时区(自定义时区)中的 Kubernetes Cronjob 计划,因为它始终是 UTC

我想在我的本地时区(GMT+7)中安排 kubernetes cronjob,目前当我在 k8s 中安排 cronjob 时,我需要在 UTC 中安排,但我想在我的本地时区中安排,正如Kubernetes 文档中指定的那样,我需要更改kube-controller 管理器中的时区如下

所有 CronJob 计划:时间均基于 kube-controller-manager 的时区。

如果您的控制平面在 Pod 或裸容器中运行 kube-controller-manager,则为 kube-controller-manager 容器设置的时区将决定 cron 作业控制器使用的时区。

但我找不到为 kube-controller-manager 设置时区的方法,我正在使用 Kuberenetes on-premise v1.17,我在 - /etc/kubernetes/manifests/kube-controller-manager 中找到了控制器管理器清单文件.yaml 但找不到更改时区的方法或文档。

docker kubernetes kubernetes-cronjob

13
推荐指数
3
解决办法
1万
查看次数

使用 Kubernetes CronJob 基于时间的扩展:如何避免部署覆盖 minReplicas

我有一个 Horizo​​ntalPodAutoscalar 来根据 CPU 扩展我的 pod。这里的 minReplicas 设置为5

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-web
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-web
  minReplicas: 5 
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

Run Code Online (Sandbox Code Playgroud)

然后,我添加了 Cron 作业来根据一天中的时间放大/缩小我的水平 pod 自动缩放器:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: production
  name: cron-runner
rules:
- apiGroups: ["autoscaling"]
  resources: ["horizontalpodautoscalers"]
  verbs: ["patch", "get"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: cron-runner
  namespace: production
subjects:
- kind: ServiceAccount
  name: sa-cron-runner …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-cronjob hpa

12
推荐指数
1
解决办法
1万
查看次数

Kubernetes cronjobs`startingDeadlineSeconds'究竟意味着什么?

在Kubernetes cronjobs中,在限制部分中说明了这一点

如果CronJob控制器在从CronJob的开始时间到开始时间加上startingDeadlineSeconds之前的一段时间内没有运行或中断,或者如果跨度涵盖多个开始时间并且concurrencyPolicy不允许并发,则作业可能无法运行.

我从中理解的是,如果startingDeadlineSeconds设置为10并且cronjob在其预定时间由于某种原因无法启动,那么只要这些10秒没有通过,它仍然可以尝试再次启动,但是在10秒,它肯定不会被启动,这是正确的?

此外,如果我已经concurrencyPolicy设置为Forbid,如果cronjob尝试安排,当有一个已经运行时,K8会将其视为失败吗?

kubernetes kubernetes-cronjob

11
推荐指数
1
解决办法
5259
查看次数

Kubernetes Cron Job的呼叫端点

我有一个在Kubernetes集群中的Docker容器中运行的webapp。该应用程序具有一个我想定期调用的端点。该应用程序在多个节点/吊舱中运行,重要的是只有一个节点执行端点发起的任务。我看过Kubernetes Cron Jobs,但没有找到有关从Kubernetes Cron Job调用端点的任何文档。有人有解决这个问题的建议吗?在只有一个节点执行任务的群集中,您如何处理调度?

cron kubernetes kubernetes-cronjob

9
推荐指数
1
解决办法
4987
查看次数

Kubernetes CronJob 多个调度时间

我想在不同的时间运行一个 cron。

是否可以在我的 YML 文件中执行类似的操作:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: 
    - "*/10 00-08 * * *"
    - "*/5 09-18 * * *"
    - "*/10 19-23 * * *"
  concurrencyPolicy: Forbid
...
Run Code Online (Sandbox Code Playgroud)

或者我是否必须为每个计划时间创建单独的 YML 文件?

cron kubernetes kubernetes-cronjob

9
推荐指数
1
解决办法
6840
查看次数

启用自动缩放时,GKE不会缩放到0或从0缩放

我想在我的GKE上运行CronJob,以便每天执行批处理操作.理想的情况是我的集群在作业未运行时扩展到0个节点,并且每次满足计划时动态扩展到1个节点并在其上运行作业.

我首先尝试通过使用kubernetes doc 中的一个简单的CronJob来实现这一点,它只打印当前时间并终止.

我首先使用以下命令创建了一个集群:

gcloud container clusters create $CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes 0 --max-nodes 1 --num-nodes 1 \
    --zone $CLUSTER_ZONE
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个CronJob,其中包含以下描述:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

作业计划每小时运行一次,并在终止前打印当前时间.

首先,我想创建具有0个节点的集群,但设置--num-nodes 0结果是错误的.为什么会这样?请注意,我可以在创建集群后手动将集群缩小到0个节点.

其次,如果我的群集有0个节点,则不会调度作业,因为群集不会自动扩展到1个节点,而是会出现以下错误:

无法安排pod:没有可用于安排pod的节点.

第三,如果我的集群有1个节点,则作业正常运行但在此之后,集群不会缩小到0个节点,而是保留1个节点.我让我的集群运行两个连续的工作,并没有在两者之间缩小.我假设一小时应该足够长,以便群集这样做.

我错过了什么?

autoscaling google-cloud-platform kubernetes google-kubernetes-engine kubernetes-cronjob

8
推荐指数
1
解决办法
1994
查看次数