本文永久链接: https://www.xtplayer.cn/rancher/backup-restore/single-to-ha/

Rancher 单节点安装

以下步骤创建用于演示迁移的 Rancher 单节点环境,如果您需要迁移正式环境可以跳过此步骤。

  1. 执行以下 docker 命令运行单个 Rancher Server 服务

    docker run -d -p 8443:443 -p 8880:80 -v /home/rancher/:/var/lib/rancher/rancher/rancher:v2.3.0
  2. 等容器初始化完成后,通过节点 IP 访问 Rancher Server UI,设置密码并登录。

创建集群

以下步骤创建用于演示的业务集群,用来验证 Rancher 单节点安装迁移到 HA 后数据是否丢失,如果您需要迁移正式环境可以跳过此步骤。

  1. 登录 Rancher UI 后,添加一个自定义集群

  2. 授权集群访问地址 设置为启用,FQDN 和证书可以不用填写。

    警告:这一步很关键。如果 Rancher 切换到 HA 后,因为地址或者 token 或者证书的变更,将会导致 Agent 无法连接 Rancher Server。在迁移到 HA 后,需要通过 kubectl 去编辑配置文件更新一些 Agent 相关的参数。默认 UI 上的 kube 配置文件是通过 Agent 代理连接到 K8S,如果 Agent 无法连接 Rancher Server,则通过这个 KUBE 配置文件无法访问 K8S 集群。开启授权集群访问地址功能会生成多个 Contexts Cluster,这些 Contexts Cluster 是直连 K8S,不通过 Agent 代理。如果业务集群未开启这个功能,可以通过编辑集群来开启这个功能。

  3. 点击 下一步 ,根据预先分配的节点角色选择需要的角色,然后复制命令到主机终端执行。

  4. 集群部署完成后,进入集群首页,点击 kubeconfig 文件按钮。在弹窗页面中复制 kubeconfg 配置文件到文本编辑备用。

部署测试应用

  1. 进入 default 项目,随意部署一个测试应用。

  2. 进入应用商店,部署一个测试应用。

备份 Rancher 数据

执行 docker exec -ti <Containers_ID> bash 进入 Rancher Server 容器,然后执行 etcdctl snapshot save /var/lib/rancher/snapshot.db 进行数据备份。

因为 /var/lib/rancher/ 是映射到主机的 /home/rancher/ 目录,所以备份的数据可以直接在主机的/home/rancher/下获取。

ETCD 数据恢复

  1. 将 Rancher 备份文件拷贝到需要部署 Rancher HA 的主机上,比如放在 /home/ 目录,所有节点都要拷贝。如果节点之前安装过 K8S 集群,请确保节点已经初始化过(了解节点清理)。

  2. 获取 etcdctl

    访问 https://github.com/etcd-io/etcd/releases/ 下载 ETCD 二进制压缩包,解压后获得 etcdctl 二进制文件。拷贝 etcdctl 二进制文件到 Rancher HA 的主机上。并给文件可执行权限 chmod +x etcdctl

  3. 在 Rancher HA 所有节点执行以下命令将 ETCD 备份文件恢复到默认路径

    NODE_IP='' (当前节点 ip)
    ETCD_NAME=$( echo etcd-$( echo $NODE_IP | sed 's/\./-/g' ) )
    ETCD_INITIAL_CLUSTER="$( echo $ETCD_NAME=https://${NODE_IP}:2380 )"

    ETCDCTL_API=3 etcdctl snapshot restore xxxxxxxxx \
    --data-dir="/var/lib/etcd" \
    --initial-cluster=${ETCD_INITIAL_CLUSTER} \
    --initial-advertise-peer-urls="https://${NODE_IP}:2380"

    以上操作将把数据恢复到 ETCD 默认存储路径。

LOCAL K8S 集群部署

  1. 根据文档示例配置 创建 RKE 配置文件。

  2. 执行 rke 命令创建 LOCAL K8S 集群

    rke up --config cluster.yml
  3. 检查 K8S 集群运行状态

Rancher HA 安装

警告: Rancher HA 的版本需要大于或者等于 Rancher 单节点的版本。

  1. 根据自签名 ssl 证书文档创建自签名证书或者配置权威证书;

  2. 根据安装文档进行 Rancher HA 安装;

  3. 安装完成后访问 Rancher UI,可以看到之前添加的 test 集群。(错误提示是因为 Rancher URL 改变,cluster Agent 无法连接 Rancher Server。)

Rancher HA 配置

  1. 修改 Rancher URL 配置

    全局|系统设置中找到 server-url,如果 Rancher HA 地址与 Rancher 单节点地址不一致,则修改地址为 Rancher HA 地址。

  2. 然后新开窗口,在浏览器地址栏输入 https://rancher-url/v3/clusters/local/clusterregistrationtokens 切换到注册命令接口页面。

  3. 在注册命令接口页找到 insecureCommand 字段,复制字段后面的 yaml 文件链接。

  4. 通过命令 curl -o local.yaml https://192.168.3.115:30303/v3/import/8vvmfwjwd6mkf8g2f769cnhh4s64s5jcnxgv5t6v5bdxk84tf6zztl.yaml 把文件下载到本地,文件名建议以集群 ID 命名,用于区分。

  5. 相应的,其他业务集群也需要按照以上步骤,通过访问 https://<rancher_url>/v3/clusters/<cluster_id>/clusterregistrationtokens 去获取 insecureCommand 对应的 yaml 文件,然后下载 yaml 文件到本地。在切换到对应集群后,在地址栏可以看到 <cluster_id>

    在更换地址后,clusterregistrationtokens 接口中可能会生成多组 insecureCommand,如下图。对应的,在 insecureCommand 上方有 createdTS 字段,createdTS 数值越大,对应的 yaml 配置最新,请选择最大数值 createdTS 下的 insecureCommand 后的 yaml 链接。

  6. 根据前面步骤中保存的 kubecfg 配置文件,和上一步骤中保存的对应集群注册 yaml 文件,通过 kubectl 工具去执行。

    --kubeconfig=xxxx # 指定集群配置文件
    --context=xxxx # 切换授权集群访问地址(local 集群不用切换,local 集群配置默认是直连 K8S 集群)

    # local 示例
    kubectl --kubeconfig=kube_config_cluster.yml apply -f local.yaml
    # 业务集群示例
    kubectl --kubeconfig=kube_c-b49gh.yml --context test-node apply -f c-b49gh.yaml
  7. 执行完以上命令后业务集群将自动连接 Rancher

    之前部署的应用正常运行,未丢失。