k8s-No.5-存儲篇

本章目錄

  1. 存儲分類
  2. emptydir
  3. hostpath
  4. pvc,pv,nfs

一 k8s存儲分類

  我一直相信畫出圖來再去了解比較直觀,下面是我總結的k8s存儲的分類,供參考html

  k8s的存儲經常使用的就是上面幾種模式,分爲臨時存儲,半持久化存儲,與持久化存儲這三類,本章咱們着重講解emptydir與hostpath與pvc跟pv等node

二  emptydir

  1 emptydir是什麼nginx

  當pod的存儲方案設定爲emptydir的時候,pod啓動時,就會在pod所在節點的磁盤空間開闢出一塊空卷,最開始裏面是什麼都沒有的,pod啓動後容器產生的數據會存放到那個空卷中。空卷變成了一個臨時卷web

  供pod內的容器讀取和寫入數據,一旦pod容器消失,節點上開闢出的這個臨時卷就會隨着pod的銷燬而銷燬docker

 

  2 emptydir的用途api

  •  充當臨時存儲空間,當pod內容器產生的數據不須要作持久化存儲的時候用emptydir 
  •    設制檢查點以從崩潰事件中恢復未執行完畢的長計算

  通常來講emptydir的用途都是用來充當臨時存儲空間,例如一些不須要數據持久化的微服務,咱們均可以用emptydir來當作微服務pod的存儲方案網絡

 

  3 emptydir例子app

  

 1 apiVersion: v1  2 kind: Pod  3 metadata:  4  name: test-pd  5 spec:  6  containers:  7  - image: k8s.gcr.io/test-webserver  8  name: test-container  9  volumeMounts: 10  - mountPath: /cache #掛載到容器中的路徑 11  name: cache-volume 12  volumes: 13  - name: cache-volume 14     emptyDir: {}   #指定存儲方式爲emptydir

 

  

三  hostpath

  1 hospath 是什麼微服務

  hostPath類型則是映射node文件系統中的文件或者目錄到pod裏。在使用hostPath類型的存儲卷時,也能夠設置type字段,支持的類型有文件、目錄、File、Socket、CharDevice和BlockDevice(我只映射過文件與目錄)。this

  其實這個功能就至關於docker中的-v  目錄映射,只不過在k8s中的時候,pod會漂移,當pod漂移到其餘node節點的時候,pod不會跨節點的去讀取目錄。因此說hostpath只能算一種半持久化的存儲方式

 

  2 hostpath用途

  • 當運行的容器須要訪問Docker內部結構時,如使用hostPath映射/var/lib/docker到容器;
  • 當在容器中運行cAdvisor時,可使用hostPath映射/dev/cgroups到容器中;

 

  3 hostpath 例子

  

 1 apiVersion: v1  2 kind: Pod  3 metadata:  4  name: test-pd  5 spec:  6  containers:  7  - image: k8s.gcr.io/test-webserver  8  name: test-container  9  volumeMounts: 10  - mountPath: /test-pd 11  name: test-volume 12  volumes: 13  - name: test-volume 14  hostPath: 15  # directory location on host 16  path: /data #node節點上的路徑 17  # this field is optional 18       type: Directory   #path的屬性,下面會介紹可選屬性的值

 

 

 

四  持久化存儲-pvc  pv    nfs

  上面介紹了倆種臨時存儲於半持久化存儲的方案。在k8s實際生產環境中,通常會選用私有云持久化存儲方案還有公有云持久化存儲方案,私有云存儲方案包括nfs,ceph,glusterfs等方案。公有云存儲會用到AWS等方案

  存儲方案各有各的優缺點,可參考https://www.cnblogs.com/yswenli/p/7234579.html這篇文章。今天咱們主要講解pvc,pv,nfs之間的關係。

  簡單來講,要使用持久化存儲,就須要使用pvc去跟pv去申請,而後pv查看本身有沒有合適的存儲空間卷,有合適的就與pvc進行綁定。pv與pvc是一一對應綁定的。如今咱們用一幅圖來講明pvc,pv,nfs的關係

 

    針對上面的圖作一下說明

 

 

  1 pod的yaml中先指明存儲選擇pvc申請方式

 1 apiVersion: v1  2 kind: Pod  3 metadata:  4  name: pvnginx  5  labels:  6  app: pvnginx  7 spec:  8  containers:  9  - name: my-pvnginx 10  image: nginx 11  ports: 12  - name: http 13  containerPort: 80 14  - name: https 15  containerPort: 443 16  volumeMounts: 17  - name: html 18  mountPath: /data/html 19  volumes: 20  - name: html 21  persistentVolumeClaim: #指明使用pvc模式 22         claimname: mypvc        #指明使用的pvc名稱,下面咱們須要建一個叫作mypvc的yaml資源

  

 

 

  2 建立一個叫作mypvc的pvc   yaml資源

 1 apiVersion: v1  2 kind: persisitentVolumeClaim  3 metadata:  4  name: mypvc  5  namespace: default  6 spec:  7  accessmodes: ["ReadWriteMany"] #一共有三種模式,下面會一一說明  8  resources: #指定資源說明  9  requests: #指定請求 10       storage: 4Gi       #指定請求存儲空間的大小

   * ReadWriteOnce – PV以 read-write 掛載到一個節點
  * ReadOnlyMany – PV以read-only方式掛載到多個節點
  * ReadWriteMany – PV以read-write方式掛載到多個節點

 

 

  3 設置符合條件的pv

 1 apiVersion: v1  2 kind: PersistentVolume  3 metadata:  4  name: pv01  5  labels:  6  name: pv01  7 spec:  8  accessModes: ["ReadWriteMany"]  9  capacity: 10  storage: 5Gi 11 
12  nfs: 13  server: 192.168.115.6 14     path:  /home

 

 

  4 nfs建立存儲卷

  NFS 是Network File System的縮寫,即網絡文件系統。Kubernetes中經過簡單地配置就能夠掛載NFS到Pod中,而NFS中的數據是能夠永久保存的,同時NFS支持同時寫操做。

1 # yum -y install nfs-util* 2 # cat /etc/exports 3 /home 192.168.115.0/24(rw,sync,no_root_squash) 4 # systemctl start rpcbind 5 # systemctl start nfs 6 # showmount -e 127.0.0.1 7 Export list for 127.0.0.1: 8 /home 192.168.115.0/24

  

 

  上面就是建立私有云存儲方案的一個例子。當咱們要使用持久化存儲的時候,大致步驟是這樣的

  • 首先選擇是什麼存儲,是公有云存儲仍是私有云存儲
  • 公有云存儲方案根據廠商的不通,配置方法也不一樣。這個要根據廠商文檔來操做。私有云存儲的時候,選擇好文件系統(ceph,glusterfs,nfs,moosefs)
  • 搭建好文件系統以後,建立不通存儲大小的pv資源(若是業務量大,pod多,須要採用動態的pv,動態pv在k8s實戰中會講解)
  • 文件系統與pv都搭建好以後,根據pod去分配存儲空間,而後建立對應的pvc就可使用存儲了
相關文章
相關標籤/搜索