【问题标题】:Add persistent volume in Kubernetes StatefulSet on Minikube在 Minikube 上的 Kubernetes StatefulSet 中添加持久卷
【发布时间】:2018-09-18 15:30:59
【问题描述】:

我是 Kubernetes 新手,我正在尝试在 Minikube 上的 StatefulSet 中添加 PVC。 PV 和 PVC 显示在这里:

NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                      STORAGECLASS   REASON    AGE
neo4j-backups   5Gi        RWO            Retain           Bound     default/backups-claim      manual                   1h

NAME            STATUS    VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS   AGE
backups-claim   Bound     neo4j-backups   5Gi        RWO            manual         51m

基本上,我希望 StatefulSet 的所有 pod 都能看到该卷的内容,因为备份文件存储在那里。

使用的StatefulSet可以在here找到

Minikube 版本: minikube version: v0.25.2
Kubernetes 版本:GitVersion:"v1.9.4"

【问题讨论】:

    标签: kubernetes minikube persistent-volumes persistent-volume-claims


    【解决方案1】:

    如果您在StatefulSet 中使用volumeClaimTemplates,k8s 将进行动态配置并为每个 pod 创建一个 PVC 和相应的 PV,因此每个 pod 都有自己的存储空间。

    你想要的是创建一个 PV 和一个 PVC 并在 Statefulset 的所有副本中使用它。

    下面是 Kubernetes 1.10 的示例,您可以如何做到这一点,其中 /var/www/html 将由所有三个 Pod 共享,只需将 /directory/on/host 更改为您机器上的某个本地目录。我还在 minikube v0.26.0 上运行了这个示例

    当然,下面只是一个例子来说明这个想法,但在一个真实的例子中,Pod 中的进程应该知道同步访问共享存储。


    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv
    spec:
      capacity:
        storage: 100Gi
      # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
      volumeMode: Filesystem
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage
      local:
        path: /directory/on/host
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                    - minikube 
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: example-local-claim
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: local-storage
    ---
    apiVersion: "apps/v1beta1"
    kind: StatefulSet
    metadata:
      name: nginx
    spec:
      serviceName: nginx
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx-container 
              image: "nginx:1.12.2"
              imagePullPolicy: "IfNotPresent"
              volumeMounts: 
                - name: localvolume
                  mountPath: /var/www/html
          volumes:
            - name: localvolume
              persistentVolumeClaim:
                claimName: example-local-claim
    

    【讨论】:

    • 工作正常,一些注意事项:不要忘记通过minikube mount /host/backups/:/backups 在minikube 中挂载主机路径并启用BlockVolume,因为它是带有--feature-gates=BlockVolume=true 的Alpha 版本。
    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多