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 编写函数和存储过程了。作为最…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...