写点什么

如何将 Rancher 2.1x 从单节点安装迁移到高可用安装

2020 年 4 月 23 日

如何将Rancher 2.1x从单节点安装迁移到高可用安装

Rancher 提供了两种安装方法,即单节点安装和高可用安装。单节点安装可以让用户快速部署适用于短期开发或 PoC 的 Rancher 2.x,而高可用部署则明显更适合 Rancher 的长期部署。


要点须知

  • 针对开源用户,对于从单个节点迁移到 HA 的工作,Rancher Labs 不提供官方技术支持。

  • 以防在此过程中出现问题,您应该熟悉 Rancher 架构以及故障排除的方法。


前期准备

为了顺利将单个节点 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 的新实例。因为执行就地迁移非常危险,并且没有回滚策略。我们强烈建议您参考官方建议的架构。

  • (https://rancher.com/docs/rancher/v2.x/en/installation/ha/#recommended-architecture

  • 您需要熟悉单节点安装和高可用性安装之间的体系结构差异。

  • 不要更改单节点安装的 CA。换言之,如果您已经在使用自定义证书了,那么请继续使用它。


迁移教程

从 Rancher 的单个节点迁移到高可用性安装的过程可以总结为以下几个步骤:


在 Rancher 单节点实例上

1、 备份 Rancher 单节点容器


2、 使用单节点容器中找到的证书组装 pki.bundle.tar.gz


3、 运行临时 utility 容器以执行容器内运行的嵌入式 etcd 的 etcd 快照


4、 停止旧的 Rancher 单节点容器


5、 将 server-url 的 DNS 记录更改为指向新的 HA 负载均衡器


在您的工作站或者 bastion host 上

1、 将生成的 pki.bundle.tar.gz 和 single-node-etcd-snapshot 从 Rancher 单节点实例传输到工作目录中的工作站上(工作目录原先最好是空的)


2、 生成指向新 HA 节点的 rke 集群配置文件


3、 rke etcd snapshot-restore 从单节点容器中检索快照


4、 rke up


5、 根据文档在 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/sslroot@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 sslbash-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-snapshotbash-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:  - address: <RANCHER_HA_HOST_1>    user: centos    role: [controlplane,worker,etcd]services:  etcd:    snapshot: true    creation: 6h    retention: 24h
复制代码


在所需的 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-snapshotsEndeavor: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 hostsINFO[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>
复制代码


2020 年 4 月 23 日 17:22173

评论

发布
暂无评论
发现更多内容

关于全球央行数字货币实验的若干认识与思考

CECBC区块链专委会

银行

K8s 原生 Serverless 实践:ASK 与 Knative

阿里巴巴云原生

Serverless 容器 云原生 k8s 存储

结合 Flink 学习装饰者模式

shengjk1

flink源码 flink源码分析

this指向

y

this指针

Android 系统开发做什么?

吴小龙同学

基于docker部署jenkins(一)

李日盛

docker jenkins

一文搞懂 Flink 处理水印全过程

shengjk1

你有没有领导力?

石云升

领导力 28天写作 职场经验 管理经验 3月日更

作业 - 第八章 数据分析

hao hao

一文搞懂 Flink Stream Join原理

shengjk1

flink源码 flink join

阿里混沌工程平台实践

心远

阿里巴巴 混沌工程

携手百度智能云推动实现工业AR空间智能化

百度大脑

AR 百度智能云

2021金三银四总结面试必备清单:字节/蚂蚁金服/腾讯/百度

比伯

Java 程序员 架构 互联网 技术宅

「产品经理训练营」第八章作业

Sòrγy_じò ぴé

操作系统--虚拟存储器概述

学Java的猪猪侠

户口?大厂?高薪?生活?聊聊应届程序员的职业选择

流沙

职业发展

Flink SQL 自定义 Source format

shengjk1

flink sql

技术中台之DevOps动态表单体系构建

EAWorld

【操作系统】存储器管理

学Java的猪猪侠

API 工具链研发的理论基础 - 导读

李宇飞

工具链 API sdk

产品经理第 0 期训练营第九周作业提交

Krystal

继承

y

继承

浅论指针(二)

Integer

c 指针

通俗地理解面向服务的架构(SOA)以及微服务之间的关系

读字节

微服务 软件架构 ESB SOA BPM

行业首创,百度自主研发下一代区块链操作系统

CECBC区块链专委会

原子操作

产品 0 期 - 第八周作业

曾烧麦

产品训练营

systemedctl使用指南

happlyfox

3月日更

一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?

阿里巴巴云原生

容器 微服务 云原生 k8s 中间件

设计模式--享元模式

学Java的猪猪侠

直播预告|4月1日与你相约腾讯云共探TcaplusDB

TcaplusDB

数据库 nosql 后端 TcaplusDB

Vue中如何在线预览pdf文件

y

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

如何将Rancher 2.1x从单节点安装迁移到高可用安装-InfoQ