一文学会用RKE部署高可用Kubernetes集群
k8s架构图
RKE简介
RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。
K8S原生安装需要的先决条件较多,比如说需要预安装kubeadm,kubectl,配置网络等一系列繁琐的工作。而使用RKE安装k8s,基本上只要docker版本是当前RKE版本支持的即可。
Rancher简介
Rancher 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。
版本选择
软件 | 版本 | 源码 | 版本发布时间 |
---|---|---|---|
RKE | 1.3.12 | GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distribution that runs entirely within containers. | 2022-06-16,1.3.12 released |
k8s | 1.23.7 | GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management | 2022-05-26,1.23.7 released |
helm | v3.9.2 | Releases · helm/helm · GitHub | |
rancher | 2.6.6 | GitHub - rancher/rancher: Complete container management platform |
参考:
Rancher文档 | K8S文档 | Rancher | Rancher文档
环境初始化
hostname设置
sudo hostnamectl set-hostname ubuntu24 查看 hostnamectl 修改后需要将/etc/hosts文件更新 ubuntu24 127.0.0.1
修改/etc/hosts文件,所有节点
192.168.43.23 ubuntu23
192.168.43.24 ubuntu24
192.168.43.26 ubuntu26
192.168.43.27 ubuntu27
192.168.43.28 ubuntu28
192.168.43.29 ubuntu29
192.168.43.30 ubuntu30
192.168.43.31 ubuntu31
192.168.43.24 k8s-test.com
禁用swap
临时禁用swap
sudo swapoff -a
查看swap是否关闭
free -h
永久禁用
sudo sed -ri 's/.*swap.*/#&/' /etc/fstab手动把有swap相关配置的行注释也是可以,ubuntu18的话其实就一行 #UUID=07389530-1861-4a4b-b4fc-ad03d69f59f4 noneswapsw0 0
ssh免密互登录
确保所有主机ssh免密可互通,保证rke节点可以免密码登录其它节点即可。
ssh-keygen ssh-copy-id kangming@192.168.43.28
内核参数调整
确保以下参数值为1
net.bridge.bridge-nf-call-iptables=1
可以通过以下指令查看
#查看所有内核参数 sudo sysctl -a#过滤 sudo sysctl -a|grep net.bridge.bridge-nf-call-iptables
如果不是1,执行下面的设置指令
sysctl -w net.bridge.bridge-nf-call-iptables=1
关闭防火墙
sudo ufw disable
资源规划
IP | 配置 | 角色/作用 |
---|---|---|
192.168.43.24 | 1核/2G | nginx负载 |
192.168.43.26 | 1核/2G | kubernetes node1 |
192.168.43.27 | 1核/2G | kubernetes node2 |
192.168.43.28 | 1核/2G | kubernetes node3 |
192.168.43.29 | 1核/2G | rancher-agent |
192.168.43.30 | 1核/2G | rancher-agent |
192.168.43.31 | 1核/2G | rancher-agent |
安装RKE1.3.12&高可用k8s集群
RKE在26 nginx负载均衡节点进行安装。
下载最新稳定版本RKE(Rancher Kubernetes Engine),下载地址:Release Release v1.3.12 · rancher/rke · GitHub
下载
https://github.com/rancher/rke/releases/download/v1.3.12/rke_linux-amd64
注意每个版本的RKE对k8s版本的支持都是有限的,当前版本(V1.3.12)支持的k8s版本列表如下:
Kubernetes version |
---|
v1.23.7-rancher1-1 (Default) |
v1.22.10-rancher1-1 |
v1.21.13-rancher1-1 |
v1.20.15-rancher1-4 |
v1.19.16-rancher1-6 |
v1.18.20-rancher1-3 |
rancher也使用当前最新版本:Release Release v2.6.6 · rancher/rancher · GitHub
安装
sudo mv rke_linux-amd64 /usr/local/bin/rke && chmod +x /usr/local/bin/rke
查看 rke版本
rke --version
cluster.yml
nodes:- address: 192.168.43.26internal_address: 192.168.43.26user: kangmingrole: [controlplane,worker,etcd]- address: 192.168.43.27internal_address: 192.168.43.27user: kangmingrole: [controlplane,worker,etcd]- address: 192.168.43.28internal_address: 192.168.43.28user: kangmingrole: [controlplane,worker,etcd]
创建一个名为 cluster.yml 的 Kubernetes 集群配置文件。在后续步骤中,当使用 RKE 命令设置集群时,它将使用此文件在节点上安装 Kubernetes。
RKE适配了高可用集群,您可以在 cluster.yml 文件中配置多个 controlplane 节点。RKE 会把 master 节点的组件部署在所有被列为 controlplane 的节点上,同时把 kubelets 的默认连接地址配置为 127.0.0.1:6443 。这个地址是nginx-proxy请求所有 master 节点的地址。创建高可用集群需要指定两个或更多的节点作为 controlplane 。 RKE使用集群配置文件 cluster.yml 规划集群中的节点,例如集群中应该包含哪些节点,如何部署 Kubernetes。您可以通过该文件修改很多集群配置选项。
如果您的节点具有公共和内部地址,建议设置 internal_address: 这样 Kubernetes 会将其用于集群内通信。RKE需要通过 SSH 连接到每个节点,并且它将在默认位置 ~/.ssh/id_rsa 中寻找私钥。如果您的默认私钥与节点的私钥不在同一个位置,则还需要为该节点配置 ssh_key_path 选项 根据官网列举了几个RKE节点选项:
选项 | 必填 | 描述 |
---|---|---|
address | 是 | 公用 DNS 或 IP 地址 |
user | 是 | 可以运行 docker 命令的用户 |
role | 是 | 分配给节点的 Kubernetes 角色列表 |
internal_address | 是 | 内部集群流量的专用 DNS 或 IP 地址 |
ssh_key_path | 否 | 用于对节点进行身份验证的 SSH 私钥的路径(默认为~/.ssh/id_rsa) |
cluster_name | 否 | 集群名称,默认集群名称:local |
ignore_docker_version | 否 | 在运行 RKE 前是否执行 Docker 版本检测,可选值为true和false,默认值为false |
当前rke版本需要的docker镜像如下,可保存离线镜像备用。所有需要的镜像可以查看启动rke目录下的cluster.rkestate文件。
方便起见,将当前rke版本所有镜像保存到一个离线镜像中,然后导入到需要的节点中。
docker save -o rke1.3.2-rancherk8s1.23.7.tar rancher/mirrored-coreos-etcd:v3.5.3 \
rancher/rke-tools:v0.1.80 \
rancher/mirrored-k8s-dns-kube-dns:1.21.1 \
rancher/mirrored-k8s-dns-dnsmasq-nanny:1.21.1 \
rancher/mirrored-k8s-dns-sidecar:1.21.1 \
rancher/mirrored-cluster-proportional-autoscaler:1.8.5 \
rancher/mirrored-coredns-coredns:1.9.0 \
rancher/mirrored-k8s-dns-node-cache:1.21.1 \
rancher/hyperkube:v1.23.7-rancher1 \
rancher/mirrored-coreos-flannel:v0.15.1 \
rancher/flannel-cni:v0.3.0-rancher6 \
rancher/mirrored-calico-node:v3.22.0 \
rancher/mirrored-calico-cni:v3.22.0 \
rancher/mirrored-calico-kube-controllers:v3.22.0 \
rancher/mirrored-calico-ctl:v3.22.0 \
rancher/mirrored-calico-pod2daemon-flexvol:v3.22.0 \
rancher/mirrored-flannelcni-flannel:v0.17.0 \
rancher/mirrored-calico-pod2daemon-flexvol:v3.22.0 \
weaveworks/weave-kube:2.8.1 \
weaveworks/weave-npc:2.8.1 \
rancher/mirrored-pause:3.6 \
rancher/nginx-ingress-controller:nginx-1.2.1-rancher1 \
rancher/mirrored-nginx-ingress-controller-defaultbackend:1.5-rancher1 \
rancher/mirrored-ingress-nginx-kube-webhook-certgen:v1.1.1 \
rancher/mirrored-metrics-server:v0.6.1 \
noiro/cnideploy:5.1.1.0.1ae238a \
noiro/aci-containers-host:5.1.1.0.1ae238a \
noiro/opflex:5.1.1.0.1ae238a \
noiro/openvswitch:5.1.1.0.1ae238a \
noiro/aci-containers-controller:5.1.1.0.1ae238a \
noiro/gbp-server:5.1.1.0.1ae238a
相关节点导入镜像后执行
执行RKE
rke up
这条命令默认cluster.yml
已经保存在了您运行命令所处的路径下.如果配置文件起了其它名字,则像如下这样启动
rke up --config ./rancher-cluster.yml
上述命令可能出现如下错误,重新执行一下rke up即可。
FATA[0198] Failed to get job complete status for job rke-coredns-addon-deploy-job in namespace kube-system
集群清理,需要清除集群时,执行
rke remove#删除所有容器上面的rke remove不会清理所有的节点容器,如有需要可执行下面的指令把所有容器清理,会删除所有容器,删除请谨慎 docker rm -f $(docker ps -aq)
kubectl安装&测试K8S
把kube_config_cluster.yml文件备份,然后放到所有工作节点中,然后配置环境变量。
配置环境变量
vim .bashrc export KUBECONFIG=/home/kangming/rancher/kube_config_cluster.yml source .bashrc
设置kube_config_cluster.yml文件的权限为当前用户读写
sudo chmod 600 kube_config_cluster.yml
在几个工作节点中安装kubectl
通过本地浏览器下载下面的文件,然后放到所有工作节点中
https://packages.cloud.google.com/apt/doc/apt-key.gpg
上传到服务器后执行
sudo apt-key add /home/kangming/apt-key.gpg
添加源,然后更新apt,下载kebectl
sudo vi /etc/apt/sources.list deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main sudo apt-get update
下载 与查看
sudo apt-get install -y kubectl kubectl get nodes
打印如下(所有节点都ready即可)
kangming@ubuntu26:~$ kubectl get nodes
NAMESTATUS ROLESAGE VERSION
192.168.43.26 Readycontrolplane,etcd,worker 71m v1.23.7
192.168.43.27 Readycontrolplane,etcd,worker 71m v1.23.7
192.168.43.28 Readycontrolplane,etcd,worker 71m v1.23.7
检查所有需要启动的pod,都处于running或 completed状态。
kubectl get pods --all-namespacesNAMESPACE NAMEREADY STATUSRESTARTS AGE
ingress-nginx nginx-ingress-controller-tnsn41/1 Running 030s
ingress-nginx nginx-ingress-controller-tw2ht1/1 Running 030s
ingress-nginx nginx-ingress-controller-v874b1/1 Running 030s
kube-system canal-jp4hz 3/3 Running 030s
kube-system canal-z2hg8 3/3 Running 030s
kube-system canal-z6kpw 3/3 Running 030s
kube-system kube-dns-7588d5b5f5-sf4vh 3/3 Running 030s
kube-system kube-dns-autoscaler-5db9bbb766-jz2k61/1 Running 030s
kube-system metrics-server-97bc649d5-4rl2q1/1 Running 030s
kube-system rke-ingress-controller-deploy-job-bhzgm 0/1 Completed 030s
kube-system rke-kubedns-addon-deploy-job-gl7t40/1 Completed 030s
kube-system rke-metrics-addon-deploy-job-7ljkc0/1 Completed 030s
kube-system rke-network-plugin-deploy-job-6pbgj 0/1 Completed 030s
相关文章:

一文学会用RKE部署高可用Kubernetes集群
k8s架构图 RKE简介 RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。 K8S原生安装需要的先…...

数据加密的常见方法
数据加密是一门历史悠久的技术,它通过加密算法和加密密钥将明文(原始的或未加密的数据)转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。这一技术的核心是密码学,它利用密码技术对信息进行加密,实现信息隐蔽&#…...

天童美语:推荐给孩子的人文历史纪录片
孩子们都有自己的偏好,有的孩子喜欢打游戏,有的孩子喜欢看剧看电影,有的孩子喜欢看书。针对不同的孩子我们要因材施教,所以,广州天童教育给大家推荐一下适合给孩子看的人文历史类的纪录片,让精美的画面&…...

数字人技术如何推动教育事业可持续创新发展?
数字人技术作为一种新兴的教育手段,无论是幼儿园还是大学课堂,数字人都可以融入于各阶段教育中,结合动作捕捉、AI等技术,提高教育资源的利用。 AI智能交互数字人应用: 数字人结合NLP自然语言处理技术以及AI大模型技术…...

FPGA程序设计
在设计FPGA时,多运用模块化的思想取设计模块,将某一功能设计成module。 设计之前要先画一下模块设计图,列出输入输出接口,再进一步设计内部功能。 状态机要画图,确定每个状态和状态之间怎么切换。状态用localparam定…...

彻底开源,免费商用,上海AI实验室把大模型门槛打下来
终于,业内迎来了首个全链条大模型开源体系。 大模型领域,有人探索前沿技术,有人在加速落地,也有人正在推动整个社区进步。 就在近日,AI 社区迎来首个统一的全链条贯穿的大模型开源体系。 虽然社区有LLaMA等影响力较大…...

MTEB评估基准使用指北
文章目录 介绍评估数据 介绍 文本嵌入通常是在单一任务的少量数据集上进行评估,这些数据集未涵盖其可能应用于其他任务的情况,不清楚在语义文本相似性(semantic textual similarity, STS)等任务上的最先进嵌入是否同样适用于聚类或…...

31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零
class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int stone : stones) sum stone;int bagSize sum /2;vector<int> dp(bagSize 1, 0);for(int i 0; i < stones.size(); i){ //遍历物品for(int j bagSize; j >…...

PDF 中图表的解析探究
PDF 中图表的解析探究 0. 引言1. 开源方案探究 0. 引言 一直以来,对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格,这篇文章主要记录了对表格的探究。还有,我个人主要做日本项目&…...

递推(C语言)
文章目录 1.斐波那契数列2.太波那契数列3.二维递推问题4.实战4.1 力扣509 斐波那契数4.2 力扣70 爬楼梯4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点 像数据结构中的线性表(可以是顺序表&…...

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片
安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片 复习了下安卓程序的知识,我们会了解到,安卓程序清楚数据的时候有两个选项 一个是清除全部数据一个是清除缓存。 清除全部数据表示清除应用数据缓存。 对于安卓微信8.0之后而言࿰…...

ES6 Class(类) 总结(九)
ES6 中的 class 是一种面向对象编程的语法糖,提供了一种简洁的方式来定义对象的结构和行为。 JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。 function Point(x, y) {this.x x;this.y y; } Point.prototype.toString fu…...

使用 Vue.js 和 Element Plus 实现自动完成搜索功能
使用 Vue.js 和 Element Plus 实现自动完成搜索功能 一、前言1.环境准备2.组件配置3.后端数据请求4.样式5.总结 一、前言 在前端开发中,实现自动完成(autocomplete)功能可以极大地提升用户体验,特别是在需要用户输入和选择内容的…...

SpringBoot自定义starter
SpringBoot自定义starter 1、SpringBoot之starter机制 1.1、什么是自定义starter SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖&#…...

深入探索大语言模型
深入探索大语言模型 引言 大语言模型(LLM)是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理(NLP)任务中展示了惊人的能力,从文本生成到问答系统,无所不包。本文将从多个角度全面介绍大语…...

querylist多线程采集curlMulti时,报错Curl error(60)
前言 在使用querylist多线程采集的时候,报错: Curl error(60)。测试了下用http时没有问题,https时有问题。其原因在于多线程采集库引用的另一个库有问题。需要手动更改。 解决 找到:vendor/ares333/php-curl/src/Curl.php 文件,…...

Python数据分析~~美食排行榜
目录 1.模块的导入和路径的选择 2.访问前面五行数据 3.按照条件进行筛选 4.获取店铺评分里面的最高分 5.打印对应的店铺的名字 1.模块的导入和路径的选择 # 导入pandas模块,简称为pd import pandas as pd # 使用read_csv()函数 # TODO 读取路径"/Users/fe…...

Linux下解压.tar.gz文件
.tar.gz 是一种常用的压缩包格式,尤其在Unix、Linux以及macOS系统中非常普遍。这个格式结合了两种不同的功能: Tar (.tar): “Tar” 是“Tape Archive”的缩写,最初是为了将数据备份到磁带上而设计的。Tar命令可以将多个文件和目录打包成一个…...

【电商选品干货】差异化卖点要这样打造,80%商家却做不到
今天就给大家说说,如何去挖掘产品的差异化卖点?我们要找差异化卖点,就是因为我们的产品转化率不足,通常有下面几点原因: 1、产品差异化卖点不足,商家占比30% 2、流量和产品卖点不匹配,商家占比…...

LabVIEW比例压力控制阀自动测试系统
开发了一套基于LabVIEW编程和PLC控制的比例控制阀自动测试系统。该系统能够实现共轨管稳定的超高压供给,自动完成比例压力控制阀的耐久测试、流量滞环测试及压力-流量测试。该系统操作简便,具有高精度和高可靠性,完全满足企业对自动化测试的需…...

运营商认证API在Java、Python、PHP中的使用教程
随着数字化浪潮的推进,实名认证已深入我们生活的方方面面,从线上购物到电子资金转移,手机号已成为注册账号的主要凭证。然而,这也带来了身份验证的难题和手机号被盗用注册账号的风险。在信息爆炸的时代背景下,确保每个…...

用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗
1.用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗 是的,可以在x86的电脑上使用虚拟机技术虚拟出ARM架构的电脑。以下是通过虚拟机实现x86电脑上虚拟ARM电脑的几个关键步骤: 选择合适的虚拟化软件:通常,你可以使用如QE…...

富格林:可信观念摆脱暗箱陷阱
富格林指出,投资者产生的暗箱亏损多半是由于被不可信观念的迷惑影响,以为真的可以毫不费力就能赚钱,最后发现连交易的本金都打水漂了。事实上,投资市场并不像大家想得那么简单。要想安全实现交易成功,避免暗箱陷阱&…...

WEB前端01-HTML5基础(01)
一.WEB相关概念 软件架构 C/S: Client/Server (客户端/服务器端):在用户本地有一个客户端程序,在远程有一个服务器端程序 优点:用户体验好 缺点:开发、安装,部署,维护麻烦 B/S: Br…...

JUC-常见方法与线程的状态
常见方法 start()与run() 主线程直接调用某个线程t1的run()方法,run方法也会执行,但是并不会启动新的线程,而是有主线程调用的run方法,必须使用start才能启动新线程,但是start只能调用一次。 sleep()与yield() sle…...

如果你酿的酒是黄色,说明肯定是 “糊锅”了。
刚刚酿出的酒一般都是清澈见底的,如果你酿的酒是黄色,说明肯定是 “糊锅”了。这样的酒不仅颜色是黄的,而且还能闻到一股特别浓厚的 焦糊味。 这样的酒,米酒小哥是非常非常熟悉的,因为刚开始学习酿酒的那段时 间&#…...

国漫推荐07
玄幻、奇幻 1.侠岚系列 《侠岚》(第1至6季) 《画江湖之侠岚》(侠岚第7季) 2.《斗破苍穹》 三十年河东,三十年河西,莫欺少年穷! 3.《武动乾坤》(第1至4季) 4.《妖神记》…...

力扣刷题35.搜索查找位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

setContentView 流程
setContentView 流程 Activity -> setContentView 开发者设置入口PhoneWindow -> setContentView mWindow 在 attach 时初始化为 PhoneWindow,同时PhoneWindow也是Window唯一的实现类PhoneWindow -> installDecor 这一步的作用是 初始化DecorView, 把Deco…...

基于STM32设计的智能手环(ESP8266+华为云IOT)178
基于STM32设计的智能手环(178) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成【3】ESP8266工作模式配置【4】Android手机APP开发思路【5】项目模块划分1.2 项目功能需求(1)生理参数监测(2)计步功能(3)GPS定位(4)时间显示(5)OLED显示屏展示(…...