iT邦幫忙

2024 iThome 鐵人賽

DAY 16
1

過去兩天針對 local-path-provisioner 做了許多實驗,我們也了解到:

  1. nodePathMap:可以定義 PVC 的位置。
  2. PVC 內的資料可以從 Containers 的外部進行存取。
  3. PVC 會在 nodePathMap 的 Paths 建立包含 PVC ID 的資料夾,導致重新建立 PVC 時無法直接繼承資料。

今天要使用 local-path-provisioner 來建立 GitLab 的 PVC,讓 PVC 被刪除後,依然可以保存下來。

建立 Kubernetes Cluster

過去有提到如果修改 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

建立 Storage Class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard-retain
provisioner: rancher.io/local-path
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

Deploy GitLab

官方文件可以得知,有 4 種服務會需要用 Persistent Storage 來保存資料。

  1. Gitaly:Git repositories。
  2. PostgreSQL:GitLab database data。
  3. Redis:GitLab job data。
  4. MinIO:Object storage data。

雖然從 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 資料。
https://ithelp.ithome.com.tw/upload/images/20240930/20141794SRLTsosBWg.png
https://ithelp.ithome.com.tw/upload/images/20240930/20141794I1Vq0qsKJh.png


上一篇
Day 15:local-path-provisioner (2)
下一篇
Day 17:Debug GitLab PVC
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言