k3s部署思源并用流水线同步笔记
背景:思源笔记中的一些文档想要分享给其他人看,因此考虑部署思源笔记服务,将本地笔记推送到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
文件中。
登录账户可以获取到配置文件:
- 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