K8s 儲存卷配置
阿新 • • 發佈:2021-01-24
技術標籤:Kubernetes
docker儲存
容器刪除,資料也刪除,針對需要應用持久化的資料就要配置儲存,常見就是基於儲存到節點上(而節點儲存可以是NFS、ceph、iscsi等等)
K8s的Pod儲存
由於Pod是基於容器的集合,基於pause容器實現儲存共享
K8s 儲存卷
儲存卷作用就是由於容器的結構,資料會隨著容器刪除而刪除,那麼Pod對於需要資料的共享和持久化就需要藉助儲存卷配置
1、使用配置結構
- docker:docker的儲存使用是直接相對於容器本身
- 配置資源,基於節點目錄或者NFS,ceph都要基於節點上配置好
- mount使用:docker run -v /root/xxxx:/root/xxxx (docker儲存分2種,詳細可以看之前文章)
- Pod:Pod的儲存是基於Pod資源之上來定義的,因為Pod不是單一個體
- 需要先定義儲存,也就是把儲存資源準備好,volumes欄位(Pod層)
- 容器mount掛載儲存資源(繫結儲存資源), volumeMounts欄位(containers層)
2、儲存卷分類
- 共享儲存卷:針對臨時資料使用或者基於一個Pod內使用
- 持久化共享儲存卷:資料可以實現持久化的共享儲存,並不會隨著容器生命週期而被刪除
共享儲存卷
- emptyDir:類似docker直接執行,而Pod是內容器需要共享資料,會隨著Pod生命週期而消失
- 可以基於記憶體實現提供高效能
持久化共享儲存卷
- hostPath:基於節點的目錄儲存,節點可以是NFS儲存或者ceph儲存,但是無法實現控制器的副本策略,資料只能在節點持久化和共享(適合daemonset控制器,只在各自節點負責收集資料)
- nfs/cinder/ceph…:基於網路儲存,實現真正的持久化共享儲存
舉例(NFS)
前提條件
node節點需要安裝nfs客戶端
apiVersion: apps/v1
kind: Deployment
metadata:
name: centos-nfs
namespace: default
labels:
app: centos
version: "7.6"
spec:
replicas: 1
selector:
matchLabels:
app: centos
version: "7.6"
template:
metadata:
labels:
app: centos
version: "7.6"
spec:
containers:
- name: centos-nfs
image: centos:7.6.1810
imagePullPolicy: IfNotPresent
command: [ /usr/sbin/init ]
volumeMounts: #掛載儲存
- mountPath: /mnt #容器內掛載目錄
name: nfs #定義儲存的name名稱
volumes: #定義儲存
- name: nfs #名稱
nfs: #儲存型別
path: /nfs_share #nfs定義的目錄
server: 192.168.12.10 #伺服器地址
readOnly: true #開啟只讀,volumeMounts也可以設定針對容器,這裡開啟就是針對Pod