使用 Kustomize 将环境变量添加到 Kubernetes StatefulSet

Sal*_*elo 7 kubernetes 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"
Run Code Online (Sandbox Code Playgroud)

现在我想通过 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
Run Code Online (Sandbox Code Playgroud)

问题是它不起作用。如果我运行,kustomize build我看不到这个附加变量(我看到其他变体)。

谁能帮助我了解如何实施它?

Sal*_*elo 13

这个问题的问题是我忘记添加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"
Run Code Online (Sandbox Code Playgroud)

这里是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
Run Code Online (Sandbox Code Playgroud)

这对于我原来的问题来说效果很好。我现在遇到了类似的问题,这次我需要替换基础部署中的现有环境变量。


Jon*_*nas 5

我会考虑在您的 StatefulSet 中使用envFrom从 ConfigMap 加载变量,然后您可以使用configMapGenerator带有 N 个文字的变量。

请参阅将 ConfigMap 中的所有键值对配置为容器环境变量,例如envFrom

使用 envFrom 将 ConfigMap 的所有数据定义为容器环境变量。ConfigMap 中的键成为 Pod 中的环境变量名称。

configMapGenerator是生成此 ConfigMap 的好方法。它可以通过多种不同的方式完成,但这里是一个带有文字的示例- 来自同一文档页面,但适合您的示例:

cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-2
  literals:
  - MY_ENV1=Foo
  - MY_ENV2=Bar
EOF
Run Code Online (Sandbox Code Playgroud)