RKE快速搭建离线k8s集群并用rancher管理界面

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
本文记录使用RKE快速搭建一套k8s集群过程,使用的rancher老版本2.5.7(当前最新版为2.7)。适用于初学测试、测试环境及定制化要求不高的生产环境。
关联文章:
1. k8s集群搭建前的服务器初始化,见文章《附1:k8s服务器初始化》
2. rke搭建的k8s集群新增节点,见文章《附2:rke安装的k8s集群新增主机》
1. 前提
1.1 服务器规划
| IP | hostname | 角色 | 部署内容 |
| 10.99.68.62 | k8s-master01 | master-1 | rke/kubectl/helm,执行k8s安装命令节点 |
| 10.99.68.63 | k8s-master02 | master-2 | |
| 10.99.68.64 | k8s-master03 | master-3 | |
| 10.99.68.65 | k8s-node01 | worker-1 | |
| 10.99.68.66 | k8s-node02 | worker-2 | |
| 10.99.68.67 | k8s-node03 | worker-3 | 测试rke部署的k8s集群添加新节点 |
| 10.99.68.68 | rancherUI | rancherUI | rancher2.5.7 |
1.2 服务器初始化
可参考今日文章组附件《附1:k8s服务器初始化》
1.3 镜像导入
1.3.1安装自己的私有docker仓库,如harbor等
1.3.2 导入镜像
在https://github.com/rancher/rancher/releases页面找到需要的版本(不要下载标记为rc或Pre-release的版本,可能有坑,尤其在生产环境下是不稳定的),在一台能通公网的服务器执行下面三个文件下载镜像并导入私有仓库:
| Release 文件 | 描述 | |
| rancher-images.txt |
| |
| rancher-save-images.sh | 这个脚本会从 DockerHub 中拉取在文件rancher-images.txt中描述的所有镜像,并将它们保存为文件rancher-images.tar.gz。 | |
| rancher-load-images.sh | 这个脚本会载入文件rancher-images.tar.gz中的镜像,并将它们推送到您自己的私有镜像库。 |
2. K8S集群安装
2.1 基础环境
2.1.1配置hosts解析
在三台master服务器的/etc/hosts文件添加以下三行,配置三台服务器的hosts解析:
10.99.68.62 k8s-master01
10.99.68.63 k8s-master02
10.99.68.64 k8s-master03
2.1.2 三台服务器之间做ssh信任
在3个节点上,通过sre用户做免秘钥认证:
# su sre
$ ssh-keygen -t rsa -b 4096
$ ssh-copy-id sre@10.99.68.62
$ ssh-copy-id 10.99.68.63
$ ssh-copy-id 10.99.68.64
2.1.3 检查三台服务器之间时间是否同步
如不同步,先同步三台服务器的时间。
2.2 k8s集群基础命令安装(sre用户下执行)
2.2.1 安装rke、kubectl、helm
1)安装rke
将1.2.8_rke_linux-amd64文件上传到服务器,并执行以下命令:
$ mv 1.2.8_rke_linux-amd64 rke #给rke文件修改名字
$ chmod +x rke && sudo mv rke /usr/bin/ #添加执行权限并放入/usr/bin/目录下
$ rke --version #在sre用户测试运行rke命令
2)安装kubectl
将1.21.2-kubectl文件上传到服务器,并执行以下命令:
$ mv 1.21.2-kubectl kubectl #给kubectl修改名字
$ chmod +x kubectl && sudo mv kubectl /usr/bin/ #给kubectl添加执行权限并移动到/usr/bin目录下
$ sudo yum install bash-completion -y #CentOS Linux上,可能需要安装默认情况下未安装的bash-completion软件包
$ echo "source <(kubectl completion bash)" >> ~/.bashrc #运行source <(kubectl completion bash)可将kubectl自动补全添加到当前shell,要使kubectl自动补全命令自动加载
$ source ~/.bashrc #source让上一步骤修改生效
$ kubectl version #测试sre用户能正常使用kubectl命令
3)安装helm
将安装包helm-v3.6.1-linux-amd64.tar.gz上传到服务器,并执行以下命令:
$ tar xf helm-v3.6.1-linux-amd64.tar.gz
$ sudo mv linux-amd64/helm /usr/bin/
$ helm version #测试sre用户能正常使用helm
2.2.2 rke安装k8s集群
编辑rke创建集群的文件k8s-cluster.yml
nodes:- address: 10.99.68.62 internal_address: 10.99.68.62 user: srerole: [controlplane, etcd]hostname_override: k8s-master01ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.63internal_address: 10.99.68.63user: srerole: [controlplane, etcd]hostname_override: k8s-master02ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.64internal_address: 10.99.68.64user: srerole: [controlplane, etcd]hostname_override: k8s-master03ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.65internal_address: 10.99.68.65user: srerole: [worker]hostname_override: k8s-node01ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.66internal_address: 10.99.68.66user: srerole: [worker]hostname_override: k8s-node02ssh_key_path: /home/sre/.ssh/id_rsa
private_registries:- url: harbor.test.com:8000 #私人harbor仓库地址is_default: true
services:etcd:backup_config:enabled: trueinterval_hours: 6retention: 60
配置文件说明:
参数-含义
address:公共域名或IP地址
user:可以运行docker命令的普通用户(不能用root用户)
role:分配给节点的Kubernetes角色列表
internal_addres:内部集群通信的私有域名或IP地址
hostname_overrid:k8s节点hostname
ssh_key_pat:指定ssh免秘钥的路径
private_registrie:指定私有harbor仓库的地址,如果可以通外网的服务器就可以不配置
etcd:开启了etcd的备份机制,每隔6小时备份一次,保存60天数据
文件编辑好后,在k8s-master01执行以下命令启动k8s集群:
rke up --config k8s-cluster.yml
成功安装完成后,日志结尾如下图:

在执行完成后,当前目录下会创建kube_config_k8s-cluster.yml和k8s-cluster.rkestate两个文件:

当排除故障、升级群集时需要用到以下文件,请将其副本保存在一个安全的位置!
k8s-cluster.yml:RKE部署k8s集群配置文件
kube_config_k8s-cluster.yml:群集的Kubeconfig文件,此文件包含完全访问群集的凭据。
k8s-cluster.rkestate:Kubernetes群集状态文件,此文件包含完全访问群集的凭据。
现在不能直接执行kubectl get nodes 查看集群,会报错:
[sre@k8s-master01 rancher-cluster]$ kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[sre@k8s-master01 rancher-cluster]$
sre用户下配置kubectl命令执行:
$ mkdir ~/.kube
$ cp kube_config_k8s-cluster.yml ~/.kube
$ cp ~/.kube/kube_config_k8s-cluster.yml ~/.kube/config#可以把k8s-cluster.yml和 k8s-cluster.rkestate也备份一份过来,以免丢失
$ cp k8s-cluster.yml ~/.kube/
$ cp k8s-cluster.rkestate ~/.kube/
配置完后,就可以用kubectl get node命令直接查看集群了:
[sre@k8s-master01 .kube]$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready controlplane,etcd 41m v1.20.6
k8s-master02 Ready controlplane,etcd 31m v1.20.6
k8s-master03 Ready controlplane,etcd 31m v1.20.6
k8s-node01 Ready worker 20m v1.20.6
k8s-node02 Ready worker 20m v1.20.6
[sre@k8s-master01 .kube]$
如果需要root用户执行kubectl,切换到root用户,执行以下命令:
mkdir ~/.kube
cp /home/sre/.kube/config ./
3. Rancher管理k8s集群
rancher管理k8s集群,有2种方法:
一是将ks集群导入rancher管理界面;
二是在k8s集群上起动rancher应用,直接接入管理集群。
不管是rke安装的,还是别的方式如kubeadm安装的k8s,都适用。
3.1 k8s集群导入rancher
3.1.1 部署一个rancher应用
在10.99.68.68服务器部署rancher,此处使用的老版本2.5.7版本
[root@rancherUI App]# cat rancher.sh
#!/bin/bash
docker run -d --privileged --restart=unless-stopped -p 8088:80 -p 8443:443 -e CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.test.com:8000 -e CATTLE_SYSTEM_CATALOG=bundled -v /home/rancher/rancher:/var/lib/rancher -v /home/rancher/auditlog:/var/log/auditlog --name rancher-server harbor.test.com:8000/rancher/rancher:v2.5.7
[root@rancherUI App]#
3.1.2 将k8s导入rancher
1)在“全局”界面,添加集群:

2)选择导入集群:

3)填写导入的集群名:

4)点击“创建”,就会生成如下命令:

命令:
curl --insecure -sfL https://10.99.68.68:8443/v3/import/tzzhn4t4dkmnhlvzz8jm7gmx5xh5ddr8gvsgpljq78rsb8xhlc4znt_c-8cwtr.yaml | kubectl apply -f -
将以命令在k8s-master01节点sre用户下执行:
[sre@k8s-master01 .kube]$ curl --insecure -sfL https://10.247.149.18:8443/v3/import/tzzhn4t4dkmnhlvzz8jm7gmx5xh5ddr8gvsgpljq78rsb8xhlc4znt_c-8cwtr.yaml | kubectl apply -f -
命令执行完毕后,rancher界面能看到导入成功:

查看主机,5台节点均导入成功:

3.2 在k8s上安装rancher
3.2.1 安装cert-manager
1)将离线包cert-managerv1.7.1(下载链接:https://artifacthub.io/packages/helm/cert-manager/cert-manager/1.7.1)上传到服务器k8s-master01解压;
2)下载离线CRD资源yaml文件:https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml:

3)找一台通公网的服务器下载以下镜像并修改tag,上传到自己私有仓库:
#下载镜像
docker pull quay.io/jetstack/cert-manager-controller:v1.7.1
docker pull quay.io/jetstack/cert-manager-webhook:v1.7.1
docker pull quay.io/jetstack/cert-manager-cainjector:v1.7.1
docker pull quay.io/jetstack/cert-manager-ctl:v1.7.1
#修改tag
docker tag quay.io/jetstack/cert-manager-controller:v1.7.1 harbor.test.com:8000/rancher/cert-manager-controller:v1.7.1
docker tag quay.io/jetstack/cert-manager-webhook:v1.7.1 harbor.test.com:8000/rancher/cert-manager-webhook:v1.7.1
docker tag quay.io/jetstack/cert-manager-cainjector:v1.7.1 harbor.test.com:8000/rancher/cert-manager-cainjector:v1.7.1
docker tag quay.io/jetstack/cert-manager-ctl:v1.7.1 harbor.test.com:8000/rancher/cert-manager-ctl:v1.7.1
#上传镜像
docker push harbor.test.com:8000/rancher/cert-manager-controller:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-webhook:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-cainjector:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-ctl:v1.7.1
4)批量修改cert-manager里面的image地址,将“quay.io/jetstack/”全部改为自己私有仓库地址“ harbor.test.com:8000/rancher/”。
5)执行命令安装cert-manager
cd cert-managerv1.7.1
kubectl apply -f cert-manager.crds.yaml #离线升级CRD资源
#正式安装cert-manager
helm install cert-manager ./cert-manager-v1.7.1 \--namespace cert-manager \--create-namespace \--version v1.7.1
6)查看pod
[root@k8s-master01 ~]# kubectl get pod -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5698c7c8d7-8w68r 1/1 Running 0 16m
cert-manager-cainjector-57bf5766bd-9ml2x 1/1 Running 0 16m
cert-manager-webhook-7bd6cfc99c-hbz8c 1/1 Running 0 16m
[root@k8s-master01 ~]#
3.2.2 安装rancher
1)下载rancher2.5.7离线helm安装包
安装命令:
helm install rancher ./rancher-v2.5.7 \--namespace cattle-system \--create-namespace \--set hostname=rancher.test.com \ #rancher不要以local域名命名--set replicas=1 \ #指定启动几个rancher pod,可以启动多个--version 2.5.7
2)查看ingress:

3)windows电脑本地绑定hosts:
10.9.68.65 rancher.test.com #在ingress的SDDRESS中任意绑定一个IP
4)浏览器访问:https://rancher.test.com,设置admin用户的密码后,跳转到URL,这里默认就是使用的上一步骤设置的域名,默认即可。

5)进入rancher,就能看到集群了,这里的集群名就是local:

(完)
相关文章:
RKE快速搭建离线k8s集群并用rancher管理界面
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 本文记录使用RKE快速搭建一套k8s集群过程,使用的rancher老版本2.5.7(当前最新版为2.7)。适用…...
代码随想录算法训练营第十四天|● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代
仅做学习笔记,详细请访问代码随想录 ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代 单层递归的逻辑就是按照中左右的顺序来处理的,这样二叉树的前序遍历,基本就写完了,再看一下完整代码: 前序遍历: …...
❤css实用
❤ css实用 渐变色边框(Gradient borders方法的汇总 5种) 给 border 设置渐变色是很常见的效果,实现这个效果有很多思路 1、使用 border-image 使用 css 的 border-image 属性给 border 绘制复杂图样 与 background-image 类似,我…...
web系统架构基于springCloud的各技术栈
博主目前开发的web系统架构是基于springCloud的一套微服务架构。 使用的技术栈:springbootmysqlclickhousepostgresqlredisrocketMqosseurekabase-gatewayapollodockernginxvue的一套web架构。 一、springboot3.0 特性:Spring Boot 3.0提供了许多新特性…...
【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )
目录 关于堆的一些知识的回顾 数据结构:堆的特点 "down" 和 "up":维护堆的性质 down up 数据结构:堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识&…...
el-select选项过多导致页面卡顿,路由跳转卡顿
问题:el-select数据量太大,导致渲染过慢,或造成页面卡顿甚至于卡死 卡顿原因:DOM中数据过多,超过内存限制 解决方法: 1.使用Virtualized Select 虚拟化选择器,页面就不卡了 2.el-select做分…...
信息流广告参数回传工具怎么做联调
信息流广告在抖音等平台上越来越受到广告主的青睐,它能够在用户浏览内容的同时,以自然的方式展示广告,提高曝光率和点击率。然而,为了更好地评估广告效果,需要进行参数回传联调。本文将介绍一种实用的工具——数灵通外…...
matlab appdesigner系列-常用18-表格
表格,常用来导入外部表格数据 示例: 导入外界excel数据:data.xlsx 姓名年龄城市王一18长沙王二21上海王三56武汉王四47北京王五88成都王六23长春 操作步骤如下: 1)将表格拖拽到画布上 2)对app1右键进行…...
密码学的100个基本概念
密码学作为信息安全的基础,极为重要,本文分为上下两部分,总计10个章节,回顾了密码学的100个基本概念,供小伙伴们学习参考。本文将先介绍前五个章节的内容。 一、密码学历史 二、密码学基础 三、分组密码 四、序列密码 五、哈希…...
Python中的进制转换——bin/oct/hex函数与int函数
简介 进制转换可能是一个工作学习中的常见小任务,手写相关函数显然很麻烦。 Python有相关内置函数一般能满足我们的需求。bin()、oct()、hex()将十进制转换为常用的二、八、十六进制,而 int()函数可指定第二个参数从而将其它进制转换为十进制。或许后者…...
RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践
不用放大了, 我在包里找到张不小的…… 以太网HMI线下培训-环境准备 这是社群的文档:【腾讯文档】以太网线下培训(HMI-Board) https://docs.qq.com/doc/DY0FIWFVuTEpORlNn 先介绍周六的培训是啥,然后再介绍一下要准…...
力扣刷题第十天 美丽塔 一
给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 < heights[i] < maxHeights[i]heights 是一个 山脉…...
c# ADODB.Recordset实例调用Fields报错
代码: using System; using System.CodeDom; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ADODB;namespace ConsoleApp1 {internal class Programre{static ADODB.Recordset recordsetInstance…...
windows和linux下SHA1,MD5,SHA256校验办法
今天更新android studio到Android Studio Hedgehog | 2023.1.1时,发现提示本机安装的git版本太老,于是从git官网下载最新的git。 git下载地址: https://git-scm.com/ 从官网点击下载最新windows版本会跳转到github仓库来下载发布的git&…...
高新技术企业申报需要具备哪些条件?
(一)企业申请认定时须注册成立一年以上; (二)企业通过自主研发、受让、受赠、并购等方式,获得对其主要产品(服务)在技术上发挥核心支持作用的知识产权的所有权; &#…...
测试不拘一格——掌握Pytest插件pytest-random-order
在测试领域,测试用例的执行顺序往往是一个重要的考虑因素。Pytest插件 pytest-random-order 提供了一种有趣且灵活的方式,让你的测试用例能够以随机顺序执行。本文将深入介绍 pytest-random-order 插件的基本用法和实际案例,助你摆脱固定的测试顺序,让测试更具变化和全面性…...
DophineScheduler通俗版
1.DophineScheduler的架构 ZooKeeper: AlertServer: UI: ApiServer: 一个租户下可以有多个用户;一个用户可以有多个项目一个项目可以有多个工作流定义,每个工作流定义只属于一个项目;一个租户可…...
企业如何稳步开启SASE实施之路
在上一篇题为《企业为什么选择SASE?香港电讯专家给你答案!》的文章中,我们从SD-WAN的安全策略和能力、市场趋势的推动及SASE的四大特性分析了企业选择采用安全访问服务边缘(SASE)的原因。基于SASE的各项优势࿰…...
【Oracle】收集Oracle数据库内存相关的信息
文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …...
MySQL也开始支持JavaScript了
2023 年 12 月 16 日,Oracle 公司在一篇名为 《Introducing JavaScript support in MySQL》的文章中宣布 MySQL 数据库服务器将开始支持 JavaScript 语言。 这个举措标志着继PostgreSQL之后, MySQL 也支持使用 JavaScript 编写函数和存储过程了。作为最…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
