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: {}
posted @ 2021-03-12 11:04  独孤云翔  阅读(26)  评论(0)    收藏  举报