【问题标题】:How to use to kubectl to patch statefulset envFrom如何使用 kubectl 修补 statefulset envFrom
【发布时间】:2021-11-19 22:09:00
【问题描述】:

我有一个 Kubernetes Statefulset,我使用 envFrom 从 ConfigMaps 和 Secrets 添加环境变量,方法是在“extra-values.yaml”文件中定义 configMapRefs 和 secretRefs,并将该文件包含在我的 helm install 命令中.

Statefulset.yamlsn-p:

apiVersion: apps/v1
kind: StatefulSet
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name | lower}}
          envFrom:
          {{- if .Values.envFrom }}
          {{- toYaml .Values.envFrom | nindent 10}}
          {{- end }}

values.yaml 文件有一个 envFrom: 没有子行,extra-values.yaml 文件包含 configMapRefs 和 secretRefs:

envFrom:
- configMapRef:
    name: my-configmap-name
- configMapRef:
    name: another-configmap-name
- secretRef:
    name: my-secret-name
- secretRef:
    name: second-secret-name

Helm 安装命令:

helm install myapp /some-folder/myapps-chart-folder -f extra-values.yaml

我要做的是在没有extra-values.yaml 文件的情况下安装myapp,然后使用kubectl patch 命令将configMapRefs 和secretRefs 添加到statefulset 及其pod。

我可以手动执行kubectl edit statefulset 来进行这些更改,这将终止并使用正确的环境变量重新启动 pod。

但我终其一生都无法弄清楚kubectl patch 命令的正确语法和参数,尽管经过数小时的研究、试验和错误,以及反复敲打头颅。救命!

【问题讨论】:

  • 你说了很多没有的工作,但你没有在你的问题中包含你做了什么尝试以及结果如何为您制作。无论如何,您正在寻找kubectl -n WHATEVER patch -p '{"spec":{"template":{"spec":{"containers":[{"name":"WHATEVER", "envFrom":[{"configMapRef":{"name": "my-configmap-name"}}, ...]}]}}}}' statefulset/WHATEVER 对吗?
  • 为什么不使用helm upgrade -f extra-values.yaml添加值(然后系统的当前状态可以记录在源代码管理中)?为什么要安装一个部分配置的系统,然后完成配置这个特定的工作流程?
  • @DavidMaze,我没想过要使用helm upgrade,但这也行得通,而且语法比kubectl patch 更简单,谢谢!为了回答您的第二个问题,Kubernetes 应用程序是在客户现场安装的,然后根据客户的环境进行配置。

标签: kubernetes kubernetes-helm kubectl kubernetes-statefulset


【解决方案1】:

感谢mdaniel 的回答,其中包含我所缺少的线索。基本上,我完全忽略了containers 元素是array 的事实(因为我的statefulset 只指定了一个容器,呵呵)。在我尝试的所有kubectl patch 命令变体中,我没有将containers 视为一个数组,也从未指定容器名称,因此kubectl patch 从来没有真正拥有正确的信息来操作。

所以按照建议,有效的命令是这样的:

kubectl patch statefulset my-statefulset -p '{"spec": {"template": {"spec": {"containers": [{"name":"the-container-name", "envFrom": [{"configMapRef":{"name":"my-configmap-name"}}, {"configMapRef":{"name":"another-configmap-name"}}] }] }}}}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2020-12-14
    • 2023-01-13
    • 2021-02-12
    • 2014-09-02
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多