emptyDIR 臨時目錄
hostPath :使用主機的路徑
網絡存儲:
傳統的設備存儲:NAS,SAN
分布式存儲:glusterfs,rbd,cephfs
雲存儲:EBS,Azure,阿里雲的
一、emptyDir 的類型:一個pod里面2個容易,掛載同一個目錄,
注意:emptyDir的生命周期同pod周期,簡單來說,pod刪除了,emptyDir也隨之刪除
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: {}
二、hostPath 類型存儲
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/ volumes: - name: html hostPath: path: /data/nginx/v1/ type: DirectoryOrCreate
三、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
四、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的安裝部署完成。
ps:pv和pvc是一對一綁定的。但是多個pod可以掛載同一個pvc
通常使用的流程是,首先創建存儲,在創建pv,接着創建pvc,pod掛載到相應的pvc。