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 |
✓ |
✓ |
- |