k8s共享存儲之nfs

特別說明:測試使用,不建議生產環境

1、在master節點配置(node1)

1)yum安裝nfs

# yum -y install nfs-utils

NFS的關鍵工具包括:

主要配置文件:/etc/exports;

NFS文件系統維護命令:/usr/bin/exportfs;

共享資源的日誌文件: /var/lib/nfs/*tab;

客戶端查詢共享資源命令: /usr/sbin/showmount;

端口配置: /etc/sysconfig/nfs。

2)新建共享目錄

# mkdir -p /data/volunes

3)設置Nfs權限

# cat /etc/exports

2.png

權限參數說明:

ro  只讀訪問

rw  讀寫訪問

sync    所有數據在請求時寫入共享

async   nfs在寫入數據前可以響應請求

secure  nfs通過1024以下的安全TCP/IP端口發送

insecure    nfs通過1024以上的端口發送

wdelay  如果多個用戶要寫入nfs目錄,則歸組寫入(默認)

no_wdelay   如果多個用戶要寫入nfs目錄,則立即寫入,當使用async時,無需此設置

hide    在nfs共享目錄中不共享其子目錄

no_hide 共享nfs目錄的子目錄

subtree_check   如果共享/usr/bin之類的子目錄時,強制nfs檢查父目錄的權限(默認)

no_subtree_check    不檢查父目錄權限

all_squash  共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄

no_all_squash   保留共享文件的UID和GID(默認)

root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)

no_root_squash  root用戶具有根目錄的完全管理訪問權限(不安全)

anonuid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的UID

anongid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的GID

4)啓動服務

# systemctl enable nfs.service

# systemctl start nfs.service

# exportfs  -arv #不用重啓nfs服務,配置文件就會生效

2、在節點node2和node3配置Nfs

1)安裝

yum -y install nfs-utils

2)在node3和node2上掛載:

# mount -t nfs 172.160.45.160:/data/volunes/ /mnt

3、檢查

1)#查看 RPC 服務的註冊狀況

rpcinfo -p localhost

2)#showmount測試

showmount -e 172.160.45.160

4、kubernetes使用NFS共享存儲有兩種方式:

#手動方式靜態創建所需要的PV和PVC;

#通過創建PVC動態地創建對應PV,無需手動創建PV;

1.png

################靜態創建#######################

1)靜態申請PV卷

PersistentVolumes,是k8s抽象化的存儲資源,主要包括存儲能力、訪問模式、存儲類型、回收策略等關鍵信息.PV是k8s實際對接存儲後端的真正入口;

#創建pv對應目錄

# mkdir -p /data/volunes/v{1,2,3}

#配置exportrs

# cat /etc/exports

3.png

#立即生效

# exportfs  -arv


2)創建pv文件

# vim nfs-pv1.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: nfs-pv1

labels:

pv: nfs-pv1

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

persistentVolumeReclaimPolicy: Recycle

storageClassName: nfs

nfs:

path: /data/volunes/v1

server: 172.160.45.160

nfs-pv2.yaml類似


配置說明:

① capacity 指定 PV 的容量爲 1G。

② accessModes 指定訪問模式爲 ReadWriteOnce,支持的訪問模式有:

ReadWriteOnce(RWO):讀寫權限,但是隻能被單個節點掛載;

ReadOnlyMany(ROX):只讀權限,可以被多個節點掛載;

ReadWriteMany(RWX):讀寫權限,可以被多個節點掛載;

③ persistentVolumeReclaimPolicy 指定當 PV 的回收策略爲 Recycle,支持的策略有:

Retain(保留)- 保留數據,不會再分配給pvc,需要管理員手工清理數據;

Recycle(回收)- 清除 PV 中的數據,保留pv資源,可以留供其他pvc使用;

Delete(刪除)- 刪除整個pv資源及內部的數據;

④ storageClassName 指定 PV 的 class 爲 nfs。相當於爲 PV 設置了一個分類,PVC 可以指定 class 申請相應 class 的 PV。

⑤ 指定 PV 在 NFS 服務器上對應的目錄。

#創建pv的pod

# kubectl create-f nfs-pv1.yaml

# kubectl get pv

4.png

狀態Available,表示 pv就緒,可以被 PVC 申請;

3)創建PVC

PersistentVolumeClaims,是對PV資源的一種聲明,pvc綁定實體資源pv後,pod通過綁定pvc來使用pv資源.PVC是k8s的一種抽象化的聲明式綁定存儲資源的管理模式的中間層,pod無法直接通過pv使用存儲資源,必須經過pvc,而pvc必須要綁定pv實體後,纔可被pod使用;

# vim nfs-pvc2.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: nfs-pvc2

spec:

accessModes:

- eadWriteMany

resources:

requests:

storage: 1Gi

storageClassName: nfs

selector:

matchLabels:

pv: nfs-pv2

執行yaml文件創建 pvc

# kubectl create -f nfs-pvc1.yaml

4.png

查看pv資源

5.png

備註:pv對應綁定的PVC

4)創建pod

[root@node1 yaml]# vim nfs-nginx.yaml

apiVersion: v1

kind: ReplicationController

metadata:

name: nginx-test

labels:

name: nignx-test

spec:

replicas: 3

selector:

name: nginx-test

template:

metadata:

labels:

name: nginx-test

spec:

containers:

- name: web01

image: docker.io/nginx:1.14.2

volumeMounts:

- mountPath: "/usr/share/nginx/html/"

name: nfs-pv1

- mountPath: "/var/log/nginx/"

name: nfs-pv2

ports:

- containerPort: 80

volumes:

- name: nfs-pv1

persistentVolumeClaim:

claimName: nfs-pvc1

- name: nfs-pv2

persistentVolumeClaim:

claimName: nfs-pvc2

備註:

# nfs-pv1存儲網頁文件,nfs-pv2日誌文件


#執行文件

# kubectl create -f nfs-nginx.yaml

# kubectl get pods -o wide

6.png

#創建nfs-nginx-server文件

# cat nfs-nginx-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: nginx-test

labels:

name: nginx-test

spec:

type: NodePort

ports:

- port: 80

protocol: TCP

targetPort: 80

name: http

nodePort: 30088

selector:

name: nginx-test

#執行文件

# kubectl create -f nfs-nginx-svc.yaml

# kubectl get svc

7.png

5)驗證 PV 是否可用

8.png

測試頁面:

#內部

9.png

#外網

image.png


備註說明: nfs自身沒有冗餘能力,數據盤損壞易丟失數據;建議使用:glusterfs或cephfs分佈式存儲;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章