K8s 线上采坑 08 Grafana Prometheus 部署迁移持久化

k8s grafana 迁移

原理: 启动新环境, 将原来环境的 grafana.db 复制到新环境替换相同文件.

由于涉及到 k8s, 原来没有做磁盘映射, 所以只能到 pod 所在主机, 使用 docker cp 将文件复制出来. (不能使用 kubectl 复制, kubectl 只能复制 workdir 下的文件. grafana.db 文件不再 workdir 内, 并且 workdir 只有 r-x 权限; 也不能使用 root 账号登录操作, 复制文件到 workdir 下, 因为镜像中没有 root 用户)

最终使用方案: 找到 pod 所在机器: kubectl describe pod grafana-xxx, 登录主机后, 复制文件 docker cp grafana-xxx:/var/lib/grafana.db . 到主机.

参考

grafana 数据迁移

K8s 中使用 root 权限

K8s prometheus 迁移

原理: 启动新环境, 将原来环境的 data 文件夹复制到新环境替换相同文件.

备份原环境 data 数据

1
2
3
4
5
6
7
8
9
10
11
# 从主机进入 pod
$ kubectl exec -it prometheus-68759fdbb-jnrsp -- sh

# 查看, 备份 pod data 数据
> ls
data
> tar zcvf prometheus_data.tar.gz data/
...

# 将备份数据复制到主机
$ kubectl cp prometheus-68759fdbb-jnrsp:prometheus_data.tar.gz ./prometheus_data.tar.gz

需要注意的是, 在覆盖操作后, wal 文件夹内的数据会引起 Prometheus 数据检查失败, 无法启动, 将文件夹内数据删掉即可启动, 但是会丢失一段时间内的数据.

参考

Prometheus 存储原理及数据备份还原

Prometheus does not start: get segment range: segments are not sequential

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.