背景:思源筆記中的一些文檔想要分享給其他人看,是以考慮部署思源筆記服務,将本地筆記推送到git倉庫通過流水線自動釋出。
實際操作過程中發現通常流水線都會将原檔案打包到鏡像中,然後部署新的鏡像,考慮到筆記的特性,不想将其打包到鏡像中。
感覺資料更新後觸發流水線重新整理Pod資料卷中的資料應該就行了,研究一翻發現流水線可以使用kubectl将原檔案拷貝到Pod中。
但又在實際操作中發現思源筆記啟動後将資料鎖定了,不能直接拷貝。
為了解決這個問題,想到一個曲線救國的方法
- 啟動兩個不同名的Pod,一個PodA運作思源筆記,另一個媒介PodB(git)與思源筆記共享資料卷
- 删除思源筆記的Pod,
- 使用kubectl通過PodB将資料檔案拷貝到資料卷上
- 重新部署思源筆記
ps: 思源筆記的Pod挂載子目錄
siyuan/showNote
,gitPod挂載資料卷的根目錄,這樣思源的資料出問題了還可以通過gitPod進去看資料的情況。
拷貝筆記檔案到
目錄中
/siyuan/showNote/data
流水線配置檔案大概如下:
stages:
- 部署到cva
部署到cva:
stage: 部署到cva
image:
name: bitnami/kubectl:1.23
entrypoint: [""]
script:
- curl ~/rancher-cq-kubeconfig -o ~/.kube/config
- kubectl get po -n siyuanspace | awk '{print $1}' | grep git > gitPod
- cat gitPod
- kubectl delete -f SiyuanKube.yml
- kubectl cp ./data siyuanspace/$(cat gitPod):/siyuan/showNote/data
- kubectl apply --insecure-skip-tls-verify -f SiyuanKube.yml
腳本說明:
curl ~/rancher-cq-kubeconfig -o ~/.kube/config
這是k3s上的一個權限認證配置,有了這個配置才能使用kubectl操作資源,我這裡的路徑是修改過的,需要根據自己的實際情況擷取到配置,并寫到
~/.kube/config
檔案中。
登入賬戶可以擷取到配置檔案:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2cscUeaVTQpxUN1sEN1oUaMVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzUWZmNTYxUTYwIWYhNjZ4AjZ1QjY5MjM5EWZmRmMiNzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- kubectl get po -n siyuanspace | awk '{print $1}' | grep git > gitPod
擷取到媒介Pod的資訊,往pod拷貝檔案的時候要指定這個資訊。
kubectl cp ./data siyuanspace/$(cat gitPod):/siyuansVm/siyuan/showNote/data
将檔案媒介Pod中
kubectl apply --insecure-skip-tls-verify -f SiyuanKube.yml
部署思源筆記的Pod,
SiyuanKube.yml
中配置了資源資訊,它與媒介Pod共享的資料卷:
volumeMounts:
- mountPath: /home/siyuan/Documents/SiYuan
name: vol1
subPath: siyuan/showNote