用脚本Kubernetes中的新值替换现有值
我构建一个Docker映像并使用用脚本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
COPY xyz.sh/bin/
xyz.sh文件包含1000多行代码,其中一行是主机:xyz.com
我在K8s中使用了此图像。现在我想更改xyz.sh文件中的主机值
- 我不想创建完整xyz.sh文件的ConfigMap并替换 新主机的值
- 我不想创建新的Docker映像
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图像,因为它会被修复?