我有一个舵图
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/*.yaml
文件上运行其模板引擎,并解析 {{ ... }}
模板块的 all。
当您创建 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
是什么。