在kubernetes statefulset中添加持久卷

dim*_*zak 4 kubernetes persistent-volumes persistent-volume-claims

我是kubernetes的新手,我正在尝试在自己的PC中添加PVC statefulset。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
Run Code Online (Sandbox Code Playgroud)

基本上,我希望有状态集的所有Pod都可以看到该卷的内容,因为备份文件存储在该卷中。

可以在这里找到使用过的Statefulset

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

bit*_*its 6

如果volumeClaimTemplatesStatefulSetk8中使用,则将进行动态预配置并为每个Pod创建一个PVC和相应的PV,因此它们中的每个都有自己的存储。

您要创建一个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
Run Code Online (Sandbox Code Playgroud)