1. 程式人生 > 其它 >K8s 儲存卷配置

K8s 儲存卷配置

技術標籤: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

在這裡插入圖片描述
在這裡插入圖片描述