Rancher提供了两种安装方法,即单节点安装和高可用安装。单节点安装可让用户快速部署适用于短时间开发或PoC的Rancher 2.x,而高可用部署则明显更适合Rancher的长期部署。node
要点须知nginx
针对开源用户,对于从单个节点迁移到HA的工做,Rancher Labs不提供官方技术支持。docker
以防在此过程当中出现问题,您应该熟悉Rancher架构以及故障排除的方法。centos
前期准备bash
为了顺利将单个节点Rancher安装迁移到高可用性安装,您必须作以下准备:网络
您须要运行Rancher的2.1.x版本以及RKE 的0.1.x版本架构
server-url参数必须是能够被更改成指向HA Rancher安装的DNS名称。若是您的server-url是IP地址,则必须先将server-url更改成DNS名称并更新用户集群的节点/集群代理,以便在迁移后容许HA集群的nginx ingress控制器可以正确路由Rancher流量。不然,您将没法访问全部工做负载集群。负载均衡
您须要配置专门用于在HA中运行Rancher的新实例。由于执行就地迁移很是危险,而且没有回滚策略。咱们强烈建议您参考官方建议的架构。ssh
(https://rancher.com/docs/rancher/v2.x/en/installation/ha/#recommended-architecture )ui
您须要熟悉单节点安装和高可用性安装之间的体系结构差别。
不要更改单节点安装的CA。换言之,若是您已经在使用自定义证书了,那么请继续使用它。
迁移教程
从Rancher的单个节点迁移到高可用性安装的过程能够总结为如下几个步骤:
在Rancher单节点实例上
一、 备份Rancher单节点容器
二、 使用单节点容器中找到的证书组装pki.bundle.tar.gz
三、 运行临时utility容器以执行容器内运行的嵌入式etcd的etcd快照
四、 中止旧的Rancher单节点容器
五、 将server-url的DNS记录更改成指向新的HA负载均衡器
在您的工做站或者bastion host上
一、 将生成的pki.bundle.tar.gz和single-node-etcd-snapshot从Rancher单节点实例传输到工做目录中的工做站上(工做目录原先最好是空的)
二、 生成指向新HA节点的rke集群配置文件
三、 rke etcd snapshot-restore从单节点容器中检索快照
四、 rke up
五、 根据文档在HA中安装Rancher
开始以前
在整个教程中,您将输入一系列命令,以将您环境中的数据替换为占位符。这些占位符用斜角括号和全部大写字母(<EXAMPLE>)表示。
下表是找到本教程中使用的各类占位符。请您在开始以前记下此信息,这将有助于您后续的操做。
在Rancher单节点实例上
步骤1 备份Rancher单节点容器
首先,您应该备份Rancher单节点容器,以确保在迁移过程当中遇到问题时能够回滚到此前运行的Rancher单节点。有关这方面的更多信息,请参阅:
https://rancher.com/docs/rancher/v2.x/en/backups/backups/single-node-backups/
步骤2 使用单节点容器中找到的证书组装pki.bundle.tar.gz
首先,键入docker exec,进入Rancher容器:
[root@single-node-rancher ~]# docker exec -it <RANCHER_CONTAINER_NAME> /bin/bash
进入容器后,将/ etc / kubernetes / ssl目录tar到pki.bundle.tar.gz:
root@9f4b1729d8ca:/var/lib/rancher# tar -zcvf pki.bundle.tar.gz /etc/kubernetes/ssl root@9f4b1729d8ca:/var/lib/rancher# exit
将刚刚生成的pki.bundle.tar.gz转移到单节点实例上的当前工做目录:
[root@single-node-rancher ~]# docker cp <RANCHER_CONTAINER_NAME>:/var/lib/rancher/pki.bundle.tar.gz .
步骤3 运行临时utility容器以执行容器内运行的嵌入式etcd的etcd快照
docker运行一个名为etcd-utility的临时rke-tools容器,并附加了Rancher容器网络。此外,还挂载当前工做目录(将pki.bundle.tar.gz放入其中:
docker run --net=container:<RANCHER_CONTAINER_NAME> -it -v $(pwd):/cwd --name etcd-utility rancher/rke-tools:v0.1.20
在此容器中建立一个名为ssl的文件夹,而后将pki.bundle.tar.gz解压到:
bash-4.4# mkdir ssl && cd ssl bash-4.4# cp /cwd/pki.bundle.tar.gz . bash-4.4# tar -zxvf pki.bundle.tar.gz --strip-components 3
将单节点etcd快照到一个名为single-node-etcd-snapshot的文件中
bash-4.4# cd / bash-4.4# ETCDCTL_API=3 etcdctl snapshot save --cacert=/ssl/kube-ca.pem --cert=/ssl/kube-etcd-127-0-0-1.pem --key=/ssl/kube-etcd-127-0-0-1-key.pem single-node-etcd-snapshot bash-4.4# exit
将etcd快照从etcd-utility容器复制到当前工做目录
[root@single-node-rancher ~]# docker cp etcd-utility:/single-node-etcd-snapshot .
单节点实例上的当前工做目录应包含两个文件:pki.bundle.tar.gz和single-node-etcd-snapshot。这是将Rancher从单节点迁移到HA所需的两个组件。
步骤4 中止旧的Rancher单节点容器
[root@single-node-rancher ~]# docker stop <RANCHER_CONTAINER_NAME>
步骤5 将server-url的DNS记录更改成指向新的HA负载均衡器
为了正确迁移Rancher,您应该更新DNS基础结构中的DNS记录,以将Rancher server-url指向新的HA负载均衡器。
在您的工做站或者bastion host上
将生成的pki.bundle.tar.gz和single-node-etcd-snapshot从Rancher单节点实例传输到工做目录中的工做站上(工做目录最好原先就是空的)
Endeavor:single-node-to-ha-migration chriskim$ scp root@<RANCHER_SINGLE_NODE_HOST>:/root/pki.bundle.tar.gz . Endeavor:single-node-to-ha-migration chriskim$ scp root@<RANCHER_SINGLE_NODE_HOST>:/root/single-node-etcd-snapshot .
生成指向您的新HA节点的rke集群配置文件
举个例子,rancher-cluster.yml文件以下所示:
`nodes:
在所需的HA节点上建立/ opt / rke / etcd-snapshots目录,并将single-node-etcd-snapshot和pki.bundle.tar.gz文件复制到该目录:
Endeavor:single-node-to-ha-migration chriskim$ ssh root@<RANCHER_HA_HOST_1> "mkdir -p /opt/rke/etcd-snapshots"Endeavor:single-node-to-ha-migration chriskim$ scp pki.bundle.tar.gz root@<RANCHER_HA_HOST_1>:/opt/rke/etcd-snapshots Endeavor:single-node-to-ha-migration chriskim$ scp single-node-etcd-snapshot root@<RANCHER_HA_HOST_1>:/opt/rke/etcd-snapshots
使用RKE将 single-node- etcd-snapshot恢复到新的HA节点:
rke etcd snapshot-restore --name single-node-etcd-snapshot --config rancher-cluster.yml
完整命令行以下:
INFO[0000] Starting restoring snapshot on etcd hosts INFO[0000] [dialer] Setup tunnel for host [ha-rancher01.fmt01.rancher.com] INFO[0000] [hosts] Cleaning up host [ha-rancher01.fmt01.rancher.com] INFO[0000] [hosts] Running cleaner container on host [ha-rancher01.fmt01.rancher.com] INFO[0000] [kube-cleaner] Pulling image [rancher/rke-tools:v0.1.15] on host [ha-rancher01.fmt01.rancher.com] INFO[0004] [kube-cleaner] Successfully pulled image [rancher/rke-tools:v0.1.15] on host [ha-rancher01.fmt01.rancher.com] INFO[0004] [kube-cleaner] Successfully started [kube-cleaner] container on host [ha-rancher01.fmt01.rancher.com] INFO[0004] [hosts] Removing cleaner container on host [ha-rancher01.fmt01.rancher.com] INFO[0004] [hosts] Removing dead container logs on host [ha-rancher01.fmt01.rancher.com] INFO[0005] [cleanup] Successfully started [rke-log-cleaner] container on host [ha-rancher01.fmt01.rancher.com] INFO[0005] [remove/rke-log-cleaner] Successfully removed container on host [ha-rancher01.fmt01.rancher.com] INFO[0005] [hosts] Successfully cleaned up host [ha-rancher01.fmt01.rancher.com] INFO[0005] [etcd] Restoring [single-node-etcd-snapshot] snapshot on etcd host [ha-rancher01.fmt01.rancher.com] INFO[0005] [etcd] Pulling image [rancher/coreos-etcd:v3.2.18] on host [ha-rancher01.fmt01.rancher.com] INFO[0007] [etcd] Successfully pulled image [rancher/coreos-etcd:v3.2.18] on host [ha-rancher01.fmt01.rancher.com] INFO[0007] [etcd] Successfully started [etcd-restore] container on host [ha-rancher01.fmt01.rancher.com] INFO[0007] [etcd] Building up etcd plane.. INFO[0007] [etcd] Successfully started [etcd] container on host [ha-rancher01.fmt01.rancher.com] INFO[0007] [etcd] Saving snapshot [etcd-rolling-snapshots] on host [ha-rancher01.fmt01.rancher.com] INFO[0007] [etcd] Successfully started [etcd-rolling-snapshots] container on host [ha-rancher01.fmt01.rancher.com] INFO[0012] [certificates] Successfully started [rke-bundle-cert] container on host [ha-rancher01.fmt01.rancher.com] INFO[0013] [certificates] successfully saved certificate bundle [/opt/rke/etcd-snapshots//pki.bundle.tar.gz] on host [ha-rancher01.fmt01.rancher.com] INFO[0013] [etcd] Successfully started [rke-log-linker] container on host [ha-rancher01.fmt01.rancher.com] INFO[0013] [remove/rke-log-linker] Successfully removed container on host [ha-rancher01.fmt01.rancher.com] INFO[0013] [etcd] Successfully started etcd plane.. INFO[0013] [certificates] Successfully started [rke-bundle-cert] container on host [ha-rancher01.fmt01.rancher.com] INFO[0013] [certificates] successfully extracted certificate bundle on host [ha-rancher01.fmt01.rancher.com] to backup path [/etc/kubernetes/.tmp/] INFO[0013] Finished restoring snapshot [single-node-etcd-snapshot] on all etcd hosts
此时,您能够运行rke up --config rancher-cluster.yml,并进行其余HA安装步骤。强烈建议您当即更改Rancher的DNS记录,以便在根据HA说明安装后,您的用户集群能够链接回Rancher。所以,您可能须要两次运行rke up --config rancher-cluster.yml以确保全部插件运行都成功。
在成功安装Kubernetes并将Rancher单节点备份恢复到您的实例后,您能够将其余HA实例添加到rancher-cluster.yml并运行rke up --config rancher-cluster.yml以将这些节点添加到您的集群。
此时,您可使用此处的文档继续安装Rancher:
https://rancher.com/docs/rancher/v2.x/en/installation/ha/helm-init/
清 理
迁移成功以后就能够开始进行清理工做了。您能够从单个节点实例中移除Rancher容器,也能够直接彻底删除实例。
[root@single-node-rancher ~]# docker rm <RANCHER_CONTAINER_NAME>
回 滚
若是迁移不成功,能够经过如下两个条件实现回滚:
将server-url的DNS条目更改回单节点Rancher实例;
在Rancher单节点实例上启动<RANCHER_CONTAINER_NAME>。
[root@single-node-rancher ~]# docker start <RANCHER_CONTAINER_NAME>