如何在Job中使用环境变量值?

4

你好,我想将环境变量值传递给一个作业。为了做到这一点,我使用以下 Kubernetes 模板:

apiVersion: batch/v1
kind: Job
metadata:
  name: socksdownloader
spec:
  template:
    spec:
      containers:
      - name: socksdownloader
        image: socksdownloader:0.0.1
   #     env:
   #     - name: REDIS_HOST
   #       value: redis
   #     - name: REDIS_PORT
   #       value: 6379
   #     - name: REDIS_DB
   #       value: 0
   #     - name: REDIS_KEY
   #       value: "SOCK:"
        command: ["python",  "src/main.py"]
      restartPolicy: Never
  backoffLimit: 4

如果我取消yml文件中的env条目的注释,将会得到以下错误:
请求无效:patch: 无效的值:"map[metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"name":"socksdownloader","namespace":"default"},"spec":{"backoffLimit":4,"template":{"spec":{"containers":[{"command":["python","src/main.py"],"env":[{"name":"REDIS_HOST","value":"redis"},{"name":"REDIS_PORT","value":6379},{"name":"REDIS_DB","value":0},{"name":"REDIS_KEY","value":"SOCK:"}],"image":"socksdownloader:0.0.1","name":"socksdownloader"}],"restartPolicy":"Never"}}}}\n]] spec:map[template:map[spec:map[]]]]": 无法将int64转换为string
问题是如何将这些值传递给一个Job,以便可以连接到redis。
谢谢。
2个回答

7
Kubernetes的envvar规范要求环境变量值被强制转换为字符串,因此整数需要通过引号传递。
使用引号与整数值:
- name: REDIS_PORT
  value: "6379"
- name: REDIS_DB
  value: "0"

1
对于端口,它需要是value: "6379",数据库也是类似的。YAML会自动猜测是否为数字,但环境变量必须是字符串。因此会出现“无法将int64转换为字符串”的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接