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, 上面提到了 如果是ReadOnlyMany和ReadWriteMany模式的可以, 同时还要受到具体的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









网友评论