用脚本Kubernetes中的新值替换现有值

用脚本Kubernetes中的新值替换现有值,kubernetes,kubernetes-helm,minikube,configmap,Kubernetes,Kubernetes Helm,Minikube,Configmap,我构建一个Docker映像并使用COPY xyz.sh/bin/ xyz.sh文件包含1000多行代码,其中一行是主机:xyz.com 我在K8s中使用了此图像。现在我想更改xyz.sh文件中的主机值 我不想创建完整xyz.sh文件的ConfigMap并替换 新主机的值 我不想创建新的Docker映像 问题。 我有没有办法在configmap或其他方法的帮助下,在线更新一行或一个单词?重用现有的容器映像 一个简单的解决方案是使用configmap来更改这样的xyz.sh,如: apiVers

我构建一个Docker映像并使用
COPY xyz.sh/bin/
xyz.sh文件包含1000多行代码,其中一行是主机:xyz.com 我在K8s中使用了此图像。现在我想更改xyz.sh文件中的主机值

  • 我不想创建完整xyz.sh文件的ConfigMap并替换 新主机的值

  • 我不想创建新的Docker映像

问题。

我有没有办法在configmap或其他方法的帮助下,在线更新一行或一个单词?

重用现有的容器映像 一个简单的解决方案是使用configmap来更改这样的
xyz.sh
,如:

apiVersion:v1 种类:配置地图 元数据: 名称:新入口点 数据: new_entrypoint.sh:| #!/bin/bash sed-i的/Host:xyz\.com/Host:abc.io/'/path/to/xyz.sh 执行官“$@” 然后挂载这个新的配置映射并使用
命令
属性中的文件
new\u entrypoint.sh

这很难看,但您不需要在configmap中维护1k+行bash脚本

注意:如果您的
xyz.sh
不属于运行容器的当前用户/组,则此操作可能无效。它还违反了不变基础设施的理念。因此,您需要通过configmap条目替换
xyn.sh

从头开始 因此,行
Host:xyz.com
将成为您希望在运行时更改的配置。所以,您可能希望将这种硬编码的值更改为环境变量,以便在运行时重写它

例如,在您的
xyz.sh
中:

MY_HOST=${MY_HOST:-"xyz.com"}
在dockerfile中:

ENV MY_HOST="default_host_for_your_docker_image".
在k8s吊舱说明中,您可以执行以下操作:

containers:
  - name: xyz
    image: "your-docker-image-name"
    env:
    - name: MY_HOST
      value: abc.io
见:

在环境中存储配置

重用现有容器映像 一个简单的解决方案是使用configmap来更改这样的
xyz.sh
,如:

apiVersion:v1 种类:配置地图 元数据: 名称:新入口点 数据: new_entrypoint.sh:| #!/bin/bash sed-i的/Host:xyz\.com/Host:abc.io/'/path/to/xyz.sh 执行官“$@” 然后挂载这个新的配置映射并使用
命令
属性中的文件
new\u entrypoint.sh

这很难看,但您不需要在configmap中维护1k+行bash脚本

注意:如果您的
xyz.sh
不属于运行容器的当前用户/组,则此操作可能无效。它还违反了不变基础设施的理念。因此,您需要通过configmap条目替换
xyn.sh

从头开始 因此,行
Host:xyz.com
将成为您希望在运行时更改的配置。所以,您可能希望将这种硬编码的值更改为环境变量,以便在运行时重写它

例如,在您的
xyz.sh
中:

MY_HOST=${MY_HOST:-"xyz.com"}
在dockerfile中:

ENV MY_HOST="default_host_for_your_docker_image".
在k8s吊舱说明中,您可以执行以下操作:

containers:
  - name: xyz
    image: "your-docker-image-name"
    env:
    - name: MY_HOST
      value: abc.io
见:

在环境中存储配置


@AnkitSingh请编辑您的问题,因为它已用原件回答constraints@shawmzhu你告诉我的过程是从零开始的,我知道这一点。我还可以创建一个ConfigMap并复制所有行,放入ConfigMap并更新主机装载路径,这样就可以了。我的问题是如何在不创建新Docker映像的情况下插入新的主机值?好的,使用configmap将配置注入容器works(这样您就不需要创建新的Docker映像)。一种更简单的方法仍然是使用configmap,但类似于:@AnkitSingh请编辑您的问题,因为它已经用原始答案回答了constraints@shawmzhu你告诉我的过程是从零开始的,我知道这一点。我还可以创建一个ConfigMap并复制所有行,放入ConfigMap并更新主机装载路径,这样就可以了。我的问题是如何在不创建新Docker映像的情况下插入新的主机值?好的,使用configmap将配置注入容器works(这样您就不需要创建新的Docker映像)。一种更简单的方法仍然是使用configmap,但类似于:理想情况下,您应该重新构建映像。它还取决于,代码驻留在哪里,以及如何构建映像(CI/CD),等等。这似乎是代码中的一个重要错误,它阻止了它的部署。你为什么不想要修复后的Docker新形象呢?理想情况下,你应该重建你的形象。它还取决于,代码驻留在哪里,以及如何构建映像(CI/CD),等等。这似乎是代码中的一个重要错误,它阻止了它的部署。你为什么不想要一个新的Docker图像,因为它会被修复?