在 k8s 容器中将环境变量与其他环境变量组合在一起
Composing environment variables with other environment variables in k8s containers
传递给容器的环境变量可以由已经存在的环境变量组成吗?类似于:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
env:
- name: URL
value: $(HOST):$(PORT)
这些清单是完整的文件。在其中使用变量不是一个好方法。虽然你可以。
使用下面的命令替换并通过管道传输到 kubectl。
sed -i -e "s#%%HOST%%#http://whatever#" file.yml;
尽管我建议使用 Helm。
阅读更多:
https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
Helm 及其 variables 似乎是处理此类用例的更好方法。
在下面的示例中,您有一个包含值和变量的部署片段:
spec:
containers:
- name: {{ .Chart.Name }}
image: "image/thomas:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: URL
value: {{ .Values.host }}:{{ .Values.port }}
这是使用一些自定义变量部署它的方法之一:
helm upgrade --install myChart . \
--set image.tag=v2.5.4 \
--set host=example.com \
--set-string port=12345 \
Helm 还允许您使用模板函数。你可以有 default
函数,如果它们没有被填充,这将进入默认值。在上面的示例中,您可以看到 required
显示消息,如果您不指定值,则无法进一步安装图表。还有 include
函数,允许您引入另一个模板并将结果传递给其他模板函数。
在单个 Pod 规范中,这完全符合您描述的语法,但环境变量必须在相同的 Pod 规范中定义(更早)。请参阅 Kubernetes 文档中的 Define Dependent Environment Variables。
env:
- name: HOST
value: host.example.com
- name: PORT
value: '80'
- name: URL
value: '$(HOST):$(PORT)'
除此之外,Kubernetes YAML 文件需要完全独立,并且您不能在系统上使用环境变量 运行 kubectl
来影响文件内容。 Helm 等其他工具可以更好地满足这一需求;有关示例,请参阅 。
传递给容器的环境变量可以由已经存在的环境变量组成吗?类似于:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
env:
- name: URL
value: $(HOST):$(PORT)
这些清单是完整的文件。在其中使用变量不是一个好方法。虽然你可以。
使用下面的命令替换并通过管道传输到 kubectl。
sed -i -e "s#%%HOST%%#http://whatever#" file.yml;
尽管我建议使用 Helm。
阅读更多: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
Helm 及其 variables 似乎是处理此类用例的更好方法。 在下面的示例中,您有一个包含值和变量的部署片段:
spec:
containers:
- name: {{ .Chart.Name }}
image: "image/thomas:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: URL
value: {{ .Values.host }}:{{ .Values.port }}
这是使用一些自定义变量部署它的方法之一:
helm upgrade --install myChart . \
--set image.tag=v2.5.4 \
--set host=example.com \
--set-string port=12345 \
Helm 还允许您使用模板函数。你可以有 default
函数,如果它们没有被填充,这将进入默认值。在上面的示例中,您可以看到 required
显示消息,如果您不指定值,则无法进一步安装图表。还有 include
函数,允许您引入另一个模板并将结果传递给其他模板函数。
在单个 Pod 规范中,这完全符合您描述的语法,但环境变量必须在相同的 Pod 规范中定义(更早)。请参阅 Kubernetes 文档中的 Define Dependent Environment Variables。
env:
- name: HOST
value: host.example.com
- name: PORT
value: '80'
- name: URL
value: '$(HOST):$(PORT)'
除此之外,Kubernetes YAML 文件需要完全独立,并且您不能在系统上使用环境变量 运行 kubectl
来影响文件内容。 Helm 等其他工具可以更好地满足这一需求;有关示例,请参阅