第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2(容灾测试)

系列文章目录

第一章-SUSE- Rancher-容器高可用与容灾测试-RKE2-外置Mysql(主备集群搭建)-CSDN博客

第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建(外置Mysql)

第三章-SUSE- Rancher-容器高可用与容灾测试-Rancher-外置数据库(复用Mysql)

第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2(容灾测试)

第五章-SUSE- Rancher-容器高可用与容灾测试-Rancher-back up(容灾测试)

第六章-SUSE- Rancher-容器高可用与容灾测试-Rancher拉起的集群(快照容灾测试)

第七章-SUSE- Rancher-容器高可用与容灾测试-Longhorn(容灾卷跨集群测试)


文章目录

目录

系列文章目录

文章目录

前言

一、RKE2集群-etcd-Mysql主备倒换。

主备倒换步骤

1.1、检查集群状态

[1.1 RKE2集群:](#1.1 RKE2集群:)

[1.2 Rancher以及Rancher-backup:](#1.2 Rancher以及Rancher-backup:)

[1.3 主数据库:](#1.3 主数据库:)

[1.4 备数据库同步状态:](#1.4 备数据库同步状态:)

[1.5 备份](#1.5 备份)

[1.5.1 备份数据库](#1.5.1 备份数据库)

[1.5.2 备份RKE2集群](#1.5.2 备份RKE2集群)

[1.6 数据库灾备切换](#1.6 数据库灾备切换)

[1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。](#1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。)

1.6.2、观察worker节点的报错与rke2-agent的状态做记录。

[1.6.3 检查备数据库状态做记录。](#1.6.3 检查备数据库状态做记录。)

[1.6.4 在备库上执行以下命令,停止复制进程:](#1.6.4 在备库上执行以下命令,停止复制进程:)

[1.6.5 提升备库为主库](#1.6.5 提升备库为主库)

[1.6.6 修改Server节点的config文件指向备数据库。](#1.6.6 修改Server节点的config文件指向备数据库。)

[1.6.7 重启rke2-server](#1.6.7 重启rke2-server)

[1.6.8 检查业务是否恢复。](#1.6.8 检查业务是否恢复。)

二、Rancher-backup-容灾测试。

[2.1 调度备份](#2.1 调度备份)

[2.1.1 Rancher-backup进行一次最新备份](#2.1.1 Rancher-backup进行一次最新备份)

[2.2 部署rke2节点。](#2.2 部署rke2节点。)

[2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。](#2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。)

[2.3 helm部署Rancher-bakeup](#2.3 helm部署Rancher-bakeup)

[2.3.1 前提条件](#2.3.1 前提条件)

[2.3.2 添加 Rancher Helm 仓库](#2.3.2 添加 Rancher Helm 仓库)

[2.3.3 创建命名空间(可选)](#2.3.3 创建命名空间(可选))

[2.3.4 安装 Rancher Backup以及Rancher Backup-crd](#2.3.4 安装 Rancher Backup以及Rancher Backup-crd)

[2.3.5 验证安装](#2.3.5 验证安装)

[2.3.6 恢复备份](#2.3.6 恢复备份)

[2.4 安装cert-Manager](#2.4 安装cert-Manager)

[2.5 部署Rancher](#2.5 部署Rancher)

[2.5.1 这里有个细节。](#2.5.1 这里有个细节。)

[2.5.2 通过values部署Rancher](#2.5.2 通过values部署Rancher)

[2.5.3 检查Rancher状态](#2.5.3 检查Rancher状态)

[2.5.4 测试访问](#2.5.4 测试访问)

[2.5.5 验证恢复](#2.5.5 验证恢复)

总结



前言

第一章我们搭建好了Mysql(主备复制)实例。

第二章我们搭建好Rancher管理集群的基础设施- RKE2集群-Tarball方法-离线。

第三章我们使用helm离线方式部署好了Rancher到RKE2集群中,同时使用Rancher-backup-调度了一次备份任务到阿里云的对象存储。

本章我们做几个实验:

1、RKE2集群-etcd-Mysql主备倒换-容灾测试。

2、Rancher-backup-容灾测试。

1、会对现有的Rancher做一些简单的变更,数据添加模拟运行了一段时间的Rancher。(比如修改密码等简单的,体现一下区别就行。)

2、异地部署2台同规格的rke2主机.

3、通过OSS将rke2集群需要的文件上传、在异地使用相同的离线镜像方式部署通过OSS拉取文件重新部署RKE2集群,模拟主数据中心故障,异地需要重新拉起RKE2集群的场景。

4、拉起RKE2之后、一样的方式部署Rancher并且Rancher通过Rancher-backup还原。


一、RKE2集群-etcd-Mysql主备倒换。

先回顾一下我们到集群,2台节点部署RKE2-上面部署了Rancher以及Rancher-backup.使用的是外置的Mysql(主备)数据库。

本次先模拟主数据库故障,备数据库倒换。

主备倒换步骤

1、先检查集群状态,所有业务都正常。

2、主备数据库同步正常。

3、备份一次主数据库。

4、关闭主数据库(docker stop)

1、观察Server节点的报错与rke2-server的状态做记录。

2、观察worker节点的报错与rke2-agent的状态做记录。

5、检查备数据库状态做记录。

6、关闭备数据库只读状态,备升主。

7、修改Server节点的config文件指向备数据库。

8、检查业务是否恢复。


1.1、检查集群状态

1.1 RKE2集群:

1.2 Rancher以及Rancher-backup:

**这里说一下我今天升级了一下集群的配置,升级为了4C 8G。之前的2C 4G 太吃力了。

1.3 主数据库:

主数据库:

sql 复制代码
SHOW MASTER STATUS;

*注意bin的文件名称以及Position的位置编号。

1.4 备数据库同步状态:

sql 复制代码
​​​​​​​SHOW SLAVE STATUS \G
复制代码

**注意bin的文件名称以及Position的位置编号与主数据库为一致的。

1.5 备份

1.5.1 备份数据库
sql 复制代码
docker ps -a

你可以使用 docker exec 命令在运行的 MySQL 容器中执行 mysqldump 命令来备份数据库。

我的 MySQL 容器名称为 mysql-master,数据库名称为 kubernetes,你可以使用以下命令备份数据库:

sql 复制代码
docker exec mysql-master mysqldump -u root -pxxxxxx kubernetes  > /kubernetes_backup.sql

备份文件 kubernetes_backup.sql 会被保存到主机的 / 根目录下,而不是容器内部。这是因为你在命令中使用了 > 重定向符号,将 mysqldump 的输出重定向到了主机的文件系统中。

通过OSS客户端上传到我们备份的桶里。

1.5.2 备份RKE2集群

上传Server与worker的配置文件在阿里云OSS上。

配置文件:

/etc/rancher/rke2/config.yaml

/etc/rancher/rke2/registries.yaml

对应RKE2版本的镜像文件:

1.6 数据库灾备切换

1.6.1 关闭主数据库(docker stop)观察Server节点的报错与rke2-server的状态做记录。

*控制面pod全部卡死。

执行kubectl 访问api-server报错:

1.6.2、观察worker节点的报错与rke2-agent的状态做记录。

因为Server节点控制面全部卡死,导致worker节点的保活机制全部挂掉。

1.6.3 检查备数据库状态做记录。
sql 复制代码
SHOW SLAVE STATUS \G

*主数据库无法连接。

1.6.4 在备库上执行以下命令,停止复制进程:
sql 复制代码
STOP SLAVE;
RESET SLAVE ALL;
1.6.5 提升备库为主库

在备库上执行以下命令,将其配置为可写,并更新相关配置:

sql 复制代码
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
1.6.6 修改Server节点的config文件指向备数据库。

1.41为备数据库

1.6.7 重启rke2-server
sql 复制代码
systemctl restart rke2-server.service 
1.6.8 检查业务是否恢复。

server节点

sql 复制代码
journalctl -u rke2-server.service -f

Server节点启动就连接上了数据库。 说明OK的。

Worker节点keeplive恢复。
节点上的POD正常运行。
总结:这种方式的RTO和RPO比纯备份还原要好很多。

二、Rancher-backup-容灾测试。

2.1 调度备份

2.1.1 Rancher-backup进行一次最新备份

2.2 部署rke2节点。

2.2.1 异地重新部署2个4C 8G rke2节点,这次使用原生etcd数据库。

**Server节点与Worker节点从阿里云OSS上获取镜像和安装脚本文件。

*模拟真实还原场景。

*也可以下载到一个节点后从节点分发。

**目的就是为了快速让节点获取到镜像和配置文件。

**两个节点分别创建配置文件目录以及镜像目录

sql 复制代码
mkdir -p /etc/rancher/rke2/  && mkdir -p /var/lib/rancher/rke2/agent/images/

**两个节点分别复制对应的文件到想要的目录下:

sql 复制代码
cp config.yaml registries.yaml /etc/rancher/rke2/

cp rke2-images-cilium.linux-amd64.tar.zst rke2-images-core.tar /var/lib/rancher/rke2/agent/images/

*验证一手

Server节点修改配置文件-config.yaml:

sql 复制代码
write-kubeconfig-mode: "0644"
tls-san:
  - "foo.local"
node-label:
  - "job=rke2"
#datastore-endpoint: "mysql://root:e2231255@tcp(172.30.0.213:3306)/kubernetes"
cni: cilium
write-kubeconfig-mode: "0644"
debug: true
token: SECRET

修改配置文件-registries.yaml:

sql 复制代码
mirrors:
  "*":
    endpoint:
      - "https://mnt026bf.mirror.aliyuncs.com"
      - "https://registry.cn-hangzhou.aliyuncs.com"

开始安装Server节点:

sql 复制代码
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2 sh install.sh

systemctl start rke2-server.service 

监控一下安装:

sql 复制代码
 journalctl -u rke2-server.service -f

出现:

**出现keep-alive的ping就差不多了。

配置环境变量:

sql 复制代码
vim ​​​​​​​/etc/profile.local

kubectl get nodes

​​​​​​​

继续安装Worker节点:

**修改配置文件-config.yaml:

**server节点获取加入的token:

sql 复制代码
cat /var/lib/rancher/rke2/server/node-token

**worker节点展示:

**worker节点镜像配置展示:

**启动worker节点:

sql 复制代码
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2 sh install.sh

systemctl start rke2-agent.service 

**观察日志

**Server节点验证:

**这里的ingress-nginx报错:

*因为阿里云的镜像没有安装iptables,安装即可。 而kube-proxy默认使用ipbtales来4层LB负载。

**安装好ipbtales就好了。

2.3 helm部署Rancher-bakeup

2.3.1 前提条件

  • 已安装 Helm:确保已安装 Helm v3 或更高版本。

  • Kubernetes 集群 :目标集群已就绪,且 kubeconfig 配置正确。

  • Rancher 兼容性 :确认 Rancher Backup 版本与您的 Rancher 版本兼容


2.3.2 添加 Rancher Helm 仓库

sql 复制代码
helm repo add rancher-charts https://charts.rancher.io
helm repo update

2.3.3 创建命名空间(可选)

sql 复制代码
kubectl create namespace cattle-resources-system

2.3.4 安装 Rancher Backup以及Rancher Backup-crd

sql 复制代码
helm install rancher-backup-crd rancher-charts/rancher-backup-crd  -n  cattle-resources-system --create-namespace

helm install rancher-backup rancher-charts/rancher-backup \
  --namespace cattle-resources-system 

2.3.5 验证安装

检查 Pod 状态:

sql 复制代码
kubectl get pods -n cattle-resources-system -l app.kubernetes.io/name=rancher-backup

输出应显示 Running 状态。


2.3.6 恢复备份

这里简单说一下Rancher-backup的原理,创建了3个自定义资源:

Backup 备份

*创建备份任务

Restore 还原

*创建还原任务

ResourceSet 资源集
**定义备份的资源是哪些

工作流:

1、创建一个ResourceSet,以您要备份的所有资源为目标。

2、执行备份:要进行备份,用户必须创建备份CRD的实例(创建备份CR)。

3、从备份恢复:要从备份恢复,用户必须创建还原CRD的实例(创建还原CR)

从上一章的OSS 创建的中备份恢复

创建S3存储的访问凭证:

sql 复制代码
kubectl create secret generic s3-creds \
  --from-literal=accessKey=<access key> \
  --from-literal=secretKey=<secret key>

本次案例的restore.yaml

sql 复制代码
# restore.yaml
apiVersion: resources.cattle.io/v1
kind: Restore
metadata:
  name: restore
spec:
  backupFilename: thesectimebackup-1c9dbfa6-0c64-41c5-ac10-dc9e7b59cc81-2025-01-28T07-30-43Z.tar.gz
  prune: false
  storageLocation:
    s3:
      bucketName: for-rancher-backup
      credentialSecretName: s3-creds
      credentialSecretNamespace: default
      endpoint: oss-cn-shanghai-internal.aliyuncs.com
      region: cn-shanghai

s3:
bucketName: for-rancher-backup
credentialSecretName: s3-creds
credentialSecretNamespace: default
endpoint: oss-cn-shanghai-internal.aliyuncs.com
region: cn-shanghai

sql 复制代码
kubectl create -f restore.yaml -n cattle-resources-system

**监控还原任务。

sql 复制代码
kubectl logs -n cattle-resources-system --tail 100 -f -l app.kubernetes.io/instance=rancher-backup

**出现Completd.

一旦还原资源的状态为Completed,您就可以继续cert-Manager和Rancher安装。

2.4 安装cert-Manager

**之前阿里云的OSS应该上传cert-Manager的镜像的tar包以及对应的Chart包。我忘记了。

sql 复制代码
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

**因为我的节点使用的是代理镜像仓库,从外网节点传递Chart包就可以了,不用担心镜像的问题。

**私有仓库也不用担心,只要异地有镜像同步的仓库就行。

**检查cert-manager状态

2.5 部署Rancher

**逻辑也是一样,传递镜像包或者镜像仓库能访问。

**配置文件Chart上传OSS。

2.5.1 这里有个细节。

就是之前部署Rancher的values.yaml文件,一定要注意备份。下面展示提取的命令,因为我的测试环境配置修改的就只是set -- hostname 没有其它的则没有做这一步。

helm get values rancher -n cattle-system -o yaml > rancher-values.yaml

2.5.2 通过values部署Rancher

helm install rancher rancher-latest/rancher -n cattle-system -f rancher-values.yaml --version x.y.z

**我的测试环境两边的Rancher都只传递了一个set hostname的values.则可以通过简单的cli去执行。

helm install rancher rancher-stable/rancher   --namespace cattle-system   --set hostname=rancher.demo   --version 2.9.3

2.5.3 检查Rancher状态

kubectl get po -n cattle-system

2.5.4 测试访问

**先修改hosts文件

**访问rancher.demo

**可以看到如果不是因为备份还原成功了,那么这里会出现第一次登陆让你输入密码。
**证明容灾测试成功了。

2.5.5 验证恢复

**输入备份之前的密码,成功登陆。


总结

1、这篇文章整理的容灾备份是非常湿滑和顺利的,但是这里要达成如此湿滑的容灾也需要一点前提:

1、优秀的镜像仓库的容灾机制。

2、跨地域的对象存储。

3、熟练的容灾恢复步骤。

4、熟悉的人工操作手。

2、能达到上面这4点,基本上容灾的RTO和RPO可以做到很低。

相关推荐
郝开6 小时前
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
docker·容器·rancher·docker desktop·portainer
A ?Charis3 天前
第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建(外置Mysql)-Tarball方法
rancher
A ?Charis3 天前
第三章-SUSE- Rancher-容器高可用与容灾测试-Rancher-外置数据库(复用Mysql)
rancher
AKA小徐1 个月前
Debian12使用RKE2离线部署3master2node三主两从的k8s集群详细教程
kubernetes·rancher·rke2
long_songs2 个月前
kubectl rancher等重启之后服务起不来一分钟解决(另类方案)did you specify the right host or port?
linux·运维·服务器·kubernetes·kubectl·rancher·kubelet
十一呓语2 个月前
k8s+rancher配置滚动发布更新时服务不可用
java·kubernetes·rancher
欧阳潇瑞2 个月前
Ubuntu24 cgroupv2导致rancher(k3s)启动失败的处理
rancher
A ?Charis3 个月前
解决部署RKE2或K3S-“docker.io/rancher/mirrored-pause:3.6\“: -无法拉取镜像办法
docker·容器·rancher
KTKong3 个月前
kubernetes部署rancher无法查看pod日志及通过execute shell进入pod解决办法
容器·kubernetes·rancher