Volume
什麼是 Volume
當我們在 Kubernetes 中談論 Volume 時,指的是用來儲存資料的地方。 Volume 提供了一種在容器之間共享資料和在容器重啟後保留資料的方法。
在 Kubernetes 中,Pod 是應用程序的運行單位,每個 Pod 內可以包含一個或多個容器。這些容器在運行時可能需要讀寫資料。然而,容器本身的儲存是臨時的,當容器重啟或崩潰時,資料會丟失。為了持久化資料(即使容器重啟或移動到不同的節點),我們需要使用 Volume。
Volume 的基本概念
-
Volume:
- Volume 是 Kubernetes 中的一塊儲存區域,可以掛載到 Pod 中的容器上。
- 每個 Volume 都具有特定的生命周期,與 Pod 相同,即 Pod 被刪除時,Volume 也會被刪除(但資料可能會根據 Volume 類型保留)。
-
掛載(Mount):
- 將 Volume 掛載到容器內,容器就可以訪問 該 Volume 中的資料。
- 一個 Volume 可以被多個容器掛載,這樣容器間可以共享資料。
Volume 的種類
emptyDir
當 Pod 被分配到節點上時,會創建一個空的 Volume,Pod 運行期間,該 Volume 一直存在。 Pod 被刪除時,emptyDir 中的資料也會被刪除。 適合用於臨時儲存,例如臨時文件。
YAML 檔案範例
這個範例創建了一個 Pod,其中包含一個名為 test-volume
的 emptyDir Volume,並將其掛載到容器的 /usr/share/nginx/html
目錄。
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: test-volume
mountPath: /usr/share/nginx/html
volumes:
- name: test-volume
emptyDir: {}
hostPath
hostPath Volume 允許容器訪問節點上的文件系統中的文件或目錄,但這種 Volume 通常不建議使用,因為它可能會導致安全問題,並且在節點重啟時可能會丟失資料,不適合持久化資料。
危險
使用 hostPath Volume 時,要注意以下幾點:
- hostPath Volume 允許容器訪問節點上的文件系統,這可能會導致安全問題。
- 當 Pod 被調度到不同的節點時,hostPath Volume 中的資料不會被同步。
- 當節點重啟時,hostPath Volume 中的資料可能會丟失
YAML 檔案範例
在這個例子中: