【问题标题】:POD specific folder in hostPath in Kubernetes manifestsKubernetes 清单中 hostPath 中的 POD 特定文件夹
【发布时间】:2018-12-16 20:14:14
【问题描述】:

我对 Kubernetes 还很陌生,需要一些帮助。

我正在使用 StatefulSet 和 3 个副本。有 2 个工作节点。

我希望为每个副本提供单独的 hostPath,而不是硬编码的 hostPath。 hostPath 在工作节点上也是“本地的”。

例如——

  volumeMounts:
    - mountPath: /usr/local/store
      name: store
volumes:
  - name: store
    hostPath:
      path: /space/myapp/$(POD_NAME)

这里 POD_NAME 是 app-0、app-1、app-2(3 个副本)。
我们可以在多个工作节点上创建 /space/myapp/app-0、/space/myapp/app-1、/space/myapp/app-2。

我做了一些阅读,但没有找到任何明显的解决方案。
一种解决方案是不使用副本并使用自己的硬编码 hostPath 创建 3 个单独的 POD。但这是不可取的。

您能否指导一下,Kubernetes 中有什么可以帮助我实现这一目标?感谢任何帮助或指导。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    你想要的是一个StatefulSet,它带来了PVC templates。要求hostPath 肯定会让您处于更糟糕的位置,但正式的CSI 或之前的FlexVolume 支持可以帮助解决这个问题。

    【讨论】:

    • 感谢您的回复。但是我看不到使 PVC 模板基于 POD 名称的方法,例如app-0、app-1 等。还是我遗漏了什么?
    【解决方案2】:

    我不是在讨论您是否需要使用部署与有状态 使用 PVC 模板设置,因为这超出了问题的范围 - 虽然这可能有助于先研究一下。

    一种可能的解决方案是自己管理副本,而不是使用 Kubernetes 副本功能(因为“一切”都没有被复制)。标记问题“kubernetes-helm”后,假设您可以使用 helm 模板。

    你想要的可以通过以下方式实现:

    1. values.yaml 文件中定义所有不常见的 pod 属性。

    指示代码:

    chartname:
      pods:
      - name: pod1
        path: volumeHostpathForPod1
      - name: pod2
        path: volumeHostpathForPod2
      ...etc
    
    1. 在您的chartname/templates/pod.yaml(或等效文件)中

    指示代码:

    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
      name: "statefulset"
    ...(other stateful set properties)
    spec: #stateful set specs
      template:
        spec: #pod(s) specs
          containers:
    {{- range .Values.pods }}
          - ... (common pod properties) 
            name: "pod{{ .name }}"
            volumeMounts:
            - mountPath: /usr/local/store
            name: "storeForPod{{ .name }}"
    {{- end }}
          volumes:
    {{- range .Values.pods }}
          - name: "storeForPod{{ .name }}"
            hostPath:
              path: "/space/myapp/{{ .path }}"
    {{- end }}
    
    1. 使用 helm 生成最终的 Kubernetes 规范。例如。命令:helm install <deployment-name> ./chartname -f values.yaml <--dry-run> <--debug>

    【讨论】:

    • 感谢您的回复。您的建议(不使用 Kubernetes 副本)是一个选项,但它不适用于我最终计划的副本大小/副本将扩大/缩小等。
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2021-06-09
    • 2018-01-09
    • 2021-12-24
    • 2019-11-04
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多