系列文章目录
第一章-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(容灾卷跨集群测试)
目录
[6、RKE2 安装指定配置文件安装](#6、RKE2 安装指定配置文件安装)
前言
第一章我们搭建好了Mysql(主备复制)实例。
本章我们计划搭建好Rancher管理集群的基础设施- RKE2集群-Tarball方法-离线。
一、创建RKE2集群的云主机
*测试环境2C-4G即可,正式环境根据负载进行扩容
二、搭建RKE2-Server节点-Tarball离线方法
这里先概述一下RKE2节点启动的过程,会更加帮助你完成整个安装工作。
下一代 Kubernetes 发行版剖析 | RKE2架构概述https://docs.rke2.io/zh/architecture
进程分为Server节点启动和普通的Agent节点(worker)节点启动
内容引导
1、所有的节点最开始引导时:
1、
/var/lib/rancher/rke2/agent/images/*.tar
获取 rancher/rke2-runtime 镜像。2、将镜像中的文件复制到/var/lib/rancher/rke2/data/目录下给节点使用。
3、本地没有则默认去docker.io拉取rke2-runtime镜像。
初始化 Server
在嵌入式 K3s 引擎中,server 是专门的 agent 进程,换言之,它会在节点容器运行时启动后再启动。(注意这里就启动runtime了),包括上面的内容引导拉取镜像也是runtime做的。
1、Server节点与普通worker节点最大的不同就是多了3个控制面的组件。
kube-apiserver kube-controller-manager kube-scheduler
2、上面的控制面组件都是静态pod.
3、文件位置在/var/lib/rancher/rke2/agent/pod-manifests/
初始化Server节点只是在/var/lib/rancher/rke2/agent/pod-manifests/下写pod的静态pod文件而不是启动。
Server节点:
worker节点:
启动集群
在 goroutine 中启动 HTTP 服务器来侦听其他集群 server/agent,然后初始化/加入集群。
默认端口为9345.
etcd
初始化Server节点只是在/var/lib/rancher/rke2/agent/pod-manifests/下写pod的静态pod文件而不是启动。etcd也是写文件不启动。
以上都是启动Server 节点会做的事情。
同时无论是server节点还是agent(worker)节点都会做下面的事情。
1、Server和agent节点启动进程都会最先启动runtime,然后使用runtime扫描镜像,没有就拉取。
2、
kubelet
生成并监督
kubelet
进程。如果kubelet
退出,那么rke2
将尝试重启它。kubelet
运行后,它将启动任何可用的静态 pod。对于 server,这意味着etcd
和kube-apiserver
将依次启动,允许其余组件通过静态 pod 启动,从而连接到kube-apiserver
并开始处理。**这里Server和agent才开始启动静态pod.
没有单独的kubelet进程和rke2对应的进程放在一起运行的。
3、使用**
helm-controller
**
kube-apiserver
准备就绪后,启动 goroutine 来启动嵌入式helm-controller
。helm-controller可以使用helm-crd像编辑yaml的方式来管理k8s中的chart应用。
1.下载RKE2-image文件
本次测试使用离线安装RKE2集群,模拟真实客户现场。
RKE2提供2种方式:
1、一种是Tarball 方法
2、一种是私有仓库-本次不涉及
本次测试Tarball方法:
1、进入RKE2项目-ReleasesReleases · rancher/rke2 · GitHubContribute to rancher/rke2 development by creating an account on GitHub.https://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releaseshttps://github.com/rancher/rke2/releases2、我们计划部署测试的Rancher Manager v2.9.5,故我们需要查阅兼容性
1、首先是RKE2与OS的兼容性。
2、然后是RKE2与Rancher的兼容性。
既然是测试那就玩次新的v1.30.
2.使用外网节点下载必要的安装镜像
根据官网离线安装指引。
*我们需要下载rke2(2进制文件),rke2-CNI(镜像),rke2-(控制面镜像)core,以及tarball 镜像。
外网节点下载core加对于的CNI插件镜像即可。1、rke2-images-core.linux-amd64.tar.zst
2、rke2-images-cilium.linux-amd64.tar.zst
3、rke2 二进制文件
4、tarball镜像文件
其中有txt文件可以显示下载的镜像目录,很方便看到。
3.下载安装脚本
#需要用外网节点下载脚本
curl -sfL https://get.rke2.io --output install.sh
4.在RKE2的server节点上创建存放镜像目录:
根据指引我们创建两个目录:
mkdir -p /var/lib/rancher/rke2/agent/images/ mkdir /root/rke2-artifacts && cd /root/rke2-artifacts/
5.放入文件与下载的镜像。
这里其实只需要放入rke2.linux-amd64.tar.gz就行,但是我为了备份一个镜像所以将其它文件放入到这个目录下面了。
测试这个时候实验rke2进制来安装会占据你的终端,故我们使用脚本来安装。
脚本才会用systemd在后台运行
6、rke2配置/etc/rancher/rke2/config.yaml
touch /etc/rancher/rke2/config.yaml
*我们需要添加我们的数据库连接方式以及设置网络插件为cilium.
*如果是本地主备的话,Mysql的连接地址为NLB的VIP地址。
*我们这里是异地可用区灾备,本地就用数据库地址即可。
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
7、RKE2 运行脚本文件安装
1、我们在/var/lib/rancher/rke2/agent/images/放入了cni以及core压缩包。
2、我们在/root/rke2-artifacts/ 放入cni以及core压缩包,install.sh等文件。
3、在编写好了/etc/rancher/rke2/config.yaml文件。
4、搭建好了Mysql容灾复制集群。
前置条件都好了,开始正式安装。
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2-artifacts sh install.sh
接着就是正常的流程。
systemctl enable rke2-server.service
systemctl start rke2-server.service
8、检查日志
journalctl -u rke2-server -f
日志里面的过程其实就是:
1、第一步在本地运行tarball.
- 从本地路径
/root/rke2-artifacts/sha256sum-amd64.txt
获取校验和文件。- 从本地路径
/root/rke2-artifacts/rke2-images.linux-amd64.tar.zst
获取 airgap 镜像 tarball。- 从本地路径
/root/rke2-artifacts/rke2.linux-amd64.tar.gz
获取 RKE2 tarball。- 验证 airgap tarball。
- 将 airgap tarball 安装到
/var/lib/rancher/rke2/agent/images
。2、解压我们放入到 /var/lib/rancher/rke2/agent/images/的镜像。
9、访问集群
1、环境变量搞起来。
rke2-server:/ # cat /etc/profile.local
export PATH=$PATH:/var/lib/rancher/rke2/bin/
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
很顺利能访问api-server.
2、同时我们也测试一下Mysql的访问与k8s联动。
k8s侧创建一个namespace:
Mysql侧:
SELECT * FROM kine WHERE name LIKE '%namespace%';
可以看到是OK的。
*即k8s侧创建一个namespace,mysql等数据库能看到。说明验证了k8s侧是使用的mysql的数据库。
9、加入worker节点。
1、我们部署好了server节点后,先检查健康状态。
2、健康状态ok后,我们将安装的部署包放入到worker节点上进行安装。
将镜像文件到上传指定目录和Server节点一样。
3、worker节点配置文件。
mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml
server: https://172.30.0.214:9345
token: K10d976665f6xxxxx31409743b14396b7bbec894::server:SECRET
*获取节点server节点的token.
在server节点的 /var/lib/rancher/rke2/server/token目录下获取:
cat /var/lib/rancher/rke2/server/token
4、信任server节点的CA证书
获取server- CA证书-ls /var/lib/rancher/rke2/server/tls/server-ca.crt
/var/lib/rancher/rke2/server/tls/server-ca.crt
worker节点信任证书
cp ./server-ca.crt /usr/share/pki/trust/anchors/
update-ca-certificates
测试证书访问:
4、加入工作节点
*我们的安装脚本里面有server和worker节点的安装脚本都有。
他只会看配置文件以及你启动的命令来确定你是server节点还是worker节点。
chmod +x install.sh
INSTALL_RKE2_ARTIFACT_PATH=/root/rke2-artifacts sh install.sh
启用tarball.
你正在使用
install.sh
脚本安装 RKE2,并且指定了本地的安装包路径。以下是安装过程中的一些关键步骤和信息:
设置本地安装包路径 : 你已经设置了
INSTALL_RKE2_ARTIFACT_PATH
环境变量,指向本地的安装包路径/root/rke2-artifacts
。安装脚本输出: 安装脚本正在执行以下操作:
- 从本地路径
/root/rke2-artifacts/sha256sum-amd64.txt
获取校验和文件。- 从本地路径
/root/rke2-artifacts/rke2-images.linux-amd64.tar.zst
获取 airgap 镜像 tarball。- 从本地路径
/root/rke2-artifacts/rke2.linux-amd64.tar.gz
获取 RKE2 tarball。- 验证 airgap tarball。
- 将 airgap tarball 安装到
/var/lib/rancher/rke2/agent/images
。- 验证 RKE2 tarball。
- 将 RKE2 tarball 解压到 local。
启动worker节点。
systemctl start rke2-agent.service
systemctl enable rke2-agent.service
*单独开一个终端查看部署过程。
journalctl -u rke2-agent -f
到这里基本就ok了。
*在server节点验证节点加入。
kubectl get nodes
总结
1、这边文章重点展示了离线部署RKE2与使用外部的Mysql来存储k8s的键值存储。
2、以及离线部署rke2集群-server节点与worker节点。