美文网首页
Persistent Volume Claim for Stat

Persistent Volume Claim for Stat

作者: allenhaozi | 来源:发表于2020-09-12 09:13 被阅读0次

Use PV in Deployment

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-persistent-cfg
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Mi
  storageClassName: openebs-test-01

指定了StorageClass会自动创建PV
推荐使用openebs的Local PV provisioner OpenEBS Local PV

openebs会自动创建对应的文件夹

ReadWriteOnce — the volume 只能被单个Pod读写
ReadOnlyMany — the volume 被多个 Pod 读
ReadWriteMany — the volume 被多个 Pod 读写
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-test-01
  annotations:
    openebs.io/cas-type: local
    cas.openebs.io/config: |
      - name: StorageType
        value: hostpath
      - name: BasePath
        value: /mnt/data/
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

deployment yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: busybox
        volumeMounts:
          - name: pv-data
            mountPath: /data
      volumes:
        - name: pv-data
          persistentVolumeClaim:
            claimName: pvc-persistent-cfg
        #emptyDir: {}

Potential Problem

上面的PVC的使用可以供一个副本的deploy使用, 但是多个副本就会有问题, 因为他们会使用了一个PV, 上面提到了 如果是ReadOnlyManyReadWriteMany模式的可以, 同时还要受到具体的PV类型限制
这个背景下面使用到有状态的

PV in StatefulSet

k8s 提供了 volumeClaimTemplates 格式如下

volumeClaimTemplates:
- metadata:
    name: pv-data
  spec:
    accessModes: 
      - ReadWriteOnce
    storageClassName: "openebs-test-nginx"
    resources:
      requests:
        storage: 50Mi

我们在使用pv的时候, 只需要按着这个格式填写即可, openebs会自动创建对应的pvc,pv 并绑定
创建storageclass的格式 见文章前
如下

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 2 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 8000
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "openebs-test-nginx"
      resources:
        requests:
          storage: 1Gi

k get pod

NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          5m10s
web-1   1/1     Running   0          5m9s

k get pvc

NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
www-web-0   Bound    pvc-6ef70bfb-981b-4402-b6b0-7670125a234f   1Gi        RWO            openebs-test-nginx   6m38s
www-web-1   Bound    pvc-3c9f13ef-ab7d-4f31-a00b-72e790aa4b02   1Gi        RWO            openebs-test-nginx   4m13s

k get pv

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS         REASON   AGE
pvc-3c9f13ef-ab7d-4f31-a00b-72e790aa4b02   1Gi        RWO            Delete           Bound    default/www-web-1   openebs-test-nginx            4m41s
pvc-6ef70bfb-981b-4402-b6b0-7670125a234f   1Gi        RWO            Delete           Bound    default/www-web-0   openebs-test-nginx            7m5s

相关文章

网友评论

      本文标题:Persistent Volume Claim for Stat

      本文链接:https://www.haomeiwen.com/subject/jsoiektx.html