k8s的存儲卷/數(shù)據(jù)卷
容器內(nèi)的目錄和宿主機的目錄掛載
容器在系統(tǒng)上的生命周期是短暫的,delete,k8s用控制創(chuàng)建的pod,delete相當于重啟,容器的狀態(tài)也會回復到初始狀態(tài)
一旦回到初始狀態(tài),所有的后天編輯的文件都會消失
容器和節(jié)點之間創(chuàng)建一個可以持久化保存容器內(nèi)文件的存儲卷,即使容器被銷毀,刪除,重啟,節(jié)點上的存儲卷的數(shù)據(jù)依然存在,后續(xù)也可以使用
可以繼續(xù)將容器內(nèi)目錄的宿主機掛載,保存的數(shù)據(jù)繼續(xù)使用。
1、emptyDir
容器內(nèi)部共享存儲卷,k8s系統(tǒng)中,是一個pod當中多個容器共享一個存儲卷目錄。
emptyDir卷可以使pod當中容器在這個存儲卷上讀取和寫入
emptyDir不能掛載到節(jié)點的,隨著pod的生命周期結束,emptyDir也會結束,數(shù)據(jù)也不會被保留。
容器內(nèi)部共享lnmp
hostPath:將容器內(nèi)的掛載點,和節(jié)點上的目錄進行掛載,hostPath可以實現(xiàn)數(shù)據(jù)的持久化,node節(jié)點被銷毀,那么數(shù)據(jù)也會丟失。
污點設置為:
NoExecute:的節(jié)點上pod會被驅(qū)逐,文件數(shù)據(jù)在不在
pod被驅(qū)逐并不是node節(jié)點,所有數(shù)據(jù)還在保留在節(jié)點上
pod被驅(qū)逐之后(基于控制器創(chuàng)建的會在其他節(jié)點重新部署),又會在其他節(jié)點生成一個新的存儲卷,數(shù)據(jù)依然可以持久化。
emptyDir的共享數(shù)據(jù)會丟失
NFS共享存儲
所有pod內(nèi)的目錄都和節(jié)點上NFS共享目錄形成數(shù)據(jù)卷,所有的數(shù)據(jù)文件都保存在共享目錄當中。集中、方便管理
pvc和pv
pv:全程Persistent Volume持久化存儲卷,描述和定義一個存儲卷,pv是由我們運維人員來定義的
pvc:persistent Volume Claim持久存儲的請求,pvc實際上是用來藐視或者聲明我希望使用是什么樣的pv來進行存儲
pvc-pv是---對應的關系(描述,存儲(大小))
pvc----pv---nfs
pvc和pv都是虛擬化的概念,是一種k8s抽象虛擬的存儲資源
pvc和pv之間靜態(tài)請求。一但又成百個pvc怎么辦,還有動態(tài)pvc
pv是集群當中的存儲資源,pvc實際上請求存儲資源,也是對存儲資源的一個檢索(檢查索引),選擇一個最合適的pv來存儲資源
pv和pvc之間是有生命周期管理:
1、Provisioning(配置)---pvc請求request-----檢查索引(找一個合適的pv)---pvc和pv(bending綁定)----使用(使用完畢后)---pod被刪除---pv的releasing(釋放)-----recycling(回收)
配置:靜態(tài)、動態(tài)
綁定:就是把pv分配給pvc
使用:就是pod通過pvs使用存儲資源
釋放:實際上是pod解除和掛載卷volume的關系,刪除掉pvc
回收:保留這個pv,以供下一個pvc使用
pv的四種狀態(tài):
Available:可用狀態(tài)指的是可用,而且沒有被任何pvc綁定
Bound:綁定 ,pv已經(jīng)綁定了pvc 綁定即使用
released:釋放,pvc已經(jīng)被刪除了,但是pv的存儲資源還沒有被集群回收
Failed:表示pv的資源回收失敗,而且這個pv不可用狀態(tài)
ReadWriteOnce RWO,在配置文件里是全稱,表示存儲pv可讀可寫,但是只支持被單個pod掛載
ReadOnlyMany:ROX 存儲的pv可以以只讀的方式被多個pod掛載
ReadWriteMany:RWX,存儲可以支持讀寫的方式被多個pod共享
讀寫掛載的兩個方式
nfs:可以支持三種讀寫和掛載方式
SCSI不支持ReadWriteMany
ISCSI支持ReadWriteOnce
iscsiadm -m session -P 3
iscsiadm查看服務器是否有iscsi設備
-m session:指定操作的會話模塊,管理iscsi的會話
-P 3:顯示詳細信息的級別,級別為3,顯示詳細信息
hostPath:只支持ReadWriteOnce方式,其他都不支持
集群回收pv資源的方式:
1、Retain:保留存儲,pod和掛載點的數(shù)據(jù)不會被刪除
2、Recycle:回收,pv上數(shù)據(jù)會被刪除,掛載點的數(shù)據(jù)也被刪除
3、Delete:刪除,解綁時會自動刪除pv上數(shù)據(jù)(本地硬盤不能使用)支持動態(tài)卷的可以使用,pv也不再可用(由云平臺自己處理)
補充:當pod允許之后,通過pvc請求到了pv,除非pod被銷毀,否則無法刪除pvc。
k8s存儲卷的模式
emptDir:用于容器呢ide存儲卷,隨著pod被銷毀,也會被銷毀,數(shù)據(jù)不保留
hostPath:就是和節(jié)點目錄的存儲卷進行掛載,可以實現(xiàn)持久化存儲,數(shù)據(jù)在每個節(jié)點上都有不方便集中管理
nfs:最常用的模式,共享目錄存儲卷,既可以實現(xiàn)在持久化,也可以數(shù)據(jù)集中,數(shù)據(jù)集中在一個目錄方便管理
pv和pvc
pvc請求---pv的存儲資源---------硬盤空間(nfs)
nfs支持pvc所有掛載方式和讀寫模式
hostPath僅支持ReadWriteOnce方式
pvc是檢索的方式找到匹配的資源
檢索掛載方式和讀寫模式
檢索pv能提供的存儲資源的大小
誰合適選誰
保留:默認可以不寫
回收:自動回收,節(jié)點上的數(shù)據(jù)會被刪除
刪除:pv會變成failed模式,不可用,數(shù)據(jù)也會被刪除
一個實驗:
在NFS主機上創(chuàng)建共享目錄,并且進行exportfs發(fā)布?
mkdir /data/v{1..5}
vim /etc/exports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)
exportfs -avf
在master主機編寫pv資源創(chuàng)建yaml
vim /opt/pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
nfs:
path: /data/v1
server: 20.0.0.95
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
spec:
nfs:
path: /data/v2
server: 20.0.0.95
accessModes: ["ReadWriteOnce"]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv003
labels:
name: pv003
spec:
nfs:
path: /data/v3
server: 20.0.0.95
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv004
labels:
name: pv004
spec:
nfs:
path: /data/v4
server: 20.0.0.95
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 4Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv005
labels:
name: pv005
spec:
kubectl apply -f pv-demo.yaml
創(chuàng)建pvc資源,并且設置匹配綁定相應的pv?
vim /opt/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.22
name: nginx1
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
persistentVolumeClaim:
claimName: mypvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc1
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx2
name: nginx2
spec:
replicas: 3
selector:
matchLabels:
app: nginx2
template:
metadata:
labels:
app: nginx2
spec:
containers:
- image: nginx:1.22
name: nginx1
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
persistentVolumeClaim:
claimName: mypvc1
文章來源:http://www.zghlxwxcb.cn/news/detail-821261.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-821261.html
到了這里,關于Kubernetes/k8s的存儲卷/數(shù)據(jù)卷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!