Rancher + K3s 集群迁移指北

/ 0评 / 5

最近,旧集群所在的华为云机器快要过期了,想到以后如果要使用别的公有云,这一大套东西要怎样去做一个迁移?于是有了这篇文章,本文是一次迁移过程的记录,把云上的集群迁移到本地的虚拟机环境。

环境介绍

服务器角色
Server - 1Rancher Server、K3s 主控节点、K3s 成员节点
Server - 2K3s 成员节点
Server - 3K3s 成员节点
Server - 4K3s 成员节点

K3s 集群搭建

集群搭建由三步组成,首先在各节点安装 Docker,然后下载好相应的文件,最后执行安装脚本并修改配置。

Docker 安装

K3S 默认集成的是 Containerd,我们将其替换为 Docker,使用清华源仓库加快下载速度。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
# 使用清华源仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable" && \
sudo apt-get update && \
sudo apt-get install docker-ce docker-ce-cli containerd.io

准备工作

鉴于网络原因,我们要提前准备好相关的可执行文件和镜像包,包括 K3S Binary、airgap 镜像包和 pause 镜像。

# 从 Github Releas 下载 K3s 可执行文件
wget https://github.com/rancher/k3s/releases/download/v1.18.4%2Bk3s1/k3s && \
cp k3s /usr/local/bin/ && \
chmod +x /usr/local/bin/k3s

# 下载 airgap 镜像包
wget https://github.com/rancher/k3s/releases/download/v1.18.4%2Bk3s1/k3s-airgap-images-amd64.tar && \
mkdir -p /var/lib/rancher/k3s/agent/images/ && \
cp ./k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/

# 准备 pause 镜像
docker pull registry.cn-shanghai.aliyuncs.com/ilemonrain/pause-amd64:3.1 && \
docker tag registry.cn-shanghai.aliyuncs.com/ilemonrain/pause-amd64:3.1 k8s.gcr.io/pause:3.1 && \
docker images | grep "k8s.gcr.io/pause"

K3s 安装(Master)

对 Master 节点进行部署,修改 ExecStart 的值,--docker 表示使用 docker,--disable traefik 禁用 traefik,后续可以使用 Nginx 代替。

# 下载安装脚本到本地
curl -sfL https://get.k3s.io > install.sh
# 只安装,先不启动
INSTALL_K3S_SKIP_START=true INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
# 修改 K3s service 的配置
vim /etc/systemd/system/multi-user.target.wants/k3s.service
ExecStart = /usr/local/bin/k3s server --docker --kubelet-arg="allowed-unsafe-sysctls=net.*" --disable traefik

# 重新加载配置文件
systemctl daemon-reload
# 重启服务
systemctl start k3s
# 查看节点情况,确定安装是否成功
kubectl get nodes

K3s 安装(Node)

curl -sfL https://get.k3s.io | sh -
(master) cat /var/lib/rancher/k3s/server/node-token
vim /etc/systemd/system/k3s.service
ExecStart = k3s agent --server  https://[主控服务器的IP地址]:6443  --token [注册Token] --docker 
--kubelet-arg="allowed-unsafe-sysctls=net.*"

# 重新加载配置文件
systemctl daemon-reload
# 重启服务
systemctl start k3s
(master) kubectl get nodes

Rancher 迁移

此部分仅适用于单节点部署的情况,集群部署请参考相关官方文档。

单节点备份

在原集群的主控(Master)节点执行备份脚本,参考链接 https://rancher2.docs.rancher.cn/docs/rancher2/backups/backups/single-node-backups/_index/

# /bin/bash -e

# 备份文件路径
DIR="/home/rancher_bak"
# rancher 容器名称
NAME="rancher-server"
# rancher 标签
TAG="stable"

docker stop ${NAME} \
&& docker create --volumes-from ${NAME} --name rancher-data-`date '+%m-%d'` rancher/rancher:${TAG} \
&& docker run --volumes-from rancher-data-`date '+%m-%d'` -v ${DIR}:/backup:z busybox tar pzcvf /backup/rancher-data-backup-${TAG}-`date '+%m-%d'`.tar.gz /var/lib/rancher \
&& docker rm -f rancher-data-`date '+%m-%d'` \
&& docker start ${NAME}

单节点恢复

# 解压缩
tar -zxvf rancher-data-backup-stable-08-27.tar.gz
# 启动容器
docker run -d -v [解压后的地址如 ~/var/lib/rancher/]:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 9080:80 -p 9443:443 rancher/rancher:stable
# 查看容器运行状态
docker ps | grep "rancher/rancher:stable"

发表评论

邮箱地址不会被公开。 必填项已用*标注