昨天有提到持久化儲存 GitLab 資料的方法是將資料存在 PVC 中,這樣服務被刪除時,如果 PVC 還存在,資料就依然可以保存下來。
但,如果是整座 Cluster 連 PVC 和 PV 在內都一起被刪除呢?這樣理論上資料就不會存在了。
那我們要如何將資料保存下來呢?
在 Cluster 被刪除後,還想存取資料,那資料可能會是存在於:
外部儲存資源
,如 S3 等。
由 Cluster 外部儲存資源提供 CSI 來建立的 PVC
,像是各大公有雲的儲存服務等。
HostPath
,Kubernetes 被刪除後,資料依然會保存在 Nodes 上。
而 1、2 基本上都是要額外付費的(雖然可能有免費額度就是了 XD),今天要來討論的是 3。
一般來說,如果 HostPath 不是由 NFS 所掛載的位置,通常各個 Nodes 都無法直接共享彼此的資料。
但今天我們的 Nodes 是由 Containers 所建立,這就是不同情況了,我們只要讓各個 Containers 掛載相同位置的 Volumes,是否就是一個天生的共享資料夾呢?接下來我們來實驗看看。
刪除原有 Kubernetes Cluster。
kind delete cluster -n local-dev
建立共享資料夾。
mkdir $HOME/kind
修改 kind-config.yaml。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
# containerPort below must match the values file:
# nginx-ingress.controller.service.nodePorts.https
# Change hostPort if port 443 is already in use.
- containerPort: 32443
hostPort: 443
listenAddress: "0.0.0.0"
# containerPort below must match the values file:
# nginx-ingress.controller.service.nodePorts.ssh
# Using high-numbered hostPort assuming port 22 is
# already in use.
- containerPort: 32022
hostPort: 32022
listenAddress: "0.0.0.0"
extraMounts:
- hostPath: $HOME/kind
containerPath: /data
- role: worker
extraMounts:
- hostPath: $HOME/kind
containerPath: /data
- role: worker
extraMounts:
- hostPath: $HOME/kind
containerPath: /data
- role: worker
extraMounts:
- hostPath: $HOME/kind
containerPath: /data
這邊的 $HOME 要寫入絕對路徑
,不然最後掛載的位置就會變成執行指令的 PWD 位置新增一個資料夾叫 $HOME 給你掛載 XD
但從這張圖片可以得知,其實我們也不需要主動去建立的這個資料夾,只要 Yaml 中有寫,kind 就會自動建立了。
建立 Cluster。
kind create cluster --name local-dev --config kind-config.yaml --image kindest/node:v1.31.0
使用 Node Shell 連到任一 Node 中建立實驗的檔案 test.txt
。
touch /data/test.txt
從上面錯誤路徑的圖片可以得知,我在 Nodes 上建立的資料是可以存在筆電的資料夾內的。而且實驗後確認是可以在任何一個 Nodes 上找到這個檔案,所以可以證明我的假設是正確的。