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

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


本文记录使用RKE快速搭建一套k8s集群过程,使用的rancher老版本2.5.7(当前最新版为2.7)。适用于初学测试、测试环境及定制化要求不高的生产环境。

关联文章:

1. k8s集群搭建前的服务器初始化,见文章《附1:k8s服务器初始化》

2. rke搭建的k8s集群新增节点,见文章《附2:rke安装的k8s集群新增主机》

1. 前提

1.1 服务器规划

IPhostname角色部署内容
10.99.68.62k8s-master01master-1rke/kubectl/helm,执行k8s安装命令节点
10.99.68.63k8s-master02master-2
10.99.68.64k8s-master03master-3
10.99.68.65k8s-node01worker-1
10.99.68.66k8s-node02worker-2
10.99.68.67k8s-node03worker-3测试rke部署的k8s集群添加新节点
10.99.68.68rancherUIrancherUIrancher2.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、创建集群和运行 Rancher 工具所需的镜像列表。
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.ymlk8s-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:

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5分钟做自己的微信红包封面

文章目录 怎么制作自己的红包封面&#xff1f;开通红包封面的要求如下&#xff1a;收费情况制作具体网站&#xff1a;https://chatapi.onechat.fun/register?affYoU6 提交审核logo封面、挂件、气泡证明材料 发放红包封面其他 怎么制作自己的红包封面&#xff1f; 开通红包封面…

【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )

目录 关于堆的一些知识的回顾 数据结构&#xff1a;堆的特点 "down" 和 "up"&#xff1a;维护堆的性质 down up 数据结构&#xff1a;堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识&…

【开源】基于JAVA+Vue+SpringBoot的教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

一文读懂量化交易中的算法交易使用!

高频交易策略利用计算机&#xff0c;在人类交易者能够处理他们观察到的信息之前&#xff0c;根据以电子方式接收到的信息做出精心的决定来启动订单。 为通过挂单被动成交来追求更好的交易均价&#xff0c;随着人工智能&#xff0c;机器学习等技术的引入&#xff0c;逐渐演变为…

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL,设置 jobname

1、环境准备 文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/ 仓库&#xff1a;https://github.com/apache/flink 下载&#xff1a;https://flink.apache.org/zh/downloads/ 下载指定版本&#xff1a;https://archive.apache.org/dist/flink…

Git的管理操作

目录 前言 认识工作区、暂存区、版本库 小结&#xff1a; 使用场景--1&#xff1a; git log&#xff1a; 查看.git文件&#xff1a; 使用场景--2&#xff1a; git status&#xff1a; git diff&#xff1a; 进行提交&#xff1a; 总结&#xff1a; 版本回退 退…

Python函数调用的9大方法详解

概要 在Python中&#xff0c;函数是一种非常重要的编程概念&#xff0c;它们使得代码模块化、可重用&#xff0c;并且能够提高代码的可读性。本文将深入探讨Python函数调用的9种方法&#xff0c;包括普通函数、匿名函数、递归函数、高阶函数等&#xff0c;以及它们的应用示例。…

python内置函数有哪些?整理到了7大分类48个函数,都是工作中常用的函数

python内置函数 一、入门函数 1.input() 功能&#xff1a; 接受标准输入&#xff0c;返回字符串类型 语法格式&#xff1a; input([提示信息])实例&#xff1a; # input 函数介绍text input("请输入信息:") print("收到的数据是:%s" % (text))#输出…

k8s---pod的水平自动伸缩HPA

HPA&#xff1a;Horizontal Pod Autoscaling是pod的水平自动伸缩。是k8s自带的模块 pod占用CPU的比率到达一定的阈值会触发伸缩机制。 replication controller&#xff1a;副本控制器。控制pod的副本数 deployment controller&#xff1a;节点控制器。部署pod hpa控制副本的…

怎么他们都有开源项目经历|手把手教你参与开源

一、前言 大家好&#xff0c;这里是白泽。有一些同学提问&#xff0c;希望在自己的简历上增加一些有含金量的项目经历&#xff0c;最好能够去参与一些开源项目的开发&#xff0c;但由于对一个庞大的开源项目缺乏认知&#xff0c;难以着手。同时也担心自己能力不足&#xff0c;…

亚信安慧AntDB:AntDB-M元数据锁之锁的获取(三)

5 锁的获取 5.1 锁的强弱 当线程已经持有的锁比新申请的锁更强时&#xff0c;认为已经持有了锁&#xff0c;无需再对申请锁类型加锁。锁的强弱指持有的锁与其他锁的不兼容集合大小&#xff0c;集合相同锁相同&#xff0c;集合更大锁更强&#xff0c;否则无强弱关系。通过锁的…

php比较运算,强相等(===)弱相等(==)表

弱相等&#xff08;&#xff09; 符号为&#xff1a; 规则为&#xff1a;只比较值&#xff0c;不比较类型&#xff0c;只要值对就为true 样例&#xff1a;比较整型123和字符串"123"&#xff0c;运行结果给出了true 弱相等表&#xff1a;* 代表在 PHP 8.0.0 之前为…

leetcode 刷题2

二分查找的绝妙运用&#xff1a; 看到有序数列&#xff0c;算法复杂度 0033. 搜索旋转排序数组 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left < right) {int mid left (right - …

SQL提示与索引终章

✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL-进阶篇 &#x1f4dc; 感谢大家的关注&#xff01; ❤️ 可以关注黑马IT&#xff0c;进行学习 目录 &#x1f680;SQL提示 &#x1f680;覆盖索引 &#x1f680;前缀索引 &…

.NET国产化改造探索(六)、银河麒麟操作系统中安装多个.NET版本

随着时代的发展以及近年来信创工作和…废话就不多说了&#xff0c;这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来&#xff0c;看操作。 上一篇文章介绍了如何在银河麒麟操作系统上&#xff0c;使用Nginx.NET程序实现自启动。本文介绍下如何在一个环境中&#xff0c;…

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

解决 ssh: connect to host github.com port 22: Connection timed out

问题 今天使用git克隆github上的代码时&#xff0c;一直报错 原以为是公钥过期了&#xff0c;就尝试修改配置公钥&#xff0c;但是尝试了几次都不行&#xff0c;最终在博客上找到了解决方案&#xff0c;在次记录一下&#xff0c;以备不时之需 解决ssh-connect-to-host-github…

前端文件上传(文件上传,分片上传,断点续传)

普通文件上传 思路&#xff1a; 首先获取用户选择的文件对象&#xff0c;并将其添加到一个 FormData 对象中。然后&#xff0c;使用 axios 的 post 方法将 FormData 对象发送到服务器。在 then 和 catch 中&#xff0c;我们分别处理上传成功和失败的情况&#xff0c;并输出相应…

Java零基础学习19:集合

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、集合和数组的对比 数组和集合很相似&#xff0c;但集合只能存储引用数据类…

Ask for Power Apps 消失了?

Ask for Power Apps 消失了? 背景替换定义一个接收数组的参数1.我们新建一个Text接收参数取名为**Arrlist**.定义一个参数类型是Array 背景 今天才发现&#xff0c;我在flow中想向power apps索要一个参数&#xff0c;但是之前的Ask for Power Apps 这个触发器怎么也找不到了。…