如何在kubernetes中从ConfigMap填充图像值?

时间:2019-02-15 09:08:54

标签: kubernetes

我想在kubernetes配置中写入docker映像名称,然后在我的部署文件中使用它,而不是直接对其进行硬编码。 所以代替:

image: "nginx:latest

我要执行以下操作:

image:
 valueFrom:
  configMapKeyRef:
   name: docker-config
   key: docker-image

该怎么做或其他替代方法? 谢谢。

3 个答案:

答案 0 :(得分:2)

这不是从configmap更新映像值的正确方法。可能还有其他方式。我能想到的一种方法是使用以下命令

cat some-depl.yaml | run 'sed' command to update image value | kubectl apply -f - 

答案 1 :(得分:0)

如果您要更新图像键的,可以通过设置使用以下数据驱动命令例如,strong>动词

  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

  # Update all deployments' and rc's nginx container's image to 'nginx:1.9.1'
  kubectl set image deployments,rc nginx=nginx:1.9.1 --all

  # Update image of all containers of daemonset abc to 'nginx:1.9.1'
  kubectl set image daemonset abc *=nginx:1.9.1

  # Print result (in yaml format) of updating nginx container image from local file, without hitting the server
  kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

您可以使用

获得更多详细信息
kubectl set image --help

这里有updating-resources

的更多示例

答案 2 :(得分:0)

您只能对ConfigMap值进行有限的设置:您可以将它们作为文件挂载到pod中,或者可以使用它们来设置环境变量,仅此而已。

通常使用更高级的工具来为您的任务将模板应用于Kubernetes配置(特别是指定图像标签是非常常规的)。我对Helm最熟悉,但是还有许多其他工具。

在Helm中,您必须创建一个chart。它由两部分组成,但是它使您可以在values.yaml文件中指定一组默认值:

tag: 1.9.1

然后,它使用Go "text/template"语言生成Kubernetes YAML文件,就像在templates/nginx-deployment.yaml文件中一样:

image: nginx:{{ .Values.tag }}

当您想要实际安装它时,您可以提供将填充到模板中的备用值

helm install . --set tag=1.15.8