将Hospath添加到Kubernetes Statefulset

时间:2018-01-08 09:56:43

标签: docker kubernetes

在Kubernetes中,可以在Statefulset中添加hostPath存储。如果是这样,有人可以用一些例子来帮助我。

2 个答案:

答案 0 :(得分:4)

是的,但绝对是出于测试目的。

首先,您需要根据需要创建尽可能多的持久卷

kind: PersistentVolume
apiVersion: v1
metadata:
  name: hp-pv-001
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data01"

kind: PersistentVolume
apiVersion: v1
metadata:
  name: hp-pv-002
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data02"
...

然后,将此VolumeClaimsTemplate添加到Statefulset

volumeClaimTemplates:
- metadata:
    name: my-hostpath-volume
  spec:
    storageClassName: manual
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 5Gi
    selector:
      matchLabels:
        type: local

另一种解决方案是使用hostpath dynamic provisioner。您不必创建PV bin,但这仍然是“概念验证解决方案”,您必须在群集中构建和部署配置器。

答案 1 :(得分:0)

StatefulSet的hostPath卷只能在单节点群集中使用,例如为发展。重新安排广告连播的时间将无效。

相反,考虑将Local Persistent Volume用于此类用例。

最大的区别是Kubernetes调度程序可以了解本地持久卷属于哪个节点。对于HostPath卷,调度程序可能会将引用HostPath卷的pod移到其他节点,从而导致数据丢失。但是,借助本地持久卷,Kubernetes调度程序可确保始终将使用本地持久卷的容器调度到同一节点。

考虑使用local static provisionerGetting Started指南提供了有关如何在不同环境中使用的说明。