Kubernetes-PV/PVC
目录
1)临时目录:emptydir
2)主机目录:hostpath
- 后端存储
1)NFS: #性能差,当访问客户端增加时,性能下降 在服务器格式化
2)Iscsi #性能好,基于块的存储,在客户端 对块设备进行格式化
3)ceph #分布式存储
4)glusterfs #NAS存储 分布式
- 临时目录emptyDir
删除pod, emptydir也会被删除
trnuser@k8s:~/pod/pod$ cat pod1-empty-env.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web1
name: web1
spec:
volumes:
- name: v1
emptyDir: {}
containers:
- image: nginx
name: web1
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /data # 容器内挂载目录
name: v1
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
*持久存储:hostpath
删除pod, 存储目录中的文件还存在
trnuser@k8s:~/pod/pod$ cat pod2-hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web1
name: web1
spec:
volumes:
- name: v1
hostPath:
path: /mydata # Node节点挂载目录
containers:
- image: nginx
name: web1
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: redhat
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /data #容器内挂载目录
name: v1
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- NFS存储
测试用的NAS卷如下IP:10.250.101.85
root@CNSZ-K8S-NFS-SERVER:~# exportfs -v
/data/web-data <world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/xx <world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/yy <world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/zz <world>(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
root@CNSZ-K8S-NFS-SERVER:~#
- 创建pod挂载nas卷
trnuser@k8s:~/pod/pod$ cat pod3-nfs.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web4
name: web4
spec:
volumes:
- name: v2
nfs:
server: 10.250.101.85
path: /data/xx
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web4
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /usr/share/nginx/html
name: v2
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
- iscsi存储
iscsi不能同时被多个pod使用,与本地卷无异 - PV持久存储卷
PV: persistentvolumes持久存储卷,对整个K8S集群可见,所有namespace都可见,只有集群管理员可以创建
#: 创建一个pv
trnuser@k8s:~/pod/pv$ cat pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-mysql
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /data/zz
server: 10.250.101.85
---------
# storage: 2Gi 存储空间大小,只做为pvc与pv绑定,不限制空间使用。
# accessModes:
1)ReadWriteMany:可以多个POD读写
2)ReadWriteOnce: 只能一个POD同读写
3)ReadOnyMany :只读
persistentVolumeReclaimPolicy:回收策略
1)Recycle #回收 # 删除POD之后,可以被其他的PVC绑定
2)Retain #保留 # 删除POD之后,不可以被其他的PVC绑定
storageClassName:与pvc匹配的时候不再适用大小与类型
- 创建pvc
trnuser@k8s:~/pod/pv$ cat pv1-pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: mysql-pv-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
- PVC匹配到PV自动绑定
trnuser@k8s:~/pod/pv$ kubectl get pvc -A
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
deployment pvc1 Bound pv1 2Gi RWX 10d
secret mysql-pv-claim Bound pv-mysql 2Gi RWX 10d
trnuser@k8s:~/pod/pv$
- 创建一个PVC的POD
trnuser@k8s:~/pod/pod$ cat pod1-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web-pvc
name: web-pvc
spec:
containers:
- image: nginx
name: web-pvc
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources: {}
volumeMounts:
- name: v1
mountPath: /usr/share/nginx/html
dnsPolicy: ClusterFirst
restartPolicy: Always
volumes:
- name: v1
persistentVolumeClaim:
claimName: pvc1
status: {}

浙公网安备 33010602011771号