当前位置: 首页 > news >正文

k8s 自身原理之高可用

说到高可用,咱们在使用主机环境的时候(非 k8s),咱做高可用有使用过这样的方式:

  • 服务器做主备部署,当主节点和备节点同时存活的时候,只有主节点对外提供服务,备节点就等着主节点挂了之后,立刻补位
  • 另外为了提供服务的可用性,做了异地多活,增加服务的接入节点,对流量进行分流等
  • 对于数据库同样也是做备份,定期同步,热备或者冷备

那么前面分享了那么多的关于 k8s 自身组件的原理,咱们可以回过来头看,我们为什么要选择 k8s ?

简单来说还是因为 k8s 自身的特性:

  • 自身满足负载均衡
  • 服务自愈
  • 管理的服务还可横向扩容
  • 升级的时候,能够滚动升级,平滑过渡,整个升级过程能够做到非常的丝滑,
  • 若中间出现升级异常,还可以一键回滚,在回滚过程中,亦不影响原有服务

这一切的一切,咱们在主机环境都是需要耗费很大的人力成本去做的事情,因而,最终才会选择服务部署在 k8s 上面,可以极大的减少开发和运维的心智负担和运维成本

那么上述说的这么好, k8s 是如何保障高可用的呢?

高可用我们可以从哪些方面思考呢?

从 pod 来看

从 pod 来看高可用的话,前面我们有说到 pod 可以通过使用高级资源 Deployment 来进行管理,创建,更新,删除 pod ,使用 Deployment 都可以进行平滑的升级和回滚

当然默认说的这种方式是无状态的 pod

如果咱们是的服务是有状态的,运行在 pod 中,咱们仍然可以使用 Deployment ,但是只能有 1 个副本,否则会有影响

如果带有数据卷的时候,咱们也可以使用 StatefulSet 资源来进行管理

但是若咱们的 pod 挂掉,咱们在 pod 重启到可以对外提供服务的过程中,服务会中断一段时间

有状态服务,无法水平扩展的高可用方式

有状态的服务,无法水平扩展,咱们也可以像最开始我说到的使用主备的这种做法来进行处理

类似的,我们可以使用领导选举机制,来将多个同样的有状态服务中选举一个服务来对外处理请求

直到这个服务出现异常而宕机之后,使用同样的方式,来在剩下的服务中选举出一个有效的服务,来处理外来请求

具体的算法和 k8s 中的实现方式,我会在后面的文章中进行分享

从 etcd 来看

etcd ,咱们是使用主机环境的时候也有使用过 etcd

主要是用来存放服务配置,和用来做服务发现的,key 值是服务的目录或者带有 / 的字符串, value 的话,则是服务的 ip 和 端口

**etcd 本身就被设计成一个分布式的系统,**本身就可以运行多个 etcd 实例,天生做高可用就是很容易的事情

一般做集群,咱们会部署 3 个,5个 或者是 7 个,原因的话**,可以尝试去看看 redis 集群部署一章的分享**

可以看这个简图:

多 master ,多 worker 的简图

从 ApiServer 来看

从 ApiServer 来看的话,那就更简单的

这个组件本身无状态,且不缓存数据,他会直接和 自己独立的 etcd 进行通信,对于节点里面的组件,请求给到哪一个 master 里面的 ApiServer 都是可以的

因为 ApiServer 后面的 etcd 组件是分布式的,他们的数据是会跨实例复制数据的

在多 master 的时候,worker 和主节点通信的时候,是要经过一个负载均衡器的,这可以让多个节点的流量进行分流同时还可以保证 worker 的请求可以正确的打到健康的 ApiServer 上

从 调度器 scheduler 和控制器管理器 controller manager 来看

对于 scheduler 和控制器管理器相对就没有 ApiServer 那么简单和方便,因为他们会涉及资源管理的冲突

对于他们来说,他们大部分都是在做监听工作,当有多个控制器监听了到 ApiServer 的中的资源变化

那么,例如 3 个 ReplicaSet 控制器,都监听了 ApiServer 将其对应的副本数增加 2 个

这个时候,3 个 ReplicaSet 控制器 都监听了,为了满足期望,他们便会做满足期望的事情,最终,环境里面会新产生 6 个 pod

自然,这是我们所不期待的,这样搞岂不是乱套了,浪费资源

因此 对于控制器管理器和调度器和他们都会积极的监听集群的状态,为了避免不良竞争,还是要选用上述的类似主备的思想

给他们使用 –leader-elert 选项 , 默认会进行选主,谁是主,谁就做实际的动作,做监听之后需要做的事情,其他的就等着这个主 寿终正寝

好了,今天就是这样

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmdHOASE-1692190405468)(https://gitee.com/common_dev/mypic/raw/master/97eedfade9134b669f0fe40cd73d2cd5~tplv-k3u1fbpfcp-zoom-1.image)]

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

相关文章:

k8s 自身原理之高可用

说到高可用,咱们在使用主机环境的时候(非 k8s),咱做高可用有使用过这样的方式: 服务器做主备部署,当主节点和备节点同时存活的时候,只有主节点对外提供服务,备节点就等着主节点挂了…...

游乐场vr设备虚拟游乐园vr项目沉浸体验馆

在景区建设一个VR游乐场项目可以为游客提供一种新颖、刺激和沉浸式的游乐体验。提高游客的体验类型,以及景区的类目,从而可以吸引更多的人来体验。 1、市场调研:在决定建设VR游乐场项目之前,需要进行市场调研,了解当地…...

window10安装并使用oracle

1、现在oracle19c或者21c,下载链接如下 Database Software Downloads | Oracle 中国 2、安装好之后, 2.1PL/SQL连接方式 命令窗口输入sqlplus conn as sysdba 2.2DBeaver连接 输入IP、 端口默认1521 数据库默认是ORCL 用户名是system 角色是N…...

[Mac软件]AutoCAD 2024 for Mac(cad2024) v2024.3.61.182中文版支持M1/M2/intel

下载地址:前往黑果魏叔官网 AutoCAD是一款计算机辅助设计(CAD)软件,目前已经成为全球最受欢迎的CAD软件之一。它可以在二维和三维空间中创建精确的技术绘图,并且可以应用于各种行业,如建筑、土木工程、机械…...

Oracle 主从库目录不一致(异路径)的n种处理方案及效果

最近遇到了复制数据(DUPLICATE TARGET DATABASE TO xxx)的时候 Oracle 源和目标库目录不一致的问题,比较初级但也踩到一些坑,整理记录一下。主从库搭建的时候注意事项其实也类似,而且更通用,所以标题写的是…...

创建型(一) - 简单工厂模式、工厂方法模式和抽象工厂模式

本文使用了王争老师设计模式课程中的例子,写的很清晰,而且中间穿插了代码优化。 由于设计模式就是解决问题的一种思路,所以每个设计模式会从问题出发,这样比较好理解设计模式出现的意义。 一、简单工厂模式 解决问题&#xff1a…...

LeetCode3.无重复字符的最长子串

虽然是一道中等题,但我5分钟就写完了,而且是看完题就知道怎么写,这一看就知道双指针,一个左一个右,右指针往后移如果没有重复的长度1;如果有重复的,左指针往右移,那如何判断重复呢&a…...

鲁图中大许少辉博士八一新书《乡村振兴战略下传统村落文化旅游设计》山东省图书馆典藏

鲁图中大许少辉博士八一新书《乡村振兴战略下传统村落文化旅游设计》山东省图书馆典藏...

如何发布自己的小程序

小程序的基础内容组件 text&#xff1a; 文本支持长按选中的效果 <text selectable>151535313511</text> rich-text: 把HTML字符串渲染为对应的UI <rich-text nodes"<h1 stylecolor:red;>123</h1>"></rich-text> 小程序的…...

【微服务】spring 条件注解从使用到源码分析详解

目录 一、前言 二、spring 条件注解概述 2.1 条件注解Conditional介绍 2.2 Conditional扩展注解 2.2.1 Conditional扩展注解汇总 三、spring 条件注解案例演示 3.1 ConditionalOnBean 3.2 ConditionalOnMissingBean 3.2.1 使用在类上 3.2.2 使用场景补充 3.3 Condit…...

客户案例:高性能、大规模、高可靠的AIGC承载网络

客户是一家AIGC领域的公司&#xff0c;他们通过构建一套完整的内容生产系统&#xff0c;革新内容创作过程&#xff0c;让用户以更低成本完成内容创作。 客户网络需求汇总 RoCE的计算网络RoCE存储网络1.不少于600端口200G以太网接入端口&#xff0c;未来可扩容至至少1280端口1.…...

Flutter性能揭秘之RepaintBoundary

作者&#xff1a;xuyisheng Flutter会在屏幕上绘制Widget。如果一个Widget的内容需要更新&#xff0c;那就只能重绘了。尽管如此&#xff0c;Flutter同样会重新绘制一些Widget&#xff0c;而这些Widget的内容仍有部分未被改变。这可能会影响应用程序的执行性能&#xff0c;有时…...

29.Netty源码之服务端启动:创建EventLoopSelector流程

highlight: arduino-light 源码篇&#xff1a;从 Linux 出发深入剖析服务端启动流程 通过前几章课程的学习&#xff0c;我们已经对 Netty 的技术思想和基本原理有了初步的认识&#xff0c;从今天这节课开始我们将正式进入 Netty 核心源码学习的课程。希望能够通过源码解析的方式…...

Kotllin实现ArrayList的基本功能

前言 上次面试时&#xff0c;手写ArrayList竟然翻车&#xff0c;忘了里面的扩容与缩容的条件&#xff0c;再次实现一次&#xff0c;加深印象 源码讲了什么 实现了List列表和RandomAccess随机访问接口List具有增删改查功能&#xff0c;RandomAccess支持下标访问内部是一个扩容…...

C++的初步介绍,以及C++与C的区别

C和C的区别 C又称C plus plus&#xff0c;且C语言是对C语言的扩充&#xff0c;几乎支持所有的C语言语法&#xff1b;C语言&#xff1a;面向过程的语言&#xff08;注重问题的解决方法和算法&#xff09;C&#xff1a;面向对象的语言 &#xff08;求解的方法&#xff09;面向对…...

JDK 核心jar之 rt.jar

一、JDK目录展示 二、rt.jar 简介 2.1.JAR释义 在软件领域&#xff0c;JAR文件&#xff08;Java归档&#xff0c;英语&#xff1a;Java Archive&#xff09;是一种软件包文件格式&#xff0c;通常用于聚合大量的Java类文件、相关的元数据和资源&#xff08;文本、图片等&…...

el-form表单验证:只在点击保存时校验(包含select、checkbox、radio)

1、input类型 input类型 在el-input里加入:validate-event"false" <el-form-item label"活动名称" prop"name"><el-input v-model"ruleForm.name" :validate-event"false"></el-input> </el-form-i…...

Golang基本语法(上)

1. 变量与常量 Golang 中的标识符与关键字 标识符 Go语言中标识符由字母数字和_(下划线&#xff09;组成&#xff0c;并且只能以字母和_开头。 举几个例子&#xff1a;abc, _, _123, a123。 关键字 关键字和保留字都不建议用作变量名&#xff1a; Go语言中有25个关键字。 此…...

jenkins使用

安装插件 maven publish over ssh publish over ssh 会将打包后的jar包&#xff0c;通过ssh推送到指定的服务器上&#xff0c;&#xff0c;在jenkins中设置&#xff0c;推送后脚本&#xff0c;实现自动部署jar包&#xff0c;&#xff0c; 装了这个插件之后&#xff0c;可以在项…...

多线程基础篇(包教包会)

文章目录 一、第一个多线程程序1.Jconsole观察线程2.线程休眠-sleep 二、创建线程三、Thread类及常见方法1. Thread 的常见构造方法2. Thread 的几个常见属性3. 启动线程 - start4. 中断线程5. 等待一个线程 四、线程状态五、线程安全问题(synchronized)&#xff08;重点&#…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...