(三)Kubernetes---持久化儲存

五歲程式設計師發表於2020-12-10

一、叢集內本地基礎

(一) Volume

Volume是pod中能夠唄多個容器訪問的共享目錄,k8s通過Volume實現一個pod中的不同容器之間的資料共享及資料的持久化儲存。
Volume的生命週期不與pod中的單個容器的生命週期相關,當容器終止或重啟時,Volume中資料不會丟失。

(二) 持久化儲存

1、簡單儲存:EmptyDir、HostPath、HFS
2、高階儲存:PV、PVC
3、配置儲存:ConfigMap、Secret

(三) 示例

1、EmptyDir

EmptyDir是最基礎的volume型別,對應node上的空目錄
EmptyDir是pod被分配到node時建立的,k8s會自動分配一個目錄,當pod銷燬時,emptyDir的資料也會永久銷燬。

containers:
  volumeMounts:
  - name: logs-volume
    mountPath: /var/log/nginx
volumes:
- name: logs-volume
  emptyDir: {}

2、HostPath

HostPath是將node主機中的一個計時目錄掛載到pod中,以供容器使用,保證pod銷燬後資料仍然存在與node主機中

containers:
  volumeMounts:
  - name: logs-volume
    mountPath: /var/log/nginx
volumes:
- name: logs-volume
  hostPath:
    path: /root/logs
    type: DirectorOrCreatr #目錄存在就使用,不存在就先建立再使用
    # type型別:
    #1、DirectorOrCreatr #目錄存在就使用,不存在就先建立再使用
    #2、Director #目錄必須存在
    #3、FileOrCreate #檔案必須存在,不存在就先建立在使用
    #4、File 檔案必須存在

二、網路持久化儲存

網路檔案儲存系統,可是搭建一臺或多臺檔案伺服器,然後將Pod中的儲存直接連線到檔案伺服器系統上,這樣無論Pod在節點上怎麼轉移,只要Node跟檔案伺服器對接沒問題,資料就可以成功訪問。

(一) NFS檔案伺服器

1、搭建NFS檔案伺服器

#安裝nfs服務
yum install nfs-utils -y
#準備共享目錄
mkdir /home/nfs/data -pv
#修改配置,將共享目錄以讀寫許可權暴露給所有網段
vim /etc/exports
/home/nfs/data  *(rw,no_root_squash)
#開機啟動及啟動nfs服務
sudo systemctl enable nfs & systemctl start nfs 

#在n每個node節點都安裝nfs,以驅動nfs裝置,只安裝不啟動
yum install nfs-utils -y

2、資源清單配置nfs

containers:
  volumeMounts:
  - name: logs-volume
    mountPath: /var/log/nginx
volumes:
- name: logs-volume
  nfs:
    server: 192.168.189.100 #nfs伺服器地址
    path: /root/data/nfs #網路共享檔案路徑

(二) 高階儲存

1、PV與PVC

pv 是持久券的意思,是對底層的共享儲存的一種抽象。一般情況下pv由k8s管理員進行建立和配置,它與底層具體的共享儲存技術有關,並通過外掛完美與共享儲存對接。

pvc 是持久券宣告的意思,是使用者對於儲存需求的一種宣告。PVC其實就是使用者向k8s系統發出的一種資源需求申請。

2、PV資源清單

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: #儲存型別,與底層真正儲存對應
  capacity: #儲存能力,目前只支援儲存空間的設定
    storage: 2Gi
  #訪問模式 :
  	1、ReadWriteOnce (讀寫許可權,只能被單節點掛載)
  	2、ReadOnlyMany (只讀許可權,可以被多節點掛載)
  	3、ReadWriteMany (讀寫許可權,可被多節點掛在)
  accessModes: ReadWriteMany
  #回收策略:
   1、Retain(保留) 保留資料,需要管理員手工清理資料
   2、Recycle(回收) 清楚PV中的資料,效果相當於 rm -rf /the volume/*
   3、Delete(刪除) 與PV相連的後端儲存完成volume的刪除操作,相當於常見的雲服務商的儲存服務
   需要注意,底層不同的儲存型別可能支援的回收策略不同
  persistentVolumeReclaimPolicy: #回收策略
 
PV的狀態(status)
Available 可用,表示可用狀態,還未被任何PVC繫結
Bound 已繫結,表示PV已被PVC繫結
Released 已釋放,表示PVC被刪除,但是資源還未被叢集重新宣告
Failed 失敗,表示該PV的自動回收失敗

#示例
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /home/nfs/data
    server: 2.16.210.108

3、PVC資源清單

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
     storage: 1Gi

安裝pv kubectl apply -f pv.yaml
檢視pv kubectl get pv -o wide

安裝pvc kubectl apply -f pvc.yaml
檢視pvc kubectl get pvc -o wide

相關文章