我想在运行时传递 kubernetes yaml 文件中的一些值,例如从配置/属性文件中读取。
最好的方法是什么?
在下面的示例中,我不想对端口值进行硬编码,而是从配置文件中读取端口号。
前任:
logstash.yaml
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: ReplicationController
metadata:
name: test
namespace: test
spec:
replicas: 1
selector:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: logstash
ports:
- containerPort: 33044 (looking to read this port from config file)
env:
- name: INPUT_PORT
value: "5044"
config.yaml
logstash_port: 33044
Run Code Online (Sandbox Code Playgroud)
这听起来像是 Helm (www.helm.sh) 的完美用例。
Helm Charts 可帮助您定义、安装和升级 Kubernetes 应用程序。您可以使用预定义的图表(如 Nginx 等)或创建自己的图表。
图表的结构如下:
mychart/
Chart.yaml
values.yaml
charts/
templates/
...
Run Code Online (Sandbox Code Playgroud)
在模板文件夹中,您可以包含 ReplicationController 文件(以及任何其他文件)。在该values.yaml文件中,您可以指定希望在模板之间共享的任何变量(例如端口号、文件路径等)。
值文件可以根据您的需要简单或复杂。值文件的示例:
myTestService:
containerPort: 33044
image: "logstash"
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下方法在模板文件中引用这些值:
apiVersion: v1
kind: ReplicationController
metadata:
name: test
namespace: test
spec:
replicas: 1
selector:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: logstash
ports:
- containerPort: {{ .Values.myTestService.containerPort }}
env:
- name: INPUT_PORT
value: "5044"
Run Code Online (Sandbox Code Playgroud)
完成后,您可以使用 编译成 Helm 图表helm package mychart。要部署到 Kubernetes 集群,您可以使用helm install mychart-VERSION.tgz. 然后,这会将您的图表部署到集群。版本号在文件中设置Chart.yaml。
| 归档时间: |
|
| 查看次数: |
10970 次 |
| 最近记录: |