Kubernetes之[Volume 、PV 、PVC]認識


Volume概述

  • Volume 是 Pod 中能夠被多個容器訪問的共享目錄

  • Kubernetes 的 Volume 定義在 Pod 上,它被一個 Pod 中的多個容器掛載到具體的文件目錄下。

  • Volume 與 Pod 的生命周期相同,但與容器的生命周期不相關, 當容器終止或重啟時, Volume 中的數據也不會丟失

  • Kubernetes 支持多種類型的 Volume

    • 常用的如:EmptyDir

    • 常用的如:HostPath

    • 常用的如:nfs

EmptyDir 類型的Volume

  • emptyDir 是最基礎的 Volume 類型。正如其名字所示,一個 emptyDir Volume 是 Host 上的一個空目錄。

  • EmptyDir 類型的 volume創建於pod被調度到某個宿主機上的時候,

  • 而同一個 pod 內的容器都能讀寫 EmptyDir 中的同一個文件。

  • 如果 Pod 不存在了,emptyDir 也就沒有了

  • 所以目前 EmptyDir 類型的 volume 主要用作臨時空間,

    • 比如 Web 服務器寫日志或者 tmp 文件需要的臨時目錄

  • 如下所示

  • 通過上面的資源編排文件我們就可以很好的理解EmptyDir的Volume是怎么使用的了

  • 首先我們觀察整個配置文件,我們定義了兩個pod和一個emptyDir的Volume數據卷軸

  • 第一個pod通過volumeMounts掛載了一個名為shared-volumn的數據卷軸

    • 將其掛載在/prodecer_dir目錄下

    • 然后在其下創建hello文件,並寫入數據 "hello world"

  • 第二個pod通過volumeMounts掛載了一個名為shared-volumn的數據卷軸

    • 將其掛載在/consumer_dir目錄下

    • 然后在其查看hello文件,得到"hello world"數據

  • 兩個容器通過emptyDir類型的Volume實現數據共享

hostPath類型的Volume

  • HostPath 屬性的 volume 使得對應的容器能夠訪問當前宿主機上的指定目錄

  • 一旦這個 pod 離開了這個宿主機, HostDir 中的數據雖然不會被永久刪除, 但數據也不會隨 pod 遷移到其他宿主機上

  • 實際上增加了 Pod 與節點的耦合

  • 應用場景:

    • pod內容器想與宿主機做數據同步,做目錄掛載時

    • 需要訪問宿主機上Docker引擎內部數據結構的容器應用時

  • 如下所示

  • 我們通過pod創建了Nginx的服務

  • 但是我們都知道Nginx做靜態資源的代理是,在不修改配置文件的情況下,所有資源文件都在html目錄下

  • 這個時候我們通過hostPath類型的數據卷軸掛載,

  • 就可以實現在宿主機動態變更Nginx的html目錄下的的所有靜態資源

    • 比如我在宿主機的mydata目錄下放了一張test.jpg的圖片

    • 此時你就可以通過該Nginx服務直接訪問該圖片

NFS類型的Volume

  • NFS即網絡文件系統,其允許一個系統在網絡上與它人共享目錄和文件

  • NFS相信大家都知道是什么玩意了,比如win10自帶功能,局域網通過NFS實現文件共享

  • k8s集群當中掛在nfs文件系統道理也是相通

  • 選一台k8s集群外的同局域網的服務器 ,可相互ping通即可,下載nfs-utils

    • yum install nfs-utils

  • 集群內所有的node節點全部下載:nfs-utils

    • yum install nfs-utils

  • 文件系統服務器設置NFS的掛載路徑以及權限等

    • vim /etc/exports

    • /mydata *(rw,no_root_squash)

      • /mydata :對外開放的目錄

      • *:代表所有局域網機器,可設置可訪問的機器ip

      • rw: 可讀可寫

      • no_root-squash:root登陸即有用root權限

        • root_squash:root登陸,只能是匿名使用者,權限沒有roota高,安全一點

  • 文件系統啟動NFS

    • systemctl start nfs

  • k8s集群部署應用使用nfs網絡存儲

  • 首先我們通過文件系統服務器設置NFS的掛載路徑以及權限等

    • 暴露了/mydata目錄,所有人允許訪問

  • 然后我們k8s所有節點安裝了nfs服務

  • 最后我們配置資源編排文件,使用NFS類型的數據卷進行網絡共享

    • 資源編排文件指定了主機

    • 資源編排文件指定共享目錄

    • 和nginx的html目錄進行掛載,實現數據共享

  • 這樣我們在192.168.217.150機器上的/mydata目錄下丟入圖片,nginx服務可以對外進行暴露

PV和PVC

PV的定義

  • PV即PersistentVolume ,是集群中由管理員配置的一段網絡存儲

  • PV生命周期獨立於使用PV的任何單個pod,不和pod有生命周期牽扯,獨立存活

  • 大白話說PV就是存儲,獨立存在,和pod的生命周期無關

PVC的定義

  • PVC即PersistentVolumeClaim ,是由用戶進行存儲的請求

  • 大白話說PVC就是調用PV,訪問儲存,當然這其中也有很多細節

  • 我們還是首先選擇上面的NFS作為一個基礎環境

  • NFS服務器:192.168.217.150

  • 共享文件夾 /mydata

    • 坑: 注意這個分享目錄的大小寫問題,我踩了這個坑

資源定義

  • 這里我們定義了一個PV,基於NFS

    • 服務器IP為192.168.217.150

    • 共享文件目錄為 /mydata

  • 這里一共定義了兩個pod,一個PVC,一個deployment

  • PVC :通過配置信息相同直接會綁定PV

    • 容量信息:5G (嘗試與my-pv匹配:成功)

    • 匹配模式:讀寫更多 (嘗試與my-pv匹配:成功)

部署PV、PVC、Deployment

  • 直接部署:先部署pv,再部署pvc

    • kubectl apply -f pv.yaml

    • kubectl apply -f pvc.yaml

  • 查看一下線相關的信息

操作NFS服務器

  • 我們直接在192.168.217.150NFS服務器的 /mydata目錄下創建一個index.html

    • 然后寫入 Hello PV/PVC

查看pod內部數據變化

  • 隨便選一個pod,我們進入其內,查看掛載目錄下的文件

    • 我們在pvc配置文件中掛載的目錄是:/usr/share/nginx/html

  • 可以發現,數據以及實現了共享

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM