1、介紹
在docker中可以將容器中的目錄掛載出來,在k8s中pod可以部署在不同節(jié)點,假如該節(jié)點的機器宕機了,k8s可能就會將此Pod轉(zhuǎn)移到其他機器,就不是原先的機器了。k8s有自己的一套掛載方案,如下圖所示,
原理為將所有節(jié)點的掛載的目錄統(tǒng)一抽象管理為叫做 存儲層的概念,使用技術(shù)如NFS網(wǎng)絡(luò)文件系統(tǒng),在每一個節(jié)點都會有如50G的存儲空間,該空間之間的數(shù)據(jù)是同步的,這樣就解決了某一節(jié)點宕機了,Pod轉(zhuǎn)移到其他節(jié)點了依然可以獲取到掛載的目錄。
1、搭建NFS網(wǎng)絡(luò)文件系統(tǒng)
- 所有機器安裝
yum install -y nfs-utils
- nfs主節(jié)點,這里我們對應(yīng)k8s的主節(jié)點(我配置兩個主節(jié)點,選擇了其中一個) 創(chuàng)建同步文件的目錄
mkdir -p /nfs/k8s/data
,設(shè)置暴露目錄echo "/nfs/k8s/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
- nfs主節(jié)點啟動RPC遠程綁定現(xiàn)在啟動并且開機也要啟動
systemctl enable rpcbind --now
- nfs主節(jié)點啟動nfs 服務(wù)端,并且開啟自動啟動
systemctl enable nfs-server --now
- nfs主節(jié)點使配置生效
exportfs -r
, 輸出目錄查看exportfs
- 其他節(jié)點可檢查哪些目錄可以同步,執(zhí)行命令
showmount -e 192.168.134.110
,注意IP換成自己的
- 其他節(jié)點也創(chuàng)建同步的目錄,目錄名隨意,我定義成一樣的
mkdir -p /nfs/k8s/data
- 將主節(jié)點和其他節(jié)點關(guān)聯(lián)起來 ,在其他節(jié)點執(zhí)行
mount -t nfs 192.168.134.110:/nfs/k8s/data /nfs/k8s/data
- 測試,可以在任意一個節(jié)點添加修改文件,去其他檢查是否同步修改了
2、原生方式創(chuàng)建Deployment并應(yīng)用目錄掛載到nfs
如下使用yaml的方式將鏡像nginx中的目錄/usr/share/nginx/html掛載到了nfs服務(wù)端的/nfs/data/nginx-pv目錄,只要在掛載目錄/nfs/data/nginx-pv里加文件,也會同步到了pod里/usr/share/nginx/html
kubectl apply -f nfs-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-pv-demo
name: nginx-pv-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-pv-demo
template:
metadata:
labels:
app: nginx-pv-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
nfs:
server: 192.168.134.110
path: /nfs/data/nginx-pv
注意掛載的目錄一定要先創(chuàng)建好否則查詢當前應(yīng)用時出現(xiàn)如下一直在創(chuàng)建中
進入這個pod詳細信息,可以看到報錯的詳細問題 kubectl describe pod nginx-pv-demo-dc6884649-4phvz
這種方式缺點:1、需要提前創(chuàng)建好掛載的機器目錄;2、當Pod刪除,機器掛載的目錄不會同時刪除;3、無法指定目錄的存儲大小
3、使用靜態(tài)PV/PVC持久卷方式
PV持久卷,可以指定大小,當PVC刪除,對應(yīng)的PV也會刪除
PV:持久卷(Persistent Volume),將應(yīng)用需要持久化的數(shù)據(jù)保存到指定位置
PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷規(guī)格
2、存儲掛載PV/PVC實戰(zhàn)
1、在nfs目錄中創(chuàng)建PV的靜態(tài)目錄
#nfs主節(jié)點
mkdir -p /nfs/k8s/pv/data/01
mkdir -p /nfs/k8s/pv/data/02
mkdir -p /nfs/k8s/pv/data/03
2、創(chuàng)建靜態(tài)PV持久卷
執(zhí)行命令 kubectl apply -f pvdemo.yaml
以下可以寫在一個文件中 ,用—分割,會自動識別成三個文件,server為主節(jié)點的IP地址。storageClassName表示一個標志,在后面創(chuàng)建PVC時需要用到。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01-10m
spec:
capacity:
storage: 10M
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/k8s/pv/data/01
server: 192.168.134.110
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02-1gi
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/k8s/pv/data/02
server: 192.168.134.110
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv03-3gi
spec:
capacity:
storage: 3Gi
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/k8s/pv/data/03
server: 192.168.134.110
3、查詢PV持久卷
簡寫
4、創(chuàng)建PVC
pvc.yaml如下:storageClassName: nfs 對應(yīng)創(chuàng)建的PV
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200Mi
storageClassName: nfs
因為申請的storage: 200Mi 指定了大小,所以被分配了擁有1G容量的PV
5、刪除PVC
對應(yīng)的PV也會被釋放Released
6、查詢PVC
7、創(chuàng)建Deployment應(yīng)用同時掛載PVC
執(zhí)行 kubectl apply -f pvcdemo.yaml
將創(chuàng)建好的PVC nginx-pvc掛載到當前創(chuàng)建的應(yīng)用中。文章來源:http://www.zghlxwxcb.cn/news/detail-660741.html
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy-pvc
name: nginx-deploy-pvc
spec:
replicas: 2
selector:
matchLabels:
app: nginx-deploy-pvc
template:
metadata:
labels:
app: nginx-deploy-pvc
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-pvc
8、測試
修改掛載的目錄,即可查看文件有沒有同步。文章來源地址http://www.zghlxwxcb.cn/news/detail-660741.html
到了這里,關(guān)于輕松掌握K8S目錄持久卷PV/PVC的kubectl操作知識點04的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!