我是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个单独的PODs。但这并不可取。
您能指导我,Kubernetes中有什么可以帮助我实现这一点吗?感谢任何帮助或指导。
发布于 2018-07-10 13:56:43
你想要的是一个带有PVC templates的StatefulSet。如果您需要hostPath,您的处境肯定会更糟,但是正式的CSI或以前的FlexVolume支持都可以帮助您解决这个问题。
发布于 2018-07-11 16:16:52
不会讨论您是否需要使用部署与状态集与PVC模板,因为这超出了问题的范围-尽管它可能有助于首先研究出来。
一种可能的解决方案是自己管理副本,而不是使用Kubernetes的副本功能(因为“一切”都不会被复制)。将问题标记为"kubernetes- helm“后,我假设您可以使用helm模板。
您想要的功能可以通过以下方式来实现:
values.yaml文件中定义所有非公共pod属性。指示性代码:
chartname:
pods:
- name: pod1
path: volumeHostpathForPod1
- name: pod2
path: volumeHostpathForPod2
...etcchartname/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 }}helm install <deployment-name> ./chartname -f values.yaml <--dry-run> <--debug>https://stackoverflow.com/questions/51240558
复制相似问题