理解inode
716
2025-04-02
k8s-存儲pv和pvc-7
1.概述
PersistentVolume(一些簡稱PV):由管理員添加的的一個存儲的描述,是一個全局資源,包含存儲的類型,存儲的大小和訪問模式等。它的生命周期獨立于Pod,例如當使用它的Pod銷毀時對PV沒有影響。
PersistentVolumeClaim(一些簡稱PVC):是Namespace里的資源,描述對PV的一個請求。請求信息包含存儲大小,訪問模式等。
2.創建nfs存儲
pv存儲數據類型有很多種,這類選擇了nfs存儲。所以我們先安裝nfs服務。
NFS 服務需要依賴 RPC 服務,所以這里 NFS 服務端需要安裝 rpcbind 和 nfs-utils,客戶端只需要安裝 nfs-utils
# 服務端安裝,提供nfs存儲的節點為服務端,例如master節點 yum install -y nfs-utils rpcbind #客戶端安裝,訪問nfs服務存儲節點為客戶端,例如node節點 yum install -y nfs-utils
1
2
3
4
我們在服務端創建一個共享目錄 /data/share ,作為客戶端掛載的遠端入口,然后設置權限。
mkdir -p /data/share chmod 777 /data/share
1
2
然后,修改 NFS 配置文件 /etc/exports
vim /etc/exports # 配置內容 /data/share 172.16.8.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
1
2
3
配置文件內容說明
此處,我配置了將 /data/share 文件目錄設置為允許 IP 為該 172.16.8.0/24 區間的客戶端掛載,(注意這個IP地址范圍要改成你當前nfs服務所在主機的ip地址)當然,如果客戶端 IP 不在該區間也想要掛載的話,可以設置 IP 區間更大或者設置為 * 即允許所有客戶端掛載,例如:/home *(ro,sync,insecure,no_root_squash) 設置 /home 目錄允許所有客戶端只讀掛載。
重啟nfs服務
systemctl restart rpcbind systemctl restart nfs
1
2
測試nfs
在另一個node節點測試是否可以正常掛在nfs服務
#注意這個IP地址不是隨便寫的,他是上面部署nfs服務節點的IP地址 showmount -e 172.16.8.111
1
2
3.創建pv
#在nfs共享目錄下創建一個目錄存放pv配置 cd /data/share/ mkdir volume # 創建pv配置文件 vim t1_pv.yaml
1
2
3
4
5
pv配置文件說明
apiVersion: v1 #資源版本 kind: PersistentVolume #資源類型是pv metadata: name: test #pv資源名稱 labels: type: test #資源標簽 spec: capacity: storage: 10Gi # pv 提供最大的存儲 accessModes: - ReadWriteMany # pv訪問模式,允許多人同時讀寫 persistentVolumeReclaimPolicy: Recycle #pvc回收策略,允許回收 nfs: #pv 存儲類型是nfs path: "/data/share" # nfs數據存儲路徑 server: 10.0.0.11 #nfs服務地址 readOnly: false # nfs 掛在是否只讀,否
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
kubectl create -f t1_pv.yaml
1
查看pv狀態
kubectl get pv
1
4.創建pvc
vim t1_pvc.yaml
1
apiVersion: v1 kind: PersistentVolumeClaim #資源類型是pvc metadata: name: nfs #pvc名稱 spec: accessModes: - ReadWriteMany #pvc訪問模式:多人同時訪問 resources: requests: #pvc需求資源 storage: 1Gi # pvc需要1G存儲空間
1
2
3
4
5
6
7
8
9
10
# 啟動pvc kubectl create -f t1_pvc.yaml
1
2
查看pvc狀態
kubectl get pvc
1
pvc綁定到名稱test的pv上
5.持久化存儲應用到項目
前面我們創建了pv和pvc,他們的作用就是用來做持久化存儲。例如一個部署到k8s的項目,分別有一個tomcat業務pod和mysql數據庫pod,當mysql的pod重啟后,存儲在mysql中的數據也隨著pod的銷毀而消失,這個時候我們需要將mysql中的數據持久化存儲,不受pod創建和銷毀影響。
# 編輯mysql rc文件,添加pvc vim mysql-rc-pvc.yml
1
2
文件配置說明
apiVersion: v1 kind: ReplicationController metadata: name: mysql spec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: 10.0.0.11:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: '123456' volumeMounts: #掛載一個目錄 - name: data # 定義目錄的名稱 mountPath: /var/lib/mysql #目錄的路徑 volumes: #使用掛載的目錄 - name: data #這個名稱必須和上面volumeMounts名稱一致 persistentVolumeClaim: #pvc配置 claimName: nfs # pvc的名稱是我們創建好的pvc名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
kubectl create -f mysql-rc-pvc.yaml
1
啟動pod后,查看nfs的共享目錄下已經有mysql的數據。
MySQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。