【问题标题】:How to get a pod index inside a helm chart如何在 helm 图表中获取 pod 索引
【发布时间】:2019-07-14 18:56:36
【问题描述】:

我正在部署一个 Kubernetes 有状态集,我想在 helm 图表中获取 pod 索引,这样我就可以使用这个 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

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    你不能按照你描述的方式来做。

    可能最好的方法是将您的部署更改为StatefulSet。从 StatefulSet 启动的每个 pod 都有一个 identity,每个 pod 的主机名都设置为 StatefulSet 的名称加上一个索引。如果您的launch 命令查看hostname,它将看到类似name-0 的内容,并且知道它是StatefulSet 中的第一个(索引0)pod。

    第二条路径是使用 Go 模板创建 n 个单副本部署。这不是我的首选路径,但你可以

    {{ 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 -}}
    

    这里的实际流程是 Helm 读取所有模板文件并生成一个 YAML 文件块,然后将这些文件提交给 Kubernetes API 服务器(根本没有模板指令),然后 Kubernetes 机器对其进行操作。您可以通过运行helm template 查看正在提交的内容。到 Deployment 创建 Pod 时,所有模板指令都已被剥离;你不能让 pod 规范中的字段依赖于它是哪个副本或它被安排在哪个节点上。

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 2022-08-16
      • 2018-11-03
      • 2019-08-06
      • 2018-05-22
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多