天天看点

k3s部署思源并用流水线同步笔记

背景:思源笔记中的一些文档想要分享给其他人看,因此考虑部署思源笔记服务,将本地笔记推送到git仓库通过流水线自动发布。

实际操作过程中发现通常流水线都会将原文件打包到镜像中,然后部署新的镜像,考虑到笔记的特性,不想将其打包到镜像中。

感觉数据更新后触发流水线刷新Pod数据卷中的数据应该就行了,研究一翻发现流水线可以使用kubectl将原文件拷贝到Pod中。

但又在实际操作中发现思源笔记启动后将数据锁定了,不能直接拷贝。

为了解决这个问题,想到一个曲线救国的方法

  1. 启动两个不同名的Pod,一个PodA运行思源笔记,另一个媒介PodB(git)与思源笔记共享数据卷
  2. 删除思源笔记的Pod,
  3. 使用kubectl通过PodB将数据文件拷贝到数据卷上
  4. 重新部署思源笔记
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

文件中。

登录账户可以获取到配置文件:

k3s部署思源并用流水线同步笔记

- 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
           

继续阅读