過去兩天針對 local-path-provisioner
做了許多實驗,我們也了解到:
今天要使用 local-path-provisioner
來建立 GitLab 的 PVC,讓 PVC 被刪除後,依然可以保存下來。
過去有提到如果修改 nodePathMap
的 Paths,就可以修改 PVC 的位置到我們的 HostPath。從這點我們也可以得知,如果直接將 HostPath 的位置改為 nodePathMap 預設的 /var/local-path-provisioner
,這樣不需要修改 ConfigMap 就可以自動用指定的位置建立 PVC。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 32443
hostPort: 443
listenAddress: "0.0.0.0"
- containerPort: 32022
hostPort: 32022
listenAddress: "0.0.0.0"
extraMounts:
- hostPath: ${HOME}/kind
containerPath: /var/local-path-provisioner
- role: worker
extraMounts:
- hostPath: ${HOME}/kind
containerPath: /var/local-path-provisioner
- role: worker
extraMounts:
- hostPath: ${HOME}/kind
containerPath: /var/local-path-provisioner
- role: worker
extraMounts:
- hostPath: ${HOME}/kind
containerPath: /var/local-path-provisioner
export HOST_PATH=$HOME/kind
yq e '.nodes[].extraMounts[].hostPath = env(HOST_PATH)' kind-config.yaml > kind-config-updated.yaml
kind create cluster --name local-dev --config kind-config-updated.yaml --image kindest/node:v1.31.0
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-retain
provisioner: rancher.io/local-path
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
官方文件可以得知,有 4 種服務會需要用 Persistent Storage 來保存資料。
雖然從 values.yaml 沒有定義使用的 StorageClass,但從官方文件這 4 種服務的文件說明中可以得知,在 persisence.storageClass
是可以指定的。
我選擇使用指令指定 StorageClass,並且自動建立 Namespace。
helm -n gitlab install gitlab gitlab/gitlab \
--set global.storageClass="standard-retain" \
--set gitlab.gitaly.persistence.storageClass="standard-retain" \
--set postgresql.persistence.storageClass="standard-retain" \
--set redis.master.persistence.storageClass="standard-retain" \
--set minio.persistence.storageClass="standard-retain" \
--set global.hosts.domain=<host ip>.nip.io \
-f values-base.yaml \
-f values-ssl.yaml \
--create-namespace
從下圖可以得知有成功使用正確的 StorageClass,並且在正確的位置存放 PVC 資料。