2

我正在应用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

4 回答 4

5

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

为了更详细地了解kubernetes 对象,使用kubectl explain --help很方便

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

kubectl explain cronJob --recursive

kubectl explain cronjob.spec.jobTemplate.spec.template.spec.containers.env.valueFrom.configMapKeyRef
于 2019-02-21T09:24:09.240 回答
2

您应该将configMapKeyRef用于单个值或将 configMapRef 与envFrom

于 2019-02-21T09:20:50.067 回答
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"]

于 2019-02-21T10:35:29.197 回答
0

有两种方法,valueFrom用于单个值或envFrom多个值。

valueFromenv在属性内部使用 ,如下所示:

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如下所示:

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

ConfigMap 供参考:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ad-sync-service-configmap
  namespace: default
data:
  log_level: INFO

两者的主要区别在于:

  • valueFrom将从引用的 configMap 中注入 aa 键的值
  • envFrom将所有 configMap 键作为环境变量注入

您的示例的主要问题是您使用了configMapReffromenvFrom内部valueFrom实际应该是 configMapKeyRef 的地方。此外,configMapKeyRef需要一个关键属性来识别数据的来源。

有关更多详细信息,请查看文档。

于 2019-02-21T11:04:53.600 回答