单节点 Rancher 被误删,如何恢复

Rancher 安装分为单节点和高可用安装。生产环境建议使用高可用安装,而单节点也就是通过 docker run 启动的 Rancher 目的是为了测试或者了解 Rancher

而社区中确实有很多用户还是选择 docker run 的方式来安装 Rancher,这种安装方式虽然方便,但如果被误删,而且没有备份的情况下,很多用户就无从下手了。

本文介绍通过 docker run 启动的 Rancher 在被误删的情况下如何恢复。

目录说明

Rancher Server 的默认数据目录为 /var/lib/rancher,而且在 Dockerfile 中也通过了匿名卷的形式映射出来了这个目录:VOLUME /var/lib/rancher,所以要恢复 Rancher Server 的数据,只需要恢复这个目录即可。

恢复 Rancher

数据目录映射到本地的情况下恢复 Rancher

单节点安装 Rancher 可以将数据目录映射的本地,对于这种情况,只需要重新将映射在本地的目录重新挂到容器中即可:

docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  --privileged \
  -v /opt/rancher:/var/lib/rancher \
  rancher/rancher

注意:
/opt/rancher 为安装时映射在本地的目录。 而且 rancher/rancher 一定要使用和安装时相同的 Rancher 版本。

数据目录没映射到本地的情况下恢复 Rancher

比如你安装 Rancher 时,没有将 Rancher 数据目录映射到本地,这时你将 Rancher Server 容器误删,这种情况也是能够把数据找回来的。

因为 Rancher Server 的 Dockerfile 中也通过了匿名卷的形式映射出来了数据目录:VOLUME /var/lib/rancher,所以可以在 /var/lib/docker/volumes/{VOLUME_ID} 中找到对应的 Rancher 数据。

如果你已经误删了 Rancher,那你也可能没办法找到对应的 Volume ID,这里有个取巧的方法,就是在 /var/lib/docker/volumes 中搜索 k3s.log 文件,这样就能快速定位到对应的数据目录,如果你之前创建了多个 Rancher Server,你可能会查找到多个目录中包含 k3s.log 文件,那你可以根据时间排序,最新的时间就是你要恢复的 Rancher 数据目录.

root@v26-1:~# ls -lt `find /var/lib/docker/volumes -name k3s.log`
-rw-r--r-- 1 root root 19825858 Sep  7 09:47 /var/lib/docker/volumes/e7f66370ff25c14faf7407388abdcd63d56e17903f40aa1a04f22d4311f79335/_data/k3s.log
-rw-r--r-- 1 root root    36672 Aug 23 15:12 /var/lib/docker/volumes/27d16a9f04c9147c6e6bd32684e13581d80c3e4835990b8a296bc11180989efd/_data/k3s.log
-rw-r--r-- 1 root root 50622617 Jul 13 16:18 /var/lib/docker/volumes/e4dcc7f8091420cdb5acb600e3e9a1880d50205f1b8cb7105406788e48bba647/_data/k3s.log
-rw-r--r-- 1 root root   637779 May 13 09:34 /var/lib/docker/volumes/3b7c9eca9b3087f551477def17f08182e7b44e501dde2a9fadaab9ee7b471384/_data/k3s.log
-rw-r--r-- 1 root root  8201826 May 13 09:19 /var/lib/docker/volumes/02d15c68dd833bb777554c3b9ef0f086a5ff7df3446f86ac68b2e27fd81ab4be/_data/k3s.log
-rw-r--r-- 1 root root   947472 May  7 20:16 /var/lib/docker/volumes/6b6e980cef41e26bee0bd43e51a7f692599833a51fb36b1de78307afa06c4be1/_data/k3s.log
-rw-r--r-- 1 root root  1581317 May  7 20:05 /var/lib/docker/volumes/15a8d8b2d22edf8f03225233e639cdbfdb992e12e56c53c5230c27e2132aeb2c/_data/k3s.log

接下来, 把 Rancher 数据目录 copy 到其他目录即可,比如到 /opt 下:

cp -rf /var/lib/docker/volumes/e7f66370ff25c14faf7407388abdcd63d56e17903f40aa1a04f22d4311f79335/_data  /opt/rancher-data

然后重新运行相同版本的 Rnahcer,并把数据目录挂载到 Rancher 容器中:

docker run -d \
    -v /opt/rancher-data:/var/lib/rancher \
    --restart=unless-stopped \
    -p 80:80 -p 443:443 \
    --privileged \
    rancher/rancher:v2.6.7