kubernetes - 如何在部署前将环境变量注入 Kubernetes Pod
问题描述
我需要从我的 pod 内的环境变量中注入容器端口。怎么做?
已通过文档,链接:- 1. https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/ 2. https://kubernetes.io/docs/tasks /inject-data-application/environment-variable-expose-pod-information/
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: $(MY_CONTAINER_PORT)
env:
- name: MY_CONTAINER_PORT
value: 80
error: error validating "nginx-pod-exposed-through-env.yaml": error validating data: ValidationError(Pod.spec.containers[0].ports[0].containerPort): invalid type for io.k8s.api.core.v1.ContainerPort.containerPort: got "string", expected "integer"; if you choose to ignore these errors, turn validation off with --validate=false
解决方案
实现此目的的一种方法是使用模板工具,例如ytt。使用 ytt,您可以将清单转换为如下模板:
#@ load("@ytt:data", "data")
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: #@ data.values.port
然后提供一个values.yml
类似的东西:
#@data/values
---
port: 8080
假设原始模板被命名test.yml
,我们可以ytt
像这样运行来生成输出:
$ ytt -f test.yml -f values.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 8080
然后,ytt 实用程序允许我们使用--data-value
(或-v
简称)命令行覆盖数据值。更改为端口 80 的示例:
$ ytt -v port=80 -f test.yml -f values.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
您最初的问题听起来像是您想使用环境变量。支持此功能--data-values-env
。使用前缀的示例MYVAL
:
$ export MYVAL_port=9000
$ ytt --data-values-env MYVAL -f test.yml -f values.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 9000
然后,您可以组合ytt
并kubectl
创建和应用资源:
ytt --data-values-env MYVAL -f test.yml -f values.yml | kubectl apply -f-
有关将数据注入 ytt 模板的其他信息,请参见https://github.com/k14s/ytt/blob/develop/docs/ytt-data-values.md。
推荐阅读
- c# - 为什么我不能在 Visual Studio 的另一个项目中为同一个文件添加另一个链接?
- python - 为什么 Amadeus 传统航班搜索(航班优惠)API 缺少定期航班?例如 EasyJet、Wizz Air、TUI?
- javascript - 更改图表的宽度和高度(Echarts 库)
- arrays - 如何将新项目附加到数组并使用 F# 中的新项目更新数组?
- java - ToggleButton 阻止我的应用程序启动
- c# - 使用 C# 在多个线程中以块的形式从 FTP 服务器下载单个文件
- html - 轻松使用 css 动画
- fortran - 如何在 FORTRAN 77 的 FORMAT 中按列写入
- ios - 缩放后如何找到 UIImageView 的新中心?
- python - Python,openpyxl,循环使用基于值的单元格的随机 bg 颜色