问题描述
在 Amazon EKS Kubernetes 集群中需要运行一个 CronJob,但是在将清单发布到 k8s 后,虽然对象存在,可以列出和获取它,但无法描述它并查看其事件。而且,CronJob 似乎根本没有启动。根据 cron 表达式,它应该在第一个小时启动。
用户已经做了以下操作:
1. 创建了 CronJob 的清单文件。
2. 使用 kubectl apply -f
命令将清单部署。
但是,用户在使用 kubectl describe
命令时出现了问题。
解决方案
请注意以下操作可能因版本差异而有所不同,建议做好备份并查阅相关文档。
用户在描述 CronJob 时遇到了 NotFound
错误。这是 Kubernetes 中的一个已知问题,可能会在一些版本中出现,而在后续版本中得到了修复。
另外,用户提到了 CronJob 的 cron 表达式。然而,根据用户提供的 cron 表达式 * */11 * * *
,实际上是表示“每小时的第 11 分钟”。如果用户希望任务在每个新小时开始时执行,cron 表达式应为 0 * * * *
。
因此,为了解决这个问题,用户可以执行以下操作:
方案
- 首先,确认使用的 Kubernetes 版本是否受到了
NotFound
错误的影响。根据问题描述,用户的 Kubernetes 版本为v1.10.11-eks
。在一些情况下,升级到较新的 Kubernetes 版本可能会解决这个问题。 - 确认 CronJob 的 cron 表达式是否符合预期。如果用户希望任务在每个新小时开始时执行,应将 cron 表达式更改为
0 * * * *
。
以下是修改后的 CronJob 清单示例:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: aws-ecr-token
namespace: default
labels:
app: aws-ecr-token
component: infrastructure
spec:
schedule: "0 * * * *"
jobTemplate:
metadata:
name: aws-ecr-token
namespace: default
labels:
app: aws-ecr-token
component: infrastructure
spec:
completions: 1
backoffLimit: 3
activeDeadlineSeconds: 60
parallelism: 1
template:
metadata:
name: aws-ecr-token
namespace: default
labels:
app: aws-ecr-token
component: infrastructure
spec:
containers:
- name: aws-ecr-token
image: docker pull mesosphere/aws-cli
command:
- "sh"
- "-c"
- "$(aws ecr get-login --no-include-email)"
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: aws-ecr
key: accessKey
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: aws-ecr
key: secretKey
- name: AWS_DEFAULT_REGION
valueFrom:
secretKeyRef:
name: aws-ecr
key: defaultRegion
volumeMounts:
- name: aws-ecr-config
mountPath: /root/.docker
restartPolicy: OnFailure
volumes:
- name: aws-ecr-config
secret:
secretName: aws-ecr-config
总结
用户在使用 Amazon EKS 中的 CronJob 时遇到了描述资源时的错误,同时也需要注意 cron 表达式的设置。建议用户先检查 Kubernetes 版本是否受到该问题的影响,然后修改 cron 表达式以满足预期的任务调度要求。通过以上操作,用户应该能够解决 CronJob 资源未找到的问题。
正文完