臨時存儲簡介
Node節點
一般還能夠具備本地的臨時性存儲,由本地掛載的可寫入設備
或者 RAM
來提供支持。臨時(Ephemeral)
意味着對所存儲的數據不提供長期可用性的保證。html
Pods 一般能夠使用臨時性本地存儲來實現緩衝區、保存日誌等功能。kubelet 能夠爲使用本地臨時存儲的 Pods 提供這種存儲空間,容許後者使用 emptyDir
類型的卷將其掛載到容器中。node
kubelet 也使用此類存儲來保存節點層面的容器日誌
, 容器鏡像文件
、以及運行中容器的可寫入層
。web
臨時存儲有哪些
-
本地臨時存儲(local ephemeral storage) -
emptyDir
本地臨時存儲(local ephemeral storage)
:Kubernetes在1.8的版本中引入了一種相似於CPU,內存的新的資源模式:ephemeral-storage,而且在1.10版本kubelet中默認打開這個特性。ephemeral-storage是爲管理和調度Kubernetes中運行的應用短暫存儲。面試
emptyDir
:emptyDir 類型Volume在Pod分配到Node上時被建立,Kubernetes會在Node節點上自動分配一個目錄,所以無需指定宿主機Node上對應的目錄文件。這個目錄初始內容爲空,當Pod從Node上移除時,emptyDir中的數據會被永久刪除。docker
註釋:容器的
crashing
事件並不會致使emptyDir
中的數據被刪除。api
臨時存儲默認存儲在哪一個位置?
在每一個 Kubernetes Node節點
上,kubelet 默認根目錄是 /var/lib/kubelet
和 日誌目錄 /var/log
保存在節點的系統分區上,這個分區同時也會被Pod的 EmptyDir
類型的 volume
、容器日誌
、鏡像層
、容器的可寫層所佔用
。ephemeral-storage
即是對系統分區進行管理。微信
臨時存儲須要限制嗎?
答案是 須要限制
,從上文了解到,臨時存儲默認根目錄是在 /var/lib/kubelet
中,/var
通常狀況都是在系統根分區中,而且根分區磁盤通常不會很大(阿里雲ECS系統盤默認爲 40G),這就必須限制,爲系統預留足夠的磁盤空間來支持正常運行。上文也說到,臨時存儲也能夠使用 RAM,那就更應該限制,內存是一種很是有限的資源。app
Node節點設置臨時存儲使用大小
Node節點上的 kubelet
組件啓動時,kubelet會統計當前節點默認 /var/lib/kubelet
所在的分區可分配的磁盤資源,或者你能夠覆蓋節點上kubelet的配置來自定義可分配的資源。建立Pod時會根據存儲需求調度到知足存儲的節點,Pod使用超過限制的存儲時會對其作驅逐
處理來保證不會耗盡節點上的磁盤空間。運維
注意:若是運行時指定了別的獨立的分區,好比修改了docker的鏡像層和容器可寫層的存儲位置(默認是/var/lib/docker)所在的分區,將再也不將其計入
ephemeral-storage
的消耗。編輯器
kubelet 以下配置,限制Node節點上臨時存儲能使用多大磁盤空間
# Node 資源保留
nodefs.available: 10% # 給 /var/lib/kubelet 所在分區保留 10% 磁盤空間
nodefs.inodesFree: 5% # 給 /var/lib/kubelet 所在分區保留 5% inodes
臨時存儲限制使用舉例
限制磁盤本地臨時存儲
apiVersion: v1
kind: Pod
metadata:
name: test-storage
labels:
app: test-storage
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "while true; do dd if=/dev/zero of=$(date '+%s').out count=1 bs=30MB; sleep 1; done"] # 使用dd命令持續往容器寫數據
resources:
limits:
ephemeral-storage: 300Mi #定義存儲的限制爲300Mi
requests:
ephemeral-storage: 300Mi
容器使用磁盤超過 300Mi,被 kubelet 驅逐。具體請見下圖
限制內存臨時存儲
emptyDir
也是一種臨時存儲,所以也須要限制使用。
在Pod級別檢查臨時存儲使用量時,也會將 emptyDir
的使用量計算在內,所以若是對 emptyDir 使用過量後,也會致使該Pod被 kubelet Evict
。
另外,emptyDir自己也能夠設置容量上限。指定 emptyDir 使用內存做爲存儲介質,這樣用戶能夠得到極好的讀寫性能,可是因爲內存比較珍貴,只提供了 128Mi
的空間,當用戶在 /cache-data
目錄下使用超過64Mi後,該Pod會被 kubelet 驅逐。
volumeMounts:
- mountPath: /cache-data
name: cache-data-volume
volumes:
- emptyDir:
medium: Memory
sizeLimit: 128Mi
name: cache-data-volume
參考連接
-
https://kubernetes.io/zh/docs/concepts/configuration/manage-resources-containers/ -
https://developer.aliyun.com/article/594066 -
https://ieevee.com/tech/2019/05/23/ephemeral-storage.html
熱門文章推薦
-
分享阿里巴巴雲原生技術與實踐 - KubeCon 2020 經典演講集錦 -
Kubernetes v1.19.0 正式發佈! -
IT運維面試問題總結-簡述Etcd、Kubernetes、Lvs、HAProxy等 -
Kubernetes 升級填坑指南(一) -
Kubernetes v1.15.3 升級到 v1.18.5 心得 -
根據 PID 獲取 K8S Pod名稱 - 反之 POD名稱 獲取 PID
最後
-
歡迎您加我微信【 ypxiaozhan01】,拉您進技術羣,一塊兒交流學習... -
歡迎您關注【 YP小站】,學習互聯網最流行的技術,作個專業的技術人...
本文分享自微信公衆號 - YP小站(ypxiaozhan)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。