kubernetes(k8s)PV的使用

概念

PV 的全稱是:PersistentVolume(持久化卷),是對底層的共享存儲的一種抽象,PV 由管理員進行創(chuàng)建和配置,它和具體的底層的共享存儲技術(shù)的實現(xiàn)方式有關(guān),比如 Ceph、GlusterFS、NFS 等,都是通過插件機制完成與共享存儲的對接。

NFS方式

1、關(guān)閉防火墻

$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

2、安裝配置 nfs

$ yum -y install nfs-utils rpcbind

3、共享目錄設(shè)置權(quán)限:

$ chmod 755 /data/k8s/

4、配置 nfs,nfs 的默認配置文件在 /etc/exports 文件下,在該文件中添加下面的配置信息:

$ vi /etc/exports
/data/k8s  *(rw,sync,no_root_squash)

5、配置說明:
/data/k8s:是共享的數(shù)據(jù)目錄
*:表示任何人都有權(quán)限連接,當(dāng)然也可以是一個網(wǎng)段,一個 IP,也可以是域名
rw:讀寫的權(quán)限
sync:表示文件同時寫入硬盤和內(nèi)存
no_root_squash:當(dāng)?shù)卿?NFS 主機使用共享目錄的使用者是 root 時,其權(quán)限將被轉(zhuǎn)換成為匿名使用者,通常它的 UID 與 GID,都會變成 nobody 身份

啟動服務(wù) nfs 需要向 rpc 注冊,rpc 一旦重啟了,注冊的文件都會丟失,向他注冊的服務(wù)都需要重啟
注意啟動順序,先啟動 rpcbind

$ systemctl start rpcbind.service
$ systemctl enable rpcbind
$ systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-07-10 20:57:29 CST; 1min 54s ago
  Process: 17696 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 17697 (rpcbind)
    Tasks: 1
   Memory: 1.1M
   CGroup: /system.slice/rpcbind.service
           └─17697 /sbin/rpcbind -w

Jul 10 20:57:29 master systemd[1]: Starting RPC bind service...
Jul 10 20:57:29 master systemd[1]: Started RPC bind service.

看到上面的 Started 證明啟動成功了。

然后啟動 nfs 服務(wù):

$ systemctl start nfs.service
$ systemctl enable nfs
$ systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Tue 2018-07-10 21:35:37 CST; 14s ago
 Main PID: 32067 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jul 10 21:35:37 master systemd[1]: Starting NFS server and services...
Jul 10 21:35:37 master systemd[1]: Started NFS server and services.

同樣看到 Started 則證明 NFS Server 啟動成功了。

另外還可以通過下面的命令確認下:

$ rpcinfo -p|grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl

查看具體目錄掛載權(quán)限:

$ cat /var/lib/nfs/etab
/data/k8s    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,no_root_squash,no_all_squash)

到這里nfs server就安裝成功了,接下來我們在節(jié)點10.8.13.84上來安裝 nfs 的客戶端來驗證下 nfs

安裝 nfs 當(dāng)前也需要先關(guān)閉防火墻:

$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

然后安裝 nfs

$ yum -y install nfs-utils rpcbind

安裝完成后,和上面的方法一樣,先啟動 rpc、然后啟動 nfs:

$ systemctl start rpcbind.service 
$ systemctl enable rpcbind.service 
$ systemctl start nfs.service    
$ systemctl enable nfs.service

掛載數(shù)據(jù)目錄 客戶端啟動完成后,我們在客戶端來掛載下 nfs 測試下:
首先檢查下 nfs 是否有共享目錄:

$ showmount -e 10.8.13.81
Export list for 10.8.13.81:/data/k8s *

然后我們在客戶端上新建目錄:

$ mkdir /data

將 nfs 共享目錄掛載到上面的目錄:

$ mount -t nfs 10.8.13.81:/data/k8s /data

掛載成功后,在客戶端上面的目錄中新建一個文件,然后我們觀察下 nfs 服務(wù)端的共享目錄下面是否也會出現(xiàn)該文件:

$ touch /data/test.txt

然后在 nfs 服務(wù)端查看:

$ ls -ls /data/k8s/
total 4
4 -rw-r--r--. 1 root root 4 Jul 10 21:50 test.txt

如果上面出現(xiàn)了 test.txt 的文件,那么證明我們的 nfs 掛載成功了。

PV

有了上面的 NFS 共享存儲,下面我們就可以來使用 PV 和 PVC 了。PV 作為存儲資源,主要包括存儲能力、訪問模式、存儲類型、回收策略等關(guān)鍵信息,下面我們來新建一個 PV 對象,使用 nfs 類型的后端存儲,1G 的存儲空間,訪問模式為 ReadWriteOnce,回收策略為 Recyle,對應(yīng)的 YAML 文件如下:(pv1-demo.yaml)

apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv1
spec:
  capacity: 
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/k8s
    server: 10.8.13.81

Kubernetes 支持的 PV 類型有很多,比如常見的 Ceph、GlusterFs、NFS,甚至 HostPath也可以,不過 HostPath 我們之前也說過僅僅可以用于單機測試,更多的支持類型可以前往 Kubernetes PV 官方文檔進行查看,因為每種存儲類型都有各自的特點,所以我們在使用的時候可以去查看相應(yīng)的文檔來設(shè)置對應(yīng)的參數(shù)。

然后同樣的,直接使用 kubectl 創(chuàng)建即可:

$ kubectl create -f pv1-demo.yaml
persistentvolume "pv1" created
$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON    AGE
pv1       1Gi        RWO            Recycle          Available                                                12s

我們可以看到 pv1 已經(jīng)創(chuàng)建成功了,狀態(tài)是 Available,表示 pv1 就緒,可以被 PVC 申請。我們來分別對上面的屬性進行一些解讀。

Capacity(存儲能力)

一般來說,一個 PV 對象都要指定一個存儲能力,通過 PV 的 capacity屬性來設(shè)置的,目前只支持存儲空間的設(shè)置,就是我們這里的 storage=1Gi,不過未來可能會加入 IOPS、吞吐量等指標(biāo)的配置。

AccessModes(訪問模式)

AccessModes 是用來對 PV 進行訪問模式的設(shè)置,用于描述用戶應(yīng)用對存儲資源的訪問權(quán)限,訪問權(quán)限包括下面幾種方式:

  • ReadWriteOnce(RWO):讀寫權(quán)限,但是只能被單個節(jié)點掛載
  • ReadOnlyMany(ROX):只讀權(quán)限,可以被多個節(jié)點掛載
  • ReadWriteMany(RWX):讀寫權(quán)限,可以被多個節(jié)點掛載

注意:一些 PV 可能支持多種訪問模式,但是在掛載的時候只能使用一種訪問模式,多種訪問模式是不會生效的。

下圖是一些常用的 Volume 插件支持的訪問模式:
voluem-accessmodes

persistentVolumeReclaimPolicy(回收策略)

我這里指定的 PV 的回收策略為 Recycle,目前 PV 支持的策略有三種:

  • Retain(保留)- 保留數(shù)據(jù),需要管理員手工清理數(shù)據(jù)
  • Recycle(回收)- 清除 PV 中的數(shù)據(jù),效果相當(dāng)于執(zhí)行 rm -rf /thevoluem/*
  • Delete(刪除)- 與 PV 相連的后端存儲完成 volume 的刪除操作,當(dāng)然這常見于云服務(wù)商的存儲服務(wù),比如 ASW EBS。

不過需要注意的是,目前只有 NFS 和 HostPath 兩種類型支持回收策略。當(dāng)然一般來說還是設(shè)置為 Retain 這種策略保險一點。

status(狀態(tài))

一個 PV 的生命周期中,可能會處于4中不同的階段:

  • Available(可用):表示可用狀態(tài),還未被任何 PVC 綁定
  • Bound(已綁定):表示 PV 已經(jīng)被 PVC 綁定
  • Released(已釋放):PVC 被刪除,但是資源還未被集群重新聲明
  • Failed(失?。?表示該 PV 的自動回收失敗
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容