最近,旧集群所在的华为云机器快要过期了,想到以后如果要使用别的公有云,这一大套东西要怎样去做一个迁移?于是有了这篇文章,本文是一次迁移过程的记录,把云上的集群迁移到本地的虚拟机环境。
环境介绍
Rancher 单节点部署(即只有一个 Rancher Server,非高可用部署)
K3s 多节点部署,总共 4 台服务器
服务器 | 角色 |
---|---|
Server - 1 | Rancher Server、K3s 主控节点、K3s 成员节点 |
Server - 2 | K3s 成员节点 |
Server - 3 | K3s 成员节点 |
Server - 4 | K3s 成员节点 |
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)
首先,像 Master 一样,下载安装脚本并安装
curl -sfL https://get.k3s.io | sh -
在 Master 节点执行以下命令,获取 token 并记录下来
(master) cat /var/lib/rancher/k3s/server/node-token
注意:安全组要开放 6443 端口,否则这里会启动报错
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 节点查看节点情况,确定安装是否成功
(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}
单节点恢复
将备份文件传输到新集群的主控(Master)节点,使用备份数据启动新的 Rancher Server
这里可以提前配置好 Docker 镜像源,否则速度会很慢
# 解压缩 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"