k8s之volume


pause容器為基礎架構容器,每一個節點都有一個pause鏡像, 為每一個pod提供底層基礎支撐設備,所有pod中容器會共享此容器的網絡空間,存儲卷也是
還可使用csi,存儲插件。
使用存儲卷步驟1.在pod中配置使用存儲卷,2.在pod中的容器定義掛載存儲卷則可使用

配置volume示例
image.png

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  mamespace: vol
  labels 
    app: myapp
spec
   #nodeName: node3 #此方式可以固定pod調度的節點
  containers: 
  - name: myapp
    image: ikubernetes/ myapp:v1#鏡像
    volumeMounts :#定義掛載內容
    - name: webstor #使用的存儲卷名稱,這跟下面volume字段相同表示使用webstor這個存儲卷
      mountPath: /usr/share ng inx/html#掛載至容器中哪個目錄
      readOnly: true #自讀方式掛載
  volumes : #volumes字段定義了paues容器關聯的宿主機或分布式文件系統存儲卷
  - name: webstor #存儲卷名稱
    hostPath : #路徑,為宿主機或其他存儲路徑
      path: /data/volumes/myapp
      type:DirectoryOrCreate #定義類型,這表示如果宿主機沒有此目錄則會自動創建

kubectl describe pod myapp -n vol #查看pod內部狀態。
image.png

此pod被調度至node3節點。傳遞一個頁面至node3中由我們在yml配置文件中定義的路徑。即可訪問

image.png
這個方式只能在單獨節點創建,如果pod調度至別的節點則關聯存儲卷會失敗

存儲卷類型:
local方式掛載:可掛載至本地磁盤,硬盤。
emptyDir:可使用節點中的多哥容器使用宿主機部分內存當作緩存來共享文件。當pod被刪除之后empdir即消失
image.png

使用外部存儲nfs作為存儲卷

1。構建nfs文件系統

yum install nfs-utils -y #在集群每個節點都要安裝
mkdir -p /vols/v{1,2,3,4,5}創建目錄
vim /etc/exports
/vols/v1 192.168.1.0/24(rw,no_root_squash)#將目錄導出給k8s集群所在網段
systemctl start nfs #啟動nfs服務

##配置文件
apiversion: u1 
kind: Pod
metadata 
  name: wol -nfs -pod
  namespace: vol
  labels
    app: redis
spec
  containers 
  - name: redis
    image: redis :alpine
    ports : #定義容器內端口
    - containerPort: 6379
      name : redis
    volumeMounts
    - mountPath: /data#關聯至容器內目錄
      name: data#存儲卷名稱
volumes :
- name: data
  nfs: #定義存儲卷格式使用nfs
    server: 192.168.1.199 #指定nfs主機
    path: /vols/v1#指定nfs掛着卷

kubectl apply -f vol-nfs.yaml#應用文件

image.png
此時可以跨節點保存數據,也不怕pod被調度至其他節點了

使用pv。pvc

pv:是指將外部存儲系統的某目錄,磁盤,雲盤等抽象為k8s集群可用存儲單元。pv為集群級別資源。且一個名稱空間只能使用一個pv,需要將pv注冊至名稱空間
需要創建一個pvc將請求占用pv,即可一一對應(binding)一旦占用一個pv之后空間中的pod就可使用pvc了。
pv回收策略(reclaim):
delete
Recycle(廢棄)
Retain

pv生命周期。
供給存儲單元
綁定
使用
回收

配置過程。

image
配置好外部存儲系統

apiVersion: v1
kind: Persistentvolume #類型為PV
metadata #元數據。注意此處沒有名稱空間,因為pv屬於集群資源
  name: pu-nfs-v2
  labels:
    storage: nfs
spec:
#定義訪問模式。單路讀寫,多路讀寫,多路只讀
  accessModes [ "ReadwriteOnce ","ReadwriteMany" ,"ReadOnlyMany"]
  capacity: #定義了存儲空間大小限制
    storage: 5Gi#限制為5G
  volumeMode: Filesystem#存儲卷類型。有文件系統,和塊設備等
  persistentvolumeReclaimPolicy: Retain #回收策略。刪除了pvc之后pv怎么處理retain表示刪除pvc時保存pv中數據
  nfs : #nfs定義
    server: 192 .168.1.199
    path: /vols/v2

image.png

而后在名稱空間中定義pvc來請求這個pv資源

kind: PersistenVolumeClaim
apiVersion: v1
metadata:
  name: redis-data
  mamespcae: vol#pvc屬於名稱空間級別
spec :
  accessModes :#訪問模式。需要少於pv的三種類型才可被匹配
    - ReadWhriteOnce 
  volumeMode: Filesystem 
  resources:#資源配置
    request : #請求資源,與Pod中資源限制不同
      storage: 3Gi #磁盤大小為3G


而后此pvc會自動關聯至pv,因為此pv多路讀寫,多路只讀,單路讀寫,而且空間為5G高於pvc的條件。

創建Pod使用pvc資源
apiVersion: v1 
kind: Pod
metadata
  name: redis -demo
  namespace: vo1
  labels 
    app: redis -demo
spec
  containers:
    name: redis -demo
    image: redis:alpine #容器鏡像
    volumeMounts :#定義容器存儲卷
      name:data
    mountPath: /data#掛載目錄
volumes : #定義存儲卷
  name: data#名稱
  persistentvollumeClaim : #使用存儲卷類型。這里為pvc
    claimName: redis-data #綁定同一名稱空間中的pvc。當作自己的存儲卷

pod創建成功之后可在redis存入數據,將會保存至存儲節點中
image.png

pv回收順序先刪除pod>pvc>pv。


免責聲明!

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



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