gpt4 book ai didi

kubernetes - 如何使用 Helm 图表拉取环境变量

转载 作者:行者123 更新时间:2023-12-02 22:26:27 27 4
gpt4 key购买 nike

我的部署.yaml 文件位于 Helm 图表的模板目录中,其中包含我将使用 Helm 运行的容器的几个环境变量。

现在我希望能够从运行 helm 的任何机器本地提取环境变量,这样我就可以通过这种方式隐藏 secret 。

当我使用 Helm 运行应用程序时,如何传入此参数并让 helm 在本地获取环境变量?

这是我的deployment.yaml 文件的一部分

...
...
spec:
restartPolicy: Always
containers:
- name: sample-app
image: "sample-app:latest"
imagePullPolicy: Always
env:
- name: "USERNAME"
value: "app-username"
- name: "PASSWORD"
value: "28sin47dsk9ik"
...
...

运行 helm 时如何从本地环境变量中获取 USERNAME 和 PASSWORD 的值?

这可能吗?如果是,那么我该怎么做?

最佳答案

您可以导出变量并在运行helm install时使用它。

在此之前,您必须修改图表,以便在安装时设置该值。

如果您已经知道如何设置模板字段,请跳过这部分。

<小时/>

由于您不想公开数据,因此最好将其保存在 kubernetes 中。

首先,将这两行添加到您的 Values 文件中,以便可以从外部设置这两个值。

username: root
password: password

现在,在 template 文件夹中添加一个 secret.yaml 文件。然后,将此代码片段复制到该文件中。

apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-auth
data:
password: {{ .Values.password | b64enc }}
username: {{ .Values.username | b64enc }}

现在调整您的部署 yaml 模板并在 env 部分中进行更改,如下所示

...
...
spec:
restartPolicy: Always
containers:
- name: sample-app
image: "sample-app:latest"
imagePullPolicy: Always
env:
- name: "USERNAME"
valueFrom:
secretKeyRef:
key: username
name: {{ .Release.Name }}-auth
- name: "PASSWORD"
valueFrom:
secretKeyRef:
key: password
name: {{ .Release.Name }}-auth
...
...
<小时/>

如果您已正确修改模板的 --set 标志,您可以使用环境变量进行设置。

$ export USERNAME=root-user

现在在运行 helm install 时使用此变量,

$ helm install --set username=$USERNAME ./mychart

如果您在dry-run 模式下运行此helm install,则可以验证更改,

$ helm install --dry-run --set username=$USERNAME --debug ./mychart
[debug] Created tunnel using local port: '44937'

[debug] SERVER: "127.0.0.1:44937"

[debug] Original chart version: ""
[debug] CHART PATH: /home/maruf/go/src/github.com/the-redback/kubernetes-yaml-drafts/helm-charts/mychart

NAME: irreverant-meerkat
REVISION: 1
RELEASED: Fri Apr 20 03:29:11 2018
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
username: root-user

COMPUTED VALUES:
password: password
username: root-user

HOOKS:
MANIFEST:

---
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: irreverant-meerkat-auth
data:
password: password
username: root-user
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: irreverant-meerkat
labels:
app: irreverant-meerkat
spec:
replicas: 1
template:
metadata:
name: irreverant-meerkat
labels:
app: irreverant-meerkat
spec:
containers:
- name: irreverant-meerkat
image: alpine
env:
- name: "USERNAME"
valueFrom:
secretKeyRef:
key: username
name: irreverant-meerkat-auth
- name: "PASSWORD"
valueFrom:
secretKeyRef:
key: password
name: irreverant-meerkat-auth

imagePullPolicy: IfNotPresent
restartPolicy: Always
selector:
matchLabels:
app: irreverant-meerkat

可以看到secret中的username数据已经变成了root-user

我已添加this example进入 github 存储库。

kubernetes/helm中也有一些讨论关于此的 repo 协议(protocol)。您可以看到this issue了解使用环境变量的所有其他方法。

关于kubernetes - 如何使用 Helm 图表拉取环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49928819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com