CronJob:未知字段“ configMapRef”

时间:2019-02-21 09:14:40

标签: kubernetes kubernetes-cronjob

我正在应用 Kubernetes CronJob 。 到目前为止,它仍然有效。 现在,我要添加环境变量。 (env:-name ...见下文) 尝试应用时出现错误

  io.k8s.api.core.v1.EnvVarSource中的

未知字段“ configMapRef”

我不喜欢在这里设置所有单打变量。我更喜欢将configmap链接为不要将变量加倍。 如何在CronJob文件中设置指向configmap.yaml变量的链接,如何编码?

坦率

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: ad-sync
  creationTimestamp: 2019-02-15T09:10:20Z
  namespace: default
  selfLink: /apis/batch/v1beta1/namespaces/default/cronjobs/ad-sync
spec:
  concurrencyPolicy: Allow
  failedJobsHistoryLimit: 1
  successfulJobsHistoryLimit: 3
  suspend: false
  schedule: "0 */1 * * *"
  jobTemplate:
    metadata:
      labels:
        job: ad-sync
    spec:
      template:
        spec:
          containers:
          - name: ad-sync
            image: foo.azurecr.io/foobar/ad-sync
            command: ["dotnet", "AdSyncService.dll"]
            args: []
            env:
              - name: AdSyncService
                valueFrom:
                  configMapRef:
                    name: ad-sync-service-configmap
          restartPolicy: OnFailure

4 个答案:

答案 0 :(得分:3)

env字段中没有这样的字段 configMapRef ,而是有一个名为 configMapKeyRef

的字段

为了获得有关 kubernetes对象的更多详细信息,使用 kubectl解释--help

十分方便

例如,如果您想检查所有按键及其类型,可以使用以下命令

kubectl explain cronJob --recursive

kubectl explain cronjob.spec.jobTemplate.spec.template.spec.containers.env.valueFrom.configMapKeyRef

答案 1 :(得分:1)

您应将configMapKeyRef用于单个值,或将configMapRef与envFrom一起使用

答案 2 :(得分:0)

它是这样工作的:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  ...
spec:
  ...
  jobTemplate:
    metadata:
      ...
    spec:
      template:
        spec:
          containers:
          - name: ad-sync
            ...
            envFrom:
              - configMapRef:
                  name: ad-sync-service-configmap
            command: ["dotnet", "AdSyncService.dll"]

答案 3 :(得分:0)

有两种方法,对单个值使用ROW_NUMBER或对多个值使用valueFrom

envFrom用于valueFrom属性中,如下所示:

env

spec: template: spec: containers: - name: ad-sync image: foo.azurecr.io/foobar/ad-sync command: ["dotnet", "AdSyncService.dll"] args: [] env: - name: AdSyncService valueFrom: configMapKeyRef: name: ad-sync-service-configmap key: log_level 直接在envFrom属性内部使用,如下所示:

container

ConfigMap供参考:

spec:
  template:
    spec:
      containers:
      - name: ad-sync
        image: foo.azurecr.io/foobar/ad-sync
        command: ["dotnet", "AdSyncService.dll"]
        envFrom:
          - configMapRef:
              name: ad-sync-service-configmap

两者的主要区别是:

  • apiVersion: v1 kind: ConfigMap metadata: name: ad-sync-service-configmap namespace: default data: log_level: INFO 将从引用的configMap中注入键的值
  • valueFrom将所有configMap密钥作为环境变量注入

示例的主要问题是,您在envFrom内使用了configMapRef中的envFrom,其中实际上应该是configMapKeyRef。 另外,valueFrom需要一个key属性来标识数据来自何处。

有关更多详细信息,请签入this文档。