容器和Pod是短暫的。其含義是它們的生命週期可能很短,會被頻繁地銷毀和創建。容器銷毀時,保存在容器的數據都會被清除。為了持久化保存容器的數據,可以使用Kubernetes Volume。
emptyDir是最基礎的Volume類型。正如其名字所示,一個emptyDir Volume是Host上的一個空目錄。emptyDir Volume對於容器來說是持久的,對於Pod則不是。當Pod從節點刪除時,Volume的內容也會被刪除。但如果只是容器被銷毀而Pod還在,則Volume不受影響。也就是說:emptyDir Volume的生命週期與Pod一致。
emptydir.yaml
apiVersion: v1
kind: Pod
metadata:
name: emptydir-demo
spec:
containers:
- image: ubuntu:20.04
name: emptydir-demo
volumeMounts:
- mountPath: /emptydir-demo
name: emptydir-demo
args:
- /bin/sh
- -c
- echo "hi" > /emptydir-demo/hi ; sleep 30000
- image: ubuntu:20.04
name: get-emptydir-demo
volumeMounts:
- mountPath: /get-emptydir-demo
name: emptydir-demo
args:
- /bin/sh
- -c
- cat /get-emptydir-demo/hi ; sleep 30000
volumes:
- name: emptydir-demo
emptyDir: {}
部屬emptydir.yaml並查看是否有讀到資料
root@master:/# kubectl apply -f emptydir.yaml
pod/emptydir-demo created
root@master:/# kubectl get pod
NAME READY STATUS RESTARTS AGE
emptydir-demo 1/1 Running 0 5s
root@master:/# kubectl logs emptydir-demo get-emptydir-demo
hi
kubectl logs顯示容器get-emptydir-demo成功讀到了emptydir-demo寫入的數據,驗證了兩個容器共享emptyDir Volume。
PersistentVolume
(PV)是外部存儲系統中的一塊存儲空間,由管理員創建和維護。與Volume一樣,PV具有持久性,生命週期獨立於Pod。
PersistentVolumeClaim
(PVC)是對PV的申請(Claim)。 PVC通常由普通用戶創建和維護。需要為Pod分配存儲資源時,用戶可以創建一個PVC,指明存儲資源的容量大小和訪問模式(比如只讀)等信息,Kubernetes會查找並提供滿足條件的PV。