我正在部署Kubernetes有状态集,我想将Pod索引获取到Helm图表中,以便可以使用此Pod索引配置每个Pod。
例如,在以下模板中,我使用变量 {{.Values.podIndex}} 来检索pod索引,以便使用它来配置我的应用。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ .Values.name }}
spec:
replicas: {{ .Values.replicaCount }}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 50%
template:
metadata:
labels:
app: {{ .Values.name }}
spec:
containers:
- image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: Always
name: {{ .Values.name }}
command: ["launch"],
args: ["-l","{{ .Values.podIndex }}"]
ports:
- containerPort: 4000
imagePullSecrets:
- name: gitlab-registry
答案 0 :(得分:4)
您无法按照描述的方式进行操作。
最好的方法可能是将您的Deployment更改为StatefulSet。从StatefulSet启动的每个Pod都有一个identity,并且每个Pod的主机名都设置为StatefulSet的名称以及一个索引。如果您的nullptr
命令看着launch
,它将看到类似hostname
的内容,并且知道它是StatefulSet中的第一个(索引0)窗格。
第二条路径是使用Go模板创建 n 个单副本部署。这不是我的首选路径,但是您可以
name-0
这里的实际流程是Helm读取所有模板文件并生成一个YAML文件块,然后将它们提交到Kubernetes API服务器(根本没有模板指令),然后Kubernetes机器对其进行操作。您可以通过运行{{ range $podIndex := until .Values.replicaCount -}}
---
apiVersion: v1
kind: Deployment
metadata:
name: {{ .Values.name }}-{{ $podIndex }}
spec:
replicas: 1
template:
spec:
containers:
- name: {{ .Values.name }}
command: ["launch"]
args: ["-l", "{{ $podIndex }}"]
{{ end -}}
查看正在提交的内容。在Deployment正在创建Pod时,所有模板指令均已删除。您不能使Pod规范中的字段依赖于它是哪个副本或它计划在哪个节点上的事情。