emptyDIR 临时目录html
hostPath :使用主机的路径nginx
网络存储:web
传统的设备存储:NAS,SANvim
分布式存储:glusterfs,rbd,cephfsapi
云存储:EBS,Azure,阿里云的 服务器
1、emptyDir 的类型:一个pod里面2个容器,挂载同一个目录,网络
注意:emptyDir的生命周期同pod周期,简单来讲,pod删除了,emptyDir也随之删除app
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
volumeMounts: #容器挂载
- name: html
mountPath: /data/web/html/
- name: busybox
image: busybox:latest
command: ["/bin/sh" ,"-c","sleep 3600"]
volumeMounts: #容器挂载
- name: html
mountPath: /data/
volumes: #定义存储
- name: html
emptyDir: {}
2、hostPath 类型存储(pod删除后,hostPa存储数据仍然存在)frontend
apiVersion: v1
kind: Pod
metadata:
name: nginx-volume
namespace: default
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/ #Pod内容器中被挂载的目录
volumes:
- name: html
hostPath:
path: /data/nginx/v1/ #宿主机path
type: DirectoryOrCreate
3、nfs 类型存储分布式
首先要准备好nfs,我在172.17.1.36的机器上安装nfs,处处的目录为/nfs/data
yum install nfs-utils
vim vim /etc/exports
/nfs/data/ 172.17.0.0/16(rw,no_root_squash)
systemctl start nfs
nfs准备好了,注意,在pod的节点机器要必定肯定能够挂载nfs类型的,不然建立pod会出错。执行yum install nfs-utils 就能够挂载了
nfs pod 的yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-volume-nfs
namespace: default
spec:
containers:
- name: nginx-nfs
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
nfs:
path: /nfs/data/
server: 172.17.1.36
4、pv,pvc的使用
对于pv和pvc,首先要准备存储的,我用的是nfs,在172.17.1.36的节点上划分了5个路径做为存储的设备。
mkdir /data/{v1,v2,v3,v4,v5} -pv
vim /etc/exports
添加以下的内容:
/data/v1 172.17.0.0/16(rw,no_root_squash)
/data/v2 172.17.0.0/16(rw,no_root_squash)
/data/v3 172.17.0.0/16(rw,no_root_squash)
/data/v4 172.17.0.0/16(rw,no_root_squash)
/data/v5 172.17.0.0/16(rw,no_root_squash)
保存,导出下。
exportfs -avr

查看下是否正常。
nfs的存储的好了。下一步要先建立pv,yaml文件以下
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
labels:
name: pv01
spec:
nfs:
path: /data/v1/
server: 172.17.1.36
accessModes: ["ReadWriteOnce","ReadWriteMany"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02
labels:
name: pv02
spec:
nfs:
path: /data/v2/
server: 172.17.1.36
accessModes: ["ReadWriteOnce","ReadWriteMany"]
capacity:
storage: 3Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv03
labels:
name: pv03
spec:
nfs:
path: /data/v3/
server: 172.17.1.36
accessModes: ["ReadWriteOnce","ReadWriteMany"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv04
labels:
name: pv04
spec:
nfs:
path: /data/v4/
server: 172.17.1.36
accessModes: ["ReadWriteOnce","ReadWriteMany"]
capacity:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv05
labels:
name: pv05
spec:
nfs:
path: /data/v5/
server: 172.17.1.36
accessModes: ["ReadWriteOnce","ReadWriteMany"]
capacity:
storage: 10Gi
kubectl apply -f pv-nfs.yaml

显示,pv建立完成
接下来建立pvc 和pod,yaml文件以下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
namespace: default
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 5Gi #到这里是建立pvc的
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-volume-pvc
namespace: default
spec:
containers:
- name: nginx-pvc
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes: #这里是选择volume的类型
- name: html
persistentVolumeClaim:
claimName: mypvc

显示pvc建立好了,同时pvc绑定了一个pv,到此pv和pvc的安装部署完成。
注意:pv和pvc是一对一绑定的。可是多个pod能够挂载同一个pvc。并且处于绑定状态下的pv没法直接被删除,若是须要删除被绑定的pv,须要先删除申请绑定的PVC
一般使用的流程是,首先建立存储,在建立pv,接着建立pvc,pod挂载到相应的pvc。
-----------------------------------------------------------------------------------------------------------
PV对第三方存储的访问模式支持:
访问模式
PV可使用存储资源提供商支持的任何方法来映射到host中。以下的表格中所示,提供商有着不一样的功能,每一个PV的访问模式被设置为卷支持的指定模式。好比,NFS能够支持多个读/写的客户端,但能够在服务器上指定一个只读的NFS PV。每一个PV有它本身的访问模式。
访问模式包括:
▷ ReadWriteOnce —— 该volume只能被单个节点以读写的方式映射
▷ ReadOnlyMany —— 该volume只能被多个节点以只读方式映射
▷ ReadWriteMany —— 该volume能够被多个节点以读写的方式映射
在CLI中,访问模式能够简写为:
▷ RWO - ReadWriteOnce
▷ ROX - ReadOnlyMany
▷ RWX - ReadWriteMany
注意:即便volume支持不少种访问模式,但它同时只能使用一种方式来映射。好比,GCEPersistentDisk能够被单个节点映射为ReadWriteOnce,或者多个节点映射为ReadOnlyMany,但不能同时使用这两种方式来映射。
AWSElasticBlockStore |
✓ |
- |
- |
AzureFile |
✓ |
✓ |
✓ |
AzureDisk |
✓ |
- |
- |
CephFS |
✓ |
✓ |
✓ |
Cinder |
✓ |
- |
- |
FC |
✓ |
✓ |
- |
FlexVolume |
✓ |
✓ |
- |
Flocker |
✓ |
- |
- |
GCEPersistentDisk |
✓ |
✓ |
- |
Glusterfs |
✓ |
✓ |
✓ |
HostPath |
✓ |
- |
- |
iSCSI |
✓ |
✓ |
- |
PhotonPersistentDisk |
✓ |
- |
- |
Quobyte |
✓ |
✓ |
✓ |
NFS |
✓ |
✓ |
✓ |
RBD |
✓ |
✓ |
- |
VsphereVolume |
✓ |
- |
- |
PortworxVolume |
✓ |
- |
✓ |
ScaleIO |
✓ |
✓ |
- |