解决 AWS EKS 中 CronJob 资源未找到的问题

44次阅读
没有评论

问题描述

在 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 * * * *

因此,为了解决这个问题,用户可以执行以下操作:

方案

  1. 首先,确认使用的 Kubernetes 版本是否受到了 NotFound 错误的影响。根据问题描述,用户的 Kubernetes 版本为 v1.10.11-eks。在一些情况下,升级到较新的 Kubernetes 版本可能会解决这个问题。
  2. 确认 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 资源未找到的问题。

正文完