Kubernetes清单中主机路径中的POD特定文件夹
我对Kubernetes还很陌生,需要一些帮助 我使用的是StatefulSet和3个副本。有2个工作节点 我希望为每个副本提供单独的主机路径,而不是硬编码的主机路径。此外,工作节点上的主机路径为“本地” 例如—Kubernetes清单中主机路径中的POD特定文件夹,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我对Kubernetes还很陌生,需要一些帮助 我使用的是StatefulSet和3个副本。有2个工作节点 我希望为每个副本提供单独的主机路径,而不是硬编码的主机路径。此外,工作节点上的主机路径为“本地” 例如— volumeMounts: - mountPath: /usr/local/store name: store volumes: - name: store hostPath: path: /space/myapp/$(POD_NAME)
volumeMounts:
- mountPath: /usr/local/store
name: store
volumes:
- name: store
hostPath:
path: /space/myapp/$(POD_NAME)
此处的POD_名称为app-0、app-1、app-2(3个副本)。我们可以在多个工作节点上创建/space/myapp/app-0、/space/myapp/app-1、/space/myapp/app-2 我读了一些书,没有找到任何明显的解决办法。
一种解决方案是不使用副本,而是创建3个具有自己硬编码主机路径的独立POD。但这是不可取的
你能告诉我,库伯内特斯有什么能帮我做到这一点?感谢您的帮助和指导。您需要的是一个
状态集,它会带来它。由于需要主机路径
,您的处境肯定会更糟,但是正式或以前的支持都可以帮助解决这个问题
我不是在讨论是否需要使用部署还是有状态
使用PVC模板进行设置,因为这超出了问题的范围-
尽管这可能有助于先研究清楚这一点
一种可能的解决方案是自己管理副本,而不是使用Kubernetes副本功能(因为“一切”都没有被复制)。在标记了问题“kubernetes头盔”之后,我假设您可以使用头盔模板
您可以通过以下方式实现所需:
在values.yaml
文件中定义所有非通用pod属性
指示性代码:
chartname:
pods:
- name: pod1
path: volumeHostpathForPod1
- name: pod2
path: volumeHostpathForPod2
...etc
在您的图表名/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 }}
使用头盔生成最终Kubernetes规格。例如:命令:helm install./chartname-f values.yaml
谢谢你的回复。但我不知道如何制作PVC模板,使其基于POD的名称,例如app-0、app-1等。或者我遗漏了什么?感谢您的回复。您的建议(不使用Kubernetes副本)是一个选项,但它对我不起作用,因为副本的最终计划大小/副本将放大/缩小等。