Kubernetes入门-大简介

目录

何为微服务

何为云原生

何为编排器


  • “Kubernetes”这个名字来自希腊语,意思是“舵手”
  • 舵手是一个航海/航行术语,指掌舵的人
  • 从本质上说,Kubernetes是云原生微服务(cloud-native microservice)应用的编排器(orchestrator)

何为微服务

  • 在过去,开发人员构建和部署的是单体应用
  • 单体应用中每个功能都被捆绑在一起作为单个大的包
  • 如图所示:
  • Web前端、认证、日志生成、数据存储、报告系统等被紧密地耦合在一起,捆绑成一个应用
  • 这意味着,如果想改变某个部分,必须改变每一部分
  • 举个简单的例子,如果需要修补或更新上图中的应用的报告功能,必须关闭整个应用并修补/更新整个应用
  • 像这样的工作需要详尽的计划,面临巨大的风险且十分复杂
  • 但是,单体应用带来的痛苦还不止于此
  • 如果想对它们的某个功能进行扩缩容,不得不对整个单体应用扩缩容
  • 基本上,应用的每个功能都被作为一个单体的单元捆绑、部署、升级和扩缩容,这是很笨拙的,显然不是很理想
  • 另外,微服务应用采用完全相同的一组功能——Web前端、认证、日志生成、数据存储、报告系统等
  • 将每个功能拆分为自己的小应用
  • “小”的另一个词是“微”,“应用”的另一个词是“服务”
  • 这就是“微服务”这个术语的由来
  • 如果仔细观察下图你会发现,它就是和上图完全相同的一组应用功能
  • 不同的是,每个功能都是独立开发、独立部署的,并且可以独立更新和扩缩容
  • 但它们依然协同工作,创造与单体应用完全相同的应用体验
  • 最常见的模式是每个微服务都作为独立的容器来开发和部署
  • 例如,Web前端微服务会是一个容器,认证微服务会是另一个不同的容器,报告系统微服务又会再是不同的容器
  • 以此类推
  • 每个微服务都是独立的,但又是通过网络松散耦合的,以创建相同的应用体验
  • 通过设计让微服务之间是松散耦合的,这是修改一个微服务而不影响其他微服务的基础
  • 从技术上讲,每个微服务都通过IP网络暴露一个API,让其他微服务能够通过这个API来使用它
  • 如果不熟悉API这个概念,下面这个类比对你可能会有所帮助
  • 汽车的外形和大小各异,它们配置的可能是直列四缸、水平对卧六缸、八缸的发动机,甚至可能是电动发动机
  • 但是,所有这些复杂的细节都通过使用标准化控制器---方向盘、加速器、刹车踏板和车速表对驾驶员隐藏了
  • 在这个模型中,控制器相当于汽车的API---驾驶员通过它们来使用汽车的功能
  • 这种模型的一个主要优点是,学会驾驶后就能驾驶任何一款汽车
  • 例如,我学开车时用的是一辆前轮驱动的汽车,它配置的是四缸汽油发动机
  • 但我无须学习任何新的驾驶技能就能开全轮驱动的电动汽车
  • 这就是因为标准化的方向盘和脚踏板(API)将发动机和传动系统的复杂细节隐藏起来了
  • 同样,更换汽车的发动机、替换其方向盘和轮胎、升级其排气系统后,驾驶员依然能够驾驶它,而无须学习任何新的驾驶技能
  • 回到正题---微服务应用
  • 只要没有修改微服务的API,就可以在其他微服务和应用用户不会注意到的情况下对微服务进行修补或更新
  • 除了让微服务能够独立地更新和扩缩容,微服务设计模式还让开发团队更小、更敏捷,能够更快地迭代功能
  • 一般来说,与大团队相比,2~8人团队的沟通和合作的职场政治因素会更少,也会更敏捷
  • 微服务设计模式还有其他优点---将功能开发成独立的微服务,可以在不影响应用任何部件的情况下对它们进行开发、部署、更新、扩缩容等
  • 但是,微服务并不完美
  • 如果有很多由不同团队管理的移动部件,微服务可能会变得很复杂
  • 最后,这两种设计应用的方式——单体与微服务---被称为设计模式
  • 微服务设计模式是当前云时代最常见的模式

何为云原生

  • 一个云原生应用必须能够:
  • 按需扩缩容
  • 自我修复
  • 支持滚动更新
  • 可以在任何有Kubernetes的地方运行
  • 让我们花点时间来定义其中一些流行术语的含义
  • 按需扩缩容是指应用和相关基础设施为了满足当前需求的自动增长和收缩的能力
  • 例如,在线零售应用可能需要在特殊的假期增加基础设施和应用资源,然后在假期结束时缩小规模
  • 如果配置正确,Kubernetes可以在需求增加时自动对应用和基础设施进行扩容,也可以在需求下降时对它们进行缩容
  • 这不仅有助于企业对突发变化做出更快速的反应,还能在缩容时帮助其降低基础设施的成本
  • Kubernetes还可以自我修复应用和单个微服务,这需要更多关于Kubernetes的知识,将会在后面介绍
  • 但现在要知道的是,当用户把一个应用部署到Kubernetes时,用户告诉Kubernetes这个应用应该是什么样子
  • 例如,每个微服务有多少个实例,应该连接到哪些网络
  • Kubernetes将其保存为期望状态(desired state),并监视应用,以确保它始终与期望状态匹配
  • 如果有什么变化,例如,某个微服务崩溃,Kubernetes会注意到这一点,并启动一个副本作为替代,这就是所谓的自我修复或弹性
  • 滚动更新是一种在不让应用离线甚至客户不会注意到的情况下更新应用的某些部分的能力
  • 它改变了现代商业世界的游戏规则,稍后我们就可以看到它的实际效果
  • 关于云原生还有最后一点要讲
  • 云原生几乎是与公有云无关的,它是一组我们讨论过的功能和能力
  • 因此,云原生应用可以在任何有Kubernetes的地方运行,如AWS、Azure、Linode、本地数据中心或者家中的树莓派集群
  • 总之,云原生应用是具有弹性的、可以自动扩缩容的,并且可以在不停机的情况下进行更新
  • 它们还可以在任何拥有Kubernetes的地方甚至是内部环境运行

何为编排器

  • 借助一个类比可以更好地解释编排器这个概念
  • 一个管弦乐队由一群演奏不同乐器的音乐家组成
  • 每位音乐家都可以用不同的乐器,在演奏开始后发挥着不同的作用
  • 乐器包括小提琴、大提琴、竖琴、双簧管、长笛、单簧管、小号、长号、鼓,甚至三角琴
  • 每一个音乐家在管弦乐队中扮演着不同的角色
  • 如下图所示,每位乐器都是独立的个体,还没有被指定扮演什么样的角色——这简直是一团糟,鼓甚至是上下颠倒的
  • 一位指挥家拿着乐谱和指挥棒走过来,维持秩序
  • 她把弦乐器都安排到舞台前面,木管乐器安排在中间,铜管乐器安排在后面一点儿,打击乐器安排在后面高一些的地方
  • 她还指挥一切,告诉每组乐器什么时候演奏、演奏多大声以及以什么速度演奏
  • 简而言之,指挥家将上图中的混乱情况变成如下图所示那样井井有条,以确保音乐按照作曲家的意图演奏
  • 云原生微服务应用就像管弦乐队
  • 每个云原生应用都是由很多小的微服务组成的
  • 它们各司其职:有的服务于Web请求,有的用于认证会话,有的进行日志记录,有的用于持久化数据,还有一些生成报告
  • 但就像一个管弦乐队一样,它们需要有人或某种东西将它们组织成一个有用的应用
  • 由此,我们真正走进Kubernetes世界
  • Kubernetes将独立的微服务组织成一个有意义的应用,如下图所示
  • 如前所述,它可以对应用进行扩缩容、自我修复和更新等操作
  • 总之,像Kubernetes这样的编排器将不同的微服务组合在一起,并将它们组织成一个有用的应用
  • 它还提供并管理云原生功能,如扩缩容、自我修复和更新

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

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

相关文章

大模型日报2024-06-09

大模型日报 2024-06-09 大模型资讯 Qwen2-72B:拥有72亿参数的先进AI模型 摘要: Qwen团队近日发布了最新突破性成果——Qwen2-72B。这款最先进的语言模型具备72亿参数、支持128K令牌、多语言精通及业界领先性能,展示了显著的技术进步。 OpenAI与Anthropic…

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

今天明月给大家分享一下 WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法的教程,在撰写【WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程】一文的时候明月就发现 W3 Total Cache 已经支持 Brotli 压缩算法了,可惜的是在安装完…

ctfshow-web入门-命令执行(web53-web55)

目录 1、web53 2、web54 3、web55 1、web53 这里的代码有点不一样,说一下这两种的区别: (1)直接执行 system($c); system($c);这种方式会直接执行命令 $c 并将命令的输出直接发送到标准输出(通常是浏览器&#xff…

【qsort函数】

前言 我们要学习qsort函数并利用冒泡函数仿照qsort函数 首先我们要了解一下qsort(快速排序) 这是函数的的基本参数 void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*)); 简单解释一下 base:指向…

23.在游戏中按下Home键呼出辅助窗口

上一个内容:22.钩子注入原理 在 22.钩子注入原理 它的代码上进行修改 效果图: 首先在CWndMain.h文件中添加下图红框里的东西 ChangeShowState函数的实现 void CWndMain::ChangeShowState() {UiShow !UiShow;ShowWindow(UiShow); } OnInitDialog函数…

CISCN2024 初赛 wp 部分复现(Re)

Misc 1. 火锅链观光打卡 答题即可 Re 1. asm_re 感谢智谱清言,可以读出大致加密算法 这是输入 这是加密部分 这里判断 找到疑似密文的部分,手动改一下端序 #asm_wp def dec(char):return (((char - 0x1E) ^ 0x4D) - 0x14) // 0x50 #return (ord(cha…

powerdesigner各种字体设置

1、设置左侧菜单: 步骤如下: tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可,同下图。 2、设置Table的字体大小 Tools------>Display Prefrences------>Table------->Format---------…

RabbitMQ系列-rabbitmq无法重新加入集群,启动失败的问题

当前存在3个节点:rabbitmq5672、rabbitmq5673、rabbitmq5674 当rabbitmq5673节点掉线之后,重启失败 重启的时候5672节点报错如下: 解决方案 在集群中取消失败节点 rabbitmqctl forget_cluster_node rabbitrabbitmq5673删除失败节点5673的…

王学岗鸿蒙开发(北向)——————(十)子组件修改父组件的内容与 动画

子组件修改父组件的内容 使用类似Android的回调,父组件传递给子组件一个函数 import { MyComment } from ./component/MyComment import { MyContent } from ./component/MyComtent import { MyTitleComponent } from ./component/MyTitleComponentEntry Componen…

【MySQL数据库基础】

🌈个人主页:努力学编程’ ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 …

React核心概念、主要特点及组件的生命周期

在前端开发的世界中,React以其独特的魅力和强大的功能,成为了构建用户界面的首选框架之一。本文将深入探讨React的核心概念、主要特点以及组件生命周期 React简介 React是由Facebook开发并开源的前端JavaScript库,专门用于构建可重用的UI组…

【CS.OS】堆管理算法:不同的堆分配和管理算法

1000.5.CS.OS.1.3-基础-内存管理-堆管理算法-Created: 2024-06-09.Sunday10:41 文章目录 1 内存分配算法概述1.1 首次适应(First-Fit)1.2 最佳适应(Best-Fit) 2 伙伴系统(Buddy System) 3 总结References …

Python | 正则表达式

?:标记?之前的字符为可选. used&#xff1f; d可有可无 *:匹配>0个重复的在*号之前的字符。 ab*c 匹配多个b &#xff1a;匹配>1个重复的号前的字符。&#xff08;至少一个&#xff09; {n,m}&#xff1a;匹配num个大括号之前的字符或字符集 &#xff08;n < num …

算法:101. 对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中节…

ThreadCache线程缓存

一.ThreadCache整体结构 1.基本结构 定长内存池利用一个自由链表管理释放回来的固定大小的内存obj。 ThreadCache需要支持申请和释放不同大小的内存块&#xff0c;因此需要多个自由链表来管理释放回来的内存块.即ThreadCache实际上一个哈希桶结构&#xff0c;每个桶中存放的都…

BGP中MED属性

6、MED——多出口鉴定属性 BGP 协议默认没有度量值&#xff0c;没有cost&#xff1b;所谓的 MED 就是人为的在路由条目中编写一个cost数值&#xff0c;干涉选路&#xff1b; 可用于干涉 EBGP/IBGP 关系下的选路&#xff1b;最常用于干涉 EBGP 关系选路&#xff1b; 常常用…

目标检测(R-CNN)系列(Pytorch 26)

一 R-CNN 除了之前描述的单发多框检测之外&#xff0c;区域卷积神经网络&#xff08;region‐based CNN或regions with CNN features&#xff0c; R‐CNN&#xff09;(Girshick et al., 2014)也是将深度模型应用于目标检测的开创性工作之一。下面介绍R‐CNN及其一 系列改进方法…

架构设计-web项目中跨域问题涉及到的后端和前端配置

WEB软件项目中经常会遇到跨域问题&#xff0c;解决方案早已是业内的共识&#xff0c;简要记录主流的处理方式&#xff1a; 跨域感知session需要解决两个问题&#xff1a; 1. 跨域问题 2. 跨域cookie传输问题 跨域问题 解决跨域问题有很多种方式&#xff0c;如使用springboot…

C语言运算类型有哪些

C语言中的运算类型主要分为以下几类&#xff1a; 1. 算术运算符&#xff1a; - 加法运算符 - 减法运算符 - - 乘法运算符 * - 除法运算符 / - 取模运算符 %&#xff08;取余数&#xff09; 2. 关系运算符&#xff1a; - 大于 > - 小于 < - 大…

ISO 19115-2:2019 附录B 获取和处理元数据数据字典

B.1 数据字典概述 B.1.1 引言 本数据字典描述了第 6 条中定义的元数据特征。字典按照层次结构来指定,以建立信息的关系和组织。字典按 UML 模型包图分类:获取信息、谱系信息、空间表示信息和内容信息。第 6 条中的每个模型图在数据字典中都有一组表。每个 UML 模型类及其子…