系列文章目录
第一章-SUSE- Rancher-容器高可用与容灾测试-RKE2-外置数据库(Mysql主备集群搭建)
第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建(使用Mysql)-CSDN博客
第三章-SUSE- Rancher-容器高可用与容灾测试-Rancher-(离线helm部署)
第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2-数据库(Mysql主备倒换容灾)
第五章-SUSE- Rancher-容器高可用与容灾测试-Rancher-(使用Rancher-backup-异地还原测试)
第六章-SUSE- Rancher-容器高可用与容灾测试-RKE2-数据库(Mysql-异地备份还原方式容灾)
第七章-SUSE- Rancher-容器高可用与容灾测试-Rancher-拉起的集群(快照容灾测试)
第八章-SUSE- Rancher-容器高可用与容灾测试-Longhorn(容灾卷跨集群测试)
目录
5.2 安装外部-ZooKeeper(Kafka依赖)-可选
前言
第一章我们搭建好了Mysql(主备复制)实例。
第二章我们搭建好Rancher管理集群的基础设施- RKE2集群-Tarball方法-离线。
第三章我们使用helm离线方式部署好Rancher到RKE2集群中,同时使用Rancher-backup-调度了一次备份任务到阿里云的对象存储。
第四章 我们模拟主数据中心数据库故障,将RKE2进行Mysql数据库主备倒换。
第五章,我们使用Rancher-backup对Rancher进行异地还原。
第六章,我们模拟主数据中心数据库故障,将RKE2的Mysql数据库通过备份还原。
本章,我们做几件事情:
1、Rancher操作第六章我们使用rke2数据库备份还原的集群部署longhorn.(为了给最终章做准备)
2、新建1台云主机,使用Rancher创建rke2集群-ETCD数据库。
1、对其进行部署longhorn,此时打快照。
2、再部署kafka.
3、进行快照还原,测试快照还原元数据。
3、kafka写入两次数据,分别打快照。
1、测试还原是否会丢数据。
4、升级集群一个版本打快照。
1、测试升级和快照降级集群还原测试。
5、修改api-server配置文件
1、测试修改Cluster config api-server还原。
一、Rancher纳管rke2集群01
1.1 纳管外部集群
1.2 加入集群
**等待Pod-Runing
1.3 处理pod的DNS问题
如果是域名访问且主机的DNS没有解析条目,可以单独修改coredns添加主机。
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |-
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
hosts {
172.31.0.32 rancher.demo
fallthrough
}
prometheus 0.0.0.0:9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
1.4 验证添加
二、rke2集群01部署longhorn
2.1 通过App-Charts
2.2 检查系统要求
2.3 满足系统要求
2.3.1 Runtime
containerd://1.7.23-k3s2
满足v1.3.7+
2.3.2 K8s
v1.30.9+rke2r1
满足v1.21
2.3.3 Linux-cli
*安装 zypper install bash curl findmnt grep awk blkid open-iscsi *检查是否安装 zypper se --installed-only bash curl findmnt grep awk blkid open-iscsi
2.4 配置longhorn
2.4.1 使用默认配置即可
2.4.2 等待安装
2.4.3 验证安装
二、创建新rke2集群02
2.1 创建主机
2.2 通过Rancher部署rke2
2.3 修改仓库配置文件
2.4 主机安装
**如果DNS没有就添加host解析。
2.5 监控安装过程
journalctl -u rancher-system-agent.service -f
**出现这个报错不用管,是因为下面的进程正在启动。
journalctl -u rke2-server.service -f
**出现这个不用管,因为Runtime还在拉取镜像,还没到静态的ETCD启动的时候。
2.6 验证拉起
**有个细节,你需要修改coredns的Rancher解析。
三、rke2集群02部署longhorn
3.1 安装需要的CLI命令
*安装
zypper install bash curl findmnt grep awk blkid open-iscsi
*检查是否安装
zypper se --installed-only bash curl findmnt grep awk blkid open-iscsi
3.2 安装
3.3 验证
四、rke2集群02打快照
4.1 启动快照
4.2 监控
4.3 rke2集群02快照验证
4.3.1 快照位置
/var/lib/rancher/rke2/server/db/snapshots
五、rke2集群02部署测试pod
计划部署kafka进行测试。
5.1 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
国内平替
helm repo add appstore https://charts.grapps.cn
helm repo update appstore
5.2 安装外部-ZooKeeper(Kafka依赖)-可选
Kafka依赖ZooKeeper管理元数据,Bitnami的Kafka Chart默认会自动安装ZooKeeper,但建议显式配置。
helm install zookeeper appstore/zookeeper --set replicaCount=2 --set persistence.storageClass=longhorn --set persistence.size=20Gi --version 11.4.9 --namespace=kafka --create-namespace
5.2.1 验证ZooKeeper
5.3 安装kafka-内部ZooKeeper
5.3.1 关闭kraft模式
helm install kafka appstore/kafka --set persistence.storageClass=longhorn --set persistence.size=3Gi --namespace=kafka --set zookeeper.enabled=true --version=23.0.7 --set kraft.enabled=false
5.3.2 验证安装
5.3.3 Rancher验证
5.3.4 再次打快照
5.3.5 检查快照
我们此时有两个快照,一个包括kafka,一个不包括kafka.
**这里多了一个自动备份快照。
12:19 是不包括kafka的快照。
4.34 是包括kafka的快照。
六、etcd方式还原测试
Rancher方便了还原,底层的还原步骤和逻辑是这样的:
**验证:
6.1 还原不包括kafka的快照
only etcd
Kubernetes version and etcd
Cluster Config , Kubernetes version and etcd
- only etcd: 仅还原etcd数据,不会改变当前集群的Kubernetes版本和其他配置。适用于集群配置保持不变,仅需恢复数据的场景。
- Kubernetes version and etcd: 同时还原Kubernetes版本和etcd数据,但不覆盖集群的其他配置。适用于需要将Kubernetes版本一起恢复到快照时的场景。
- Cluster Config, Kubernetes version and etcd: 完整还原集群配置、Kubernetes版本以及etcd数据。适用于需要完整恢复集群所有状态(包括配置、版本和数据)的场景。
**我们的场景属于第一种。
**集群开启还原后,会停止服务,等待etcd还原。
*监控进程
journalctl -u rancher-system-agent.service -f
**等待状态正常即可。
**检查还原状态
**kafka没了。 还原测试成功。
6.1.1 helm记录
**helm记录也没了
6.1.2 看看pvc
kafka创建pvc也没了
6.2 还原到最新的有kafka的快照
6.2.1 还原准备
6.2.2 监控进程
*监控进程
journalctl -u rancher-system-agent.service -f
*监控进程
journalctl -u rke2.server.service -f
**开始停止容器服务。
**开始启动rke2-server进程,恢复etcd进程完毕。
6.2.3 等待还原
6.2.4 检查业务
**kafka还原回来了
**PVC也回来了
6.2.5 测试结果
1、可以还原集群的元数据。
6.3 跨版本恢复元数据
有一个场景,我们不需要只希望恢复元数据,不希望恢复集群版本。
我们找两个快照来测试。符合跨版本以及有元数据差异的场景。
我们在当年的v1.29版本创建一个namespace来模拟元数据修改,打一个快照。
2:35是v1.30.8+rke2r1版本没有for-snmpshot01的版本。
3:12是v1.29版本有for-snmpshot01的版本。
期望结果是恢复到2:35的版本,集群版本还是v1.29但是没有for-snmpshot01的命名空间。
**测试结果
1、没有namespace测试成功。
2、cm、secret的数据修改也会还原回来。
**因为在之前的快照中这里我们是添加了Rancher的hosts解析的。
3、测试成功。
七、kubernetes version以及etcd方式-还原测试
升级集群并且写入数据快照还原测试
7.1 降级集群
**我这里已经是最新版本了,我删除一下节点降级一下。
**新建节点之前需要卸载和删除之前的数据,最好重启一下。
rke2 kill-all.sh
rke2 uninstall.sh
**新建一个集群。版本降低一下。
**操作一样的,等待集群节点起来。
7.2 kafka中写入数据打快照还原测试
**进入kafka内部
**写入测试数据
# 在 Pod 内部使用 kafka-console-producer 发送消息
kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic test-topic
# 输入消息(按行发送,Ctrl+C 退出)
Hello, Kafka!
This is a test message.
**验证测试数据
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic \
--from-beginning
**打快照
我现在是连接着kafka的pod
点击打快照
**说明打快照业务是无感知的。
**写入更多的测试数据
写入 sec enter 以及 sec hello!
**再次进行快照并且进行快照还原。
看是否只有Hello,Kafka! 以及This is a test message.
**此时有多个快照
12:20 的数据只有Hello,Kafka! 以及This is a test message.
12:24 的数据增加了sec enter 以及 sec hello!
我们还原到12:20的快照。
**看到还原选项只选择etcd
**等待还原完成
**检查kafka数据
**这里可以看到还原选项只选择etcd只会还原元数据,业务数据是不会修改的。
**也就是说快照只能作为元数据的容灾。
7.3 升级集群打快照还原测试
**选择继续,然后升级集群。
**等待升级完成。
**检查各种系统组件以及业务状态。
**业务pod
**检查业务数据
**升级之后业务pod和业务数据都在。
**我们此时打一个快照,看看能不能通过快照还原k8s版本。
**2:35是v1.30.8+rke2r1版本
**我们还原到12:24,v1.29.12+rke2r1的版本。
**开始还原:
**等待还原完成。
**检查集群系统组件状态和业务数据
**业务数据没丢
八、还原测试-Cluster Config, Kubernetes version and etcd
Cluster Config指的是:
集群配置:
控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler)的启动参数。
节点 kubelet 配置(如
/var/lib/kubelet/config.yaml
)。网络插件(如 Calico、Cilium)的配置文件和 CRD。
存储类(StorageClass)、持久卷(PV/PVC)配置。
**其实这里的Cluster Config 简单来说就是指不保存在etcd的数据,比如静态pod和节点的kubelet的配置,其它插件的配置文件是会保存configmap或者secret等地方是保存在etcd里面的。
**我们修改api-server的启动参数来进行测试。
- --service-node-port-range=30000-32767
rancher-rke2 修改--service-cluster-ip-range_rke2 安装的ingress 怎么修改配置文件-CSDN博客
**这里是非Rancher创建集群的修改教程。
**先打快照
**下面是Rancher管理后的下游集群修改教程
**修改成功后api-server重启,我们检查配置,range为25000-65535了。
**我们执行还原,期望结果为range为30000-32767.
还原成功!
**测试结果
1、成功还原
全文总结
本文主要介绍了在 SUSE Rancher 中进行容器高可用与容灾测试,包括使用 Rancher 拉起的集群进行容灾测试的详细步骤。涵盖了 Rancher 纳管 rke2 集群、在集群上部署 longhorn、创建新集群、在新集群部署 longhorn 和测试 pod、打快照、进行 etcd 方式还原测试以及跨版本恢复元数据等内容。
重要亮点
- Rancher 纳管 rke2 集群:介绍了纳管外部集群、加入集群、处理 pod 的 DNS 问题和验证添加的步骤。
- rke2 集群部署 longhorn:包括通过 App-Charts 安装、检查和满足系统要求、配置 longhorn 以及验证安装。
- 创建新 rke2 集群:创建主机、通过 Rancher 部署 rke2、修改仓库配置文件、主机安装、监控安装过程和验证拉起。
- rke2 集群打快照:启动快照、监控和验证快照位置。
- rke2 集群部署测试 pod:添加仓库、安装外部 ZooKeeper 和内部 Kafka、验证安装、Rancher 验证、再次打快照和检查快照。
- etcd 方式还原测试:还原不包括 kafka 的快照和还原到最新的有 kafka 的快照,包括还原准备、监控进程、等待还原、检查业务和测试结果,还介绍了跨版本恢复元数据。
- kubernetes version 以及 etcd 方式还原测试:降级集群、在 kafka 中写入数据打快照还原测试和升级集群打快照还原测试。
- Cluster Config还原测试:通过修改api-server参数来测试还原。
- 还原测试总结:对整个还原测试过程进行总结。