如何在舵图中获取吊舱索引

时间:2019-07-13 21:50:03

标签: kubernetes kubernetes-helm

我正在部署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

1 个答案:

答案 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规范中的字段依赖于它是哪个副本或它计划在哪个节点上的事情。