对Kubernetes清单文件中的值使用ENVs 我正在为一个新项目打下基础,我们将在谷歌KubNeNes引擎上运行一个应用程序,它具有多个环境(开发、分级、生产)。每个环境都是自己的GC项目

对Kubernetes清单文件中的值使用ENVs 我正在为一个新项目打下基础,我们将在谷歌KubNeNes引擎上运行一个应用程序,它具有多个环境(开发、分级、生产)。每个环境都是自己的GC项目,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我正在编写一些清单文件,我想抽象出任何特定于环境的值,以便根据更新/部署到的环境(项目)可以重用 我已经在Kubernetes Secrets中创建了值,将这些值转换为ENV是很简单的(请参见数据库\u URL)。但是,如果我想使用一个变量作为容器映像的值:gcr.io/my-app-production-123:latest,我将如何从一个秘密中传递该值 这是从清单文件中抽象特定于环境的值的正确方法吗?谢谢大家! apiVersion: batch/v1 kind: Job metadata:

我正在编写一些清单文件,我想抽象出任何特定于环境的值,以便根据更新/部署到的环境(项目)可以重用

我已经在Kubernetes Secrets中创建了值,将这些值转换为ENV是很简单的(请参见
数据库\u URL
)。但是,如果我想使用一个变量作为容器映像的值:
gcr.io/my-app-production-123:latest
,我将如何从一个秘密中传递该值

这是从清单文件中抽象特定于环境的值的正确方法吗?谢谢大家!

apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
spec:
  completions: 1
  template:
    metadata:
      name: db-migrate
    spec:
      restartPolicy: Never
      containers:
      - name: db-migrate
        # how can I reference secret/env for the value of image:?
        image: gcr.io/my-app-production-242920:latest
        args: ["bundle", "exec", "rake", "db:create", "db:migrate"]
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: DATABASE_URL

您可以将您的秘密装入容器中并使用它

例如:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: db-migrate
    image: gcr.io/my-app-production-242920:latest
    args: ["bundle", "exec", "rake", "db:create", "db:migrate"]
    volumeMounts:
    - name: <these_names_are_same>
      mountPath: "/container/where/to/mount"
      readOnly: true
  volumes:
  - name: <these_names_are_same>
    secret:
      secretName: <your deployed secret name>
apiVersion:v1 种类:豆荚 元数据: 姓名:mypod 规格: 容器: -名称:db迁移 图片:gcr.io/my-app-production-242920:最新版本 参数:[“bundle”、“exec”、“rake”、“db:create”、“db:migrate”] 体积数量: -姓名: 挂载路径:“/container/where/to/mount” 只读:正确 卷数: -姓名: 秘密: 秘书长姓名:
您可能需要使用更高级的工具来注入这样的变量。我熟悉的一个是,但是还有其他工具可以让您将参数注入YAML文件

你不能用你描述的方式来使用秘密。使用机密(或配置映射,它们非常相似)可以做的唯一事情就是使用它们。在一定程度上,你可以;但是,如果您查看允许使用
$(变量)
语法的位置,就会明确地调用它,并且只允许
参数:
命令:
环境:

在Helm中,您可以在YAML文件中使用Go的模板语法,因此可以编写

image: gcr.io/my-app-production:{{ .Values.tag }}
然后使用以下内容部署服务

helm install ./my-app --set tag=242920

但我很确定,在朴素的Kubernetes中,没有一种方法可以参数化POD(或部署、状态集或…)。

谢谢。有一件事我不清楚,那就是提供一个挂载路径。在我当前的配置中,我只需为
图像指定我的容器的gcr.io url:
。我不清楚我会为mountpath放什么您为
图像指定的内容:
是您将使用/拉取的docker图像。但是您定义了该图像的规格。编辑了我的答案以包含您的要求。谢谢。我在这里打开了一个标签来调查赫尔姆。感觉我的方法不太正确,但我仍然在熟悉管理多环境kubernetes应用程序的工具