本地儲存(emptyDir和 hostPath)
- emptyDir
- 是host上的一個空目錄
- 生存週期與pod一致
- 適合 Pod 中的容器需要臨時共享存儲空間的場景
- hostPath
- 掛載host上指定目錄
- 生存週期與host一致
持久化儲存(PV, PVC和StorageClass)
PVC
描述的,是 Pod 想要使用的持久化存儲的屬性,比如存儲的大小、讀寫權限等PV
描述的,則是一個具體的 Volume 的屬性,比如 Volume 的類型、掛載目錄、遠程存儲服務器地址等PV
是cluster level的,只能被同一個namespace下的PVC使用
- PV和 PVC的關係
- PV和PVC解耦的儲存的實現和使用,類似於 “接口”和“實現” 的思想
- 用戶只要通過PVC聲明需要的儲存size和**access mode(rw, ro)**即可,它會自動與集羣中已經存在的PV去匹配
- 儲存的實現細節交給管理員通過PV或者StorageClass配置
- 避免了因爲向開發者暴露過多的存儲系統細節而帶來的隱患
- 也意味着出現事故時可以更容易定位問題和明確責任
- 不應該把一個宿主機上的目錄當作 PV 使用
- 本地目錄的存儲行爲完全不可控,它所在的磁盤隨時都可能被應用寫滿,甚至造成整個宿主機宕機
- 靜態分配:預分配一些儲存並綁定給PV
- 缺點在於難以預測用戶真實需求,造成資源浪費
- 動態分配:不預分配PV,而聲明StorageClass
StorageClass
是一個包含PV創建信息的儲存模板, 用於自動創建 PV- 包含的內容
- PV的屬性,比如儲存類型,大小等
- 創建PV使用到的儲存插件
- PVC指定使用的儲存模板,k8s自動生成所需的PV並綁定到PVC
儲存架構
拓撲調度
配置
- 管理一些可變配置信息
- 應用的配置文件、環境變量、命令行參數
- 讓可變配置和容器鏡像進行解耦,保證了容器的可移植性
configMap
-
configMap必須在pod前創建,否則pod無法創建成功
-
因爲ETCD數據寫入大小限制,ConfigMap數據大小要求小於1MB
-
以volume形式掛載到pod的配置支持動態更新,而通過環境變量掛載的不支持
- 數據放在
etcd
中,kubelet 組件在定時維護這些 Volume - 更新可能會有一定的延時
- 數據放在
-
pod 引入 ConfigMap 的時候,必須是相同的 Namespace 中的
secret
- Secret 的用法幾乎與 ConfigMap完全相同
- 用戶名、密碼等數據是以Secret對象的方式交給 Kubernetes 保存
- 數據必須是經過 Base64 轉碼的,以免出現明文密碼
- 僅僅是經過了轉碼,而並沒有被加密,在真正的生產環境中,需要開啓 Secret 的加密插件