一、 k8s持久化存儲概述
1. k8s架構

k8s的master在真正的工業上産中一般是多個,而不是一個。但一般是奇數個,比如說3或者5個。在k8s上面如果想要做應用的持久化,肯定需要有存儲的。而且這個存儲,必須要是可以share的。為什麼呢?因為pod運作在不同的節點上。我們希望在pod發生變化的時候,在某些場景下滿足存儲可以“跟着”pod“走”到不同的結點上去。比如說statefulset,第一次起在一号結點上,如果對應的是專屬于node1的stateful1這個卷,那麼當pod跑到二号結點上,此時它的卷又應該跑到專屬于node2的statefule2這個卷,那麼久無法保證之前在node1上面的資料的可用性。是以,卷設計成可以share的,這樣來保證在任何一個pod上都可以去使用。
存儲卷可以有很多種存儲類型,比如說ceph, NFS, Block storage.
2. PV和PVC
(1)Persistent Volume(PV)
PV是叢集中的一塊網絡存儲空間(它是叢集概念。可以是一塊盤,也可以是NFS的目錄,配置設定給不同的結點去使用)
PV和kubernetes的node一樣,同屬于叢集資源層的概念(被整個系統所占有,不分namespace)
PV和kubernetes Volume(k8s最基本的機關是pod,一個pod中可以有多個容器,每個容器都可以有Volume.它指的是:一個pod内不同的容器共享的卷。這裡的卷和pod的生命周期是相同的)類似,不同之處為PV的生命周期和使用PV的pod的生命周期互相獨立
(2)Persistent Volume Claim(PVC)
PVC是使用者對存儲資源的請求(是消費者的概念)
PVC和Kubernetes Pod一樣,同屬資源消費者的概念,即Pod請求CPU和記憶體資源,PVC請求存儲空間和通路權限
總結:pod和pvc兩者合并到一起是一個完整的應用,它們都屬于是消費者,是屬于具體的命名空間的。而pv是屬于叢集的,pv和pvc成對出現。
3. PV的概念
(1)pv可以設定三種回收政策:保留(Retain)、回收(recycle)和删除(Delete)
- 保留政策: 允許人工處理保留的資料
- 删除政策: 将删除pv和外部關聯的存儲資源,需要插件支援
- 回首政策: 将執行清楚操作,之後可以被新的pvc使用,需要插件支援。新的系統已經被retain和delete替代
(2)pv的狀态
- Available 資源尚未被claim使用
- Bound 已經綁定到某個PVC上
- Release 對應的pvc已經被删除,但是資源還沒有被叢集回收
- Failed 自動回收失效
(3)通路權限
- ReadWriteOnce 被單個節點mount為讀寫rw模式
- ReadOnlyMany 被多個節點mount為隻讀ro模式
- ReadWriteMany 被多個節點mount為讀寫rw模式