如何从 Helm env 配置中提取变量(在部署内)并将其作为参数传递

问题描述 投票:0回答:1

我有一个舵图

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ include "xyz.fullname" . }}
  labels:
    {{- include "xyz.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      {{- include "xyz.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "xyz.selectorLabels" . | nindent 8 }}
    spec:
      serviceAccountName: {{ include "xyz.fullname" . }}
      containers:
      - name: {{ include "ixyz.fullname" . }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag}}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        args:
          - --partition-number
          - "{{ (splitList “-”  PODNAME) | last | quote }}"

        envFrom:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name

我想从 Pod 名称中提取数字。 pod_name 类似于 abc-123 我想将 123 传递给分区号,但我在

- "{{ (splitList “-”  PODNAME) | last | quote }}"
处收到无效的 Yaml。

我无法使用https://kubernetes.io/docs/reference/labels-annotations-taints/#apps-kubernetes.io-pod-index因为我的k8不支持它

我试过了 我无法使用 https://kubernetes.io/docs/reference/labels-annotations-taints/#apps-kubernetes.io-pod-index,因为我的 k8 不支持它 使用正则表达式的各种版本的分割

templates kubernetes-helm go-templates helm3
1个回答
0
投票

这里的事情按照相当特定的顺序发生:

  1. Helm 在所有
    templates/*.yaml
    文件上运行其模板引擎,并解析 {{ ... }} 模板块的
    all
  2. Helm 将生成的 YAML 发送到集群。
  3. Kubernetes 创建 Deployment 对象,如图所示。
  4. Kubernetes 从 Deployment 创建 Pod。

当您创建 Pod 时,Helm 不再参与,任何模板标记都不应保留,并且 Kubernetes 也不再运行模板引擎。

您所描述的具体情况有点难以做到。 Kubernetes 本身可以用

env: [{ value: '$(OTHER_VAR)' }]
之类的语法替换环境变量值,但它无法对其进行更多处理。您可能需要在容器内运行脚本来提取该值,也许将其作为入口点包装器脚本运行。 环境变量中的复制控制器副本 ID?有一个使用 init 容器的 Kubernetes 特定示例。

您的映像似乎使用“入口点作为命令”模式,因此您的 Kubernetes YAML 只有参数,但没有命令。如果你可以重复该命令,那么你可以在这里使用 shell 替换

command:
  - /bin/sh
  - -c
  - >-
      PARTITION=$(echo "$POD_NAME" | sed 's/.*-//')
      the_command --partition-number "$PARTITION"

但是你必须从图像中找出

the_command
是什么。

© www.soinside.com 2019 - 2024. All rights reserved.