我将concurrencyPolicy
设置为Allow
,这是我的cronjob.yaml
:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: gke-cron-job
spec:
schedule: '*/1 * * * *'
startingDeadlineSeconds: 10
concurrencyPolicy: Allow
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
metadata:
labels:
run: gke-cron-job
spec:
restartPolicy: Never
containers:
- name: gke-cron-job-solution-2
image: docker.io/novaline/gke-cron-job-solution-2:1.3
env:
- name: NODE_ENV
value: 'production'
- name: EMAIL_TO
value: 'novaline.dulin@gmail.com'
- name: K8S_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
ports:
- containerPort: 8080
protocol: TCP
阅读文档后:https://cloud.google.com/kubernetes-engine/docs/how-to/cronjobs
我仍然不知道如何使用concurrencyPolicy
。
我如何运行cron作业并发?
以下是cron作业的日志:
☁ nodejs-gcp [master] ⚡ kubectl logs -l run=gke-cron-job
> gke-cron-job-solution-2@1.0.2 start /app
> node ./src/index.js
config: { ENV: 'production',
EMAIL_TO: 'novaline.dulin@gmail.com',
K8S_POD_NAME: 'gke-cron-job-1548660540-gmwvc',
VERSION: '1.0.2' }
[2019-01-28T07:29:10.593Z] Start daily report
send email: { to: 'novaline.dulin@gmail.com', text: { test: 'test data' } }
> gke-cron-job-solution-2@1.0.2 start /app
> node ./src/index.js
config: { ENV: 'production',
EMAIL_TO: 'novaline.dulin@gmail.com',
K8S_POD_NAME: 'gke-cron-job-1548660600-wbl5g',
VERSION: '1.0.2' }
[2019-01-28T07:30:11.405Z] Start daily report
send email: { to: 'novaline.dulin@gmail.com', text: { test: 'test data' } }
> gke-cron-job-solution-2@1.0.2 start /app
> node ./src/index.js
config: { ENV: 'production',
EMAIL_TO: 'novaline.dulin@gmail.com',
K8S_POD_NAME: 'gke-cron-job-1548660660-8mn4r',
VERSION: '1.0.2' }
[2019-01-28T07:31:11.099Z] Start daily report
send email: { to: 'novaline.dulin@gmail.com', text: { test: 'test data' } }
如您所见,时间戳表示cron作业不是并发的。
答案 0 :(得分:1)
这是因为您正在阅读错误的文档。 CronJobs不是GKE特有的功能。有关CronJob API的完整文档,请参考Kubernetes文档:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#concurrency-policy(在下面引用)。
并发策略决定在先前的CronJob仍在运行时是否可以启动新容器。如果您有一个CronJob每5分钟运行一次,有时作业需要8分钟,那么您可能会遇到同时运行多个作业的情况。这项政策决定了在这种情况下该怎么做。
并发策略
.spec.concurrencyPolicy字段也是可选的。它指定如何处理由该cron作业创建的作业的并发执行。规范只能指定以下并发策略之一:
Allow
(默认):cron作业允许同时运行的作业Forbid
:Cron作业不允许并发运行。如果是时候开始新的任务并且之前的任务还没有完成,则cron任务会跳过新的任务Replace
:如果是时候开始新的作业了,而以前的作业还没有完成,那么cron作业将用新的作业替换当前正在运行的作业。请注意,并发策略仅适用于同一cron作业创建的作业。如果有多个cron作业,则始终允许其各自的作业同时运行。