使用 Kustomize 将环境变量添加到 Kubernetes StatefulSet
Add environment variable to Kubernetes StatefulSet with Kustomize
我有一个这样的 StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: myns
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: mycontainer
image: ...
...
env:
- name: MY_ENV1
value: "1"
现在我想通过 Kustomize 添加第二个环境变量,因为它仅在开发环境中使用。我做了这样的事情:
namespace: myns
resources:
...
patches:
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
- name: MY_ENV2
value: "2"
target:
kind: StatefulSet
namespace: myns
name: myapp
问题是它不起作用。如果我 运行 kustomize build
我没有看到这个附加变量(我看到其他变体)。
谁能帮我理解如何实现它?
我会考虑在您的 StatefulSet 中使用 envFrom
从 ConfigMap 加载变量,然后您可以使用带有 N 个文字的 configMapGenerator
。
参见 Configure all key-value pairs in a ConfigMap as container environment variables envFrom
的示例:
Use envFrom to define all of the ConfigMap's data as container environment variables. The key from the ConfigMap becomes the environment variable name in the Pod.
configMapGenerator 是生成这个 ConfigMap 的好方法。它可以通过多种不同的方式完成,但这里有一个 literals 的示例 - 来自同一文档页面,但适用于您的示例:
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-2
literals:
- MY_ENV1=Foo
- MY_ENV2=Bar
EOF
issue的问题是我忘记在patch的target部分加上version: v1
了。然后,您还应该删除值部分中标记名称前面的 -
。结果应该是这样的:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: myns
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: mycontainer
image: ...
...
env:
- name: MY_ENV1
value: "1"
这里是kustomization.yaml
文件:
namespace: myns
resources:
...
patches:
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
name: MY_ENV2
value: "2"
target:
kind: StatefulSet
namespace: myns
name: myapp
这对我原来的问题很有效。我现在有一个类似的问题,这次我需要替换基础部署中的现有环境变量。
我有一个这样的 StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: myns
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: mycontainer
image: ...
...
env:
- name: MY_ENV1
value: "1"
现在我想通过 Kustomize 添加第二个环境变量,因为它仅在开发环境中使用。我做了这样的事情:
namespace: myns
resources:
...
patches:
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
- name: MY_ENV2
value: "2"
target:
kind: StatefulSet
namespace: myns
name: myapp
问题是它不起作用。如果我 运行 kustomize build
我没有看到这个附加变量(我看到其他变体)。
谁能帮我理解如何实现它?
我会考虑在您的 StatefulSet 中使用 envFrom
从 ConfigMap 加载变量,然后您可以使用带有 N 个文字的 configMapGenerator
。
参见 Configure all key-value pairs in a ConfigMap as container environment variables envFrom
的示例:
Use envFrom to define all of the ConfigMap's data as container environment variables. The key from the ConfigMap becomes the environment variable name in the Pod.
configMapGenerator 是生成这个 ConfigMap 的好方法。它可以通过多种不同的方式完成,但这里有一个 literals 的示例 - 来自同一文档页面,但适用于您的示例:
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-2
literals:
- MY_ENV1=Foo
- MY_ENV2=Bar
EOF
issue的问题是我忘记在patch的target部分加上version: v1
了。然后,您还应该删除值部分中标记名称前面的 -
。结果应该是这样的:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: myns
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: mycontainer
image: ...
...
env:
- name: MY_ENV1
value: "1"
这里是kustomization.yaml
文件:
namespace: myns
resources:
...
patches:
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
name: MY_ENV2
value: "2"
target:
kind: StatefulSet
namespace: myns
name: myapp
这对我原来的问题很有效。我现在有一个类似的问题,这次我需要替换基础部署中的现有环境变量。