Kubernetes 知识体系 系列一

news2024/11/15 9:06:35

多年前,大多数软件应用程序都是大型的单体,要么作为单个进程运行,要么作为少数服务器上的少量进程运行。这种过时的系统一直延续很久。

它们的发布周期较慢,更新相对较少。

在每个发布周期结束时,开发人员将整个系统打包并交给运维团队,然后运维团队对其进行部署和监控。如果发生硬件故障,运维团队将手动将其迁移到剩余的健康服务器。

但是,随着可部署组件数量的增加和数据中心规模的扩大,配置、管理和保持整个系统平稳运行变得越来越困难。要弄清楚把这些组件放在哪里以实现高资源利用率,从而降低硬件成本要困难得多。手工完成所有这些工作是很辛苦的。我们需要自动化,包括将这些组件自动调度到我们的服务器、自动配置、监督和故障处理。这就是Kubernetes发挥作用的地方。

将应用拆分为微服务

这些问题和其他问题迫使我们开始将复杂的单片应用程序拆分为更小的可独立部署的组件,称为微服务。每个微服务作为一个独立的进程运行(见figure1.1),并通过简单的、定义良好的接口(api)与其他微服务通信。

微服务通过HTTP等同步协议进行通信,它们通常在HTTP上公开RESTful(REpresentational State Transfer)api,或者通过AMQP(Advanced Message Queueing Protocol)等异步协议进行通信。

可扩展的微服务

微服务的扩展不像单片系统那样需要将系统作为一个整体进行扩展,它是在每个服务的基础上完成的,这意味着你可以选择只扩展那些需要更多资源的服务,而让其他服务保持原来的规模。
图1.2显示了一个示例。某些组件被复制并作为部署在不同服务器上的多个流程运行,而其他组件则作为单个应用程序流程运行。
当一个单片应用程序因为其中一个部分不可扩展而无法扩展时,将应用程序拆分为微服务可以让你横向扩展。

部署微服务

与往常一样,微服务也有缺点。当您的系统仅由少量可部署组件组成时,管理这些组件很容易。决定在哪里部署每个组件很简单,因为选择并不多。当这些组件的数量增加时,与部署相关的决策变得越来越困难,因为不仅部署组合的数量增加了,而且组件之间的相互依赖关系的数量也增加了一个更大的因素。

微服务还带来了其他问题,比如难以调试和跟踪执行调用,因为它们跨越多个进程和机器。幸运的是,这些问题现在正在通过Zipkin等分布式跟踪系统得到解决。

了解不同环境需求的差异

微服务架构中的组件不仅是独立部署的,而且也是以这种方式开发的。由于它们的独立性以及通常由独立的团队开发每个组件的事实,没有什么可以阻止每个团队使用不同的库并在需要时替换它们。应用程序组件之间依赖关系的分歧是不可避免的,如Figure1.3所示,其中应用程序需要相同库的不同版本。

部署需要不同版本的共享库和/或需要其他环境细节的动态链接应用程序,对于在生产服务器上部署和管理它们的运维团队来说,可能很快就会成为一场噩梦。在同一台主机上需要部署的组件数量越多,管理它们的所有依赖关系以满足它们的所有需求就越困难。

VM和Container的区别

与VM相比,Container要轻量级得多,这允许您在相同的硬件上运行更多数量的软件组件,主要是因为每个
VM需要运行自己的一组系统进程,除了组件自己的进程所消耗的资源外,这还需要额外的计算资源。

另一方面,Container只不过是在主机操作系统中运行的一个孤立的进程,它只消耗应用程序所消耗的资源,并且没有任何额外进程的开销。

由于VM的开销,您通常会将多个应用程序分组到每个虚拟机中,因为您没有足够的资源将整个虚拟机专用于每个应用程序。

在使用Container时,您可以为每个应用程序使用一个Container,如Figure1.4所示。最终的结果是,您可以在同一台裸机上安装更多的应用程序

当您在一台主机上运行三个vm时,您将有三个完全独立的操作系统运行在相同的裸机硬件上并共享它们。在这些虚拟机下面是主机的操作系统和管理程序,管理程序将物理硬件资源划分为更小的虚拟资源集,这些虚拟资源集可以由每个虚拟机中的操作系统使用VM。在这些虚拟机中运行的应用程序对虚拟机中的来宾操作系统内核执行系统调用,然后内核在主机的物理上执行x86指令
通过虚拟化环境获取CPU。

另一方面,容器都在主机操作系统中运行的完全相同的内核上执行系统调用。这个内核是唯一在主机CPU上执行x86指令的内核。CPU不需要像处理vm那样进行任何类型的虚拟化(参见Figure1.5)。

VM的主要好处是它们提供了完全的隔离,因为每个VM运行自己的Linux内核,而容器都调用相同的内核,这显然会带来安全风险。

如果您的硬件资源有限,那么只有当您希望隔离的进程数量很少时,才可以选择VM。

要在同一台机器上运行更多的隔离进程,容器是更好的选择,因为它们的开销较低。

每个VM运行它自己的一组系统服务,而容器没有,因为它们都运行在相同的操作系统中。

这也意味着要运行容器,不需要启动任何东西,就像vm中的情况一样。

构建、分发和运行docker image

Figure 1.6展示了所有这三个概念以及它们之间的关系。开发人员首先构建image,然后将其推送到注册表。因此,任何可以访问注册中心的人都可以使用该image。然后,他们可以将image拉到运行Docker的任何其他机器上并运行该image。Docker基于镜像创建一个隔离的容器,并运行作为镜像一部分指定的二进制可执行文件。

VM和Docker的区别

Figure 1.7在VM和Docker容器中运行同样的六个应用程序。

无论是在VM中运行还是作为两个独立的容器运行,应用程序A和B都可以访问相同的二进制文件和库。因为两个应用程序都看到相同的文件系统(虚拟机的文件系统)。但是每个容器都有自己独立的文件系统。

应用程序A和应用程序B如何共享相同的文件?

Docker image是由层组成的。不同的镜像可以包含完全相同的层,因为每个Docker镜像都是构建在另一个镜像之上的,两个不同的镜像都可以使用相同的父镜像作为基础。

这加快了image在网络中的分布,因为已经作为第一个image的一部分传输的层在传输另一个image时不需要再次传输。

理论上,容器image可以在任何运行Docker的Linux机器上运行,但是有一点需要注意,即在主机上运行的所有容器都使用主机的Linux内核。如果容器化的应用程序需要特定的内核版本,那么它可能无法在每台机器上运行。如果一台机器运行不同版本的Linux内核,或者没有相同的内核模块可用,则应用程序无法在其上运行。

虽然容器比虚拟机轻量级得多,但它们对在其中运行的应用程序施加了一定的限制。虚拟机没有这样的约束,因为每个虚拟机运行自己的内核。

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

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

相关文章

第三十二天-PythonWeb主流框架-Django框架

目录 1.介绍 发展历史 介绍 2.使用 1.安装 2.创建项目 3.项目结构 4.启动 3.开发流程 1.设置ip可访问 2.创建模块 3.第一个页面 4.视图 5.include()参数 6.url与视图的关系 7.响应内容 4.视图处理业务逻辑 1.响应html 2.获取url参数 3.从文件响应html内容 …

一招让你的薪水暴增,每个程序员都应该学会跟老板提加薪

为什么要学会薪资谈判? 在最近的一篇文章中,职业专家奥斯汀贝尔卡克 (Austin Belcak ) 解释了进行一点薪资谈判如何对您的长期收入产生巨大影响。 这是奥斯汀在他的薪资谈判示例中描绘的场景: Amari 和 Taylor 的年薪均为 50,000 美元 未来…

Java实现猜数字游戏:编程入门之旅

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

C 指向指针的指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。 一个指向指针的指针变量…

MySQL | 事务

目录 1. 前言 2. 什么是事务? 3. 为什么出现事物? 4. 事物的版本支持 4.1. 事务提交方式 5. 事务常见操作方式 6. 事务隔离级别 6.1. 隔离级别 6.2. 查看与设置隔离性 6.2.1. 查看 6.2.2. 设置 6.3. 读未提交[Read Uncommitted] 6.4. 读提交…

uniapp 苹果支付内购示例代码

// #ifdef APPasync init() {uni.showLoading({title: 检测支付环境...});try {// 初始化,获取iap支付通道await this._iap.init();// 从苹果服务器获取产品列表this.productList await this._iap.getProduct();this.productList[0].checked true;this.productId …

图像识别与智能画家的本质区别?

图像识别和智能画家在本质上有一些区别: 1. **图像识别**:图像识别是一种人工智能技术,通过对图像进行分析和识别,识别图像中的对象、场景或模式。图像识别技术通常用于识别、分类和标记图像,帮助计算机理解图像内容。…

【Flask开发实战】安装mysql数据库与配置连接

1、安装mysql 通过yum方式安装MySQL服务器: sudo yum install mysql-server 在安装过程中,系统可能会要求确认安装。按下Y键并按回车键继续。 安装完成后,MySQL服务器应已自动启动。可以使用以下命令查看和启动MySQL服务: sudo…

每日一题 --- 有效的字母异位词[力扣][Go]

有效的字母异位词 题目:242. 有效的字母异位词 给定两个字符串 *s* 和 *t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意:**若 *s* 和 *t* 中每个字符出现的次数都相同,则称 *s* 和 *t* 互为字母异位词。 示例 …

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springbootmybatislayui】 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

脱敏技术!!!

什么是数据脱敏??? 数据脱敏(Data Masking)是一种数据安全技术,旨在通过预先设定的规则和算法,对原始数据中包含的敏感信息进行变形处理,使得这些信息在非生产环境(例如…

​AI大模型学习:优化结构与算法,赋能智能未来

在当前技术环境下,AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法,AI大模型学习能够不断提升模型的准确性和效率,为人类生活和工作带来更多便利。…

Git的原理和使用(四):理解分布式版本控制系统与远程仓库的相关配置

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑都是一个完整的版本库&…

JavaEE之网络初识(网络中的一些基本概念)详解

😽博主CSDN主页: 小源_😽 🖋️个人专栏: JavaEE 😀努力追逐大佬们的步伐~ 目录 1. 前言 2. 网络中的一些基本概念 2.1 IP地址 2.2 端口号 2.3 网络协议 2.4 协议分层 2.5 封装 2.6 分用 (封装的逆向过程) 2.7 客户端 vs …

hcia datacom课程学习(4):ICMP与ping命令

1.什么是ICMP ICMP是ip协议的一部分,常用的ping命令就是基于icmp协议的。 在防火墙策略中也能看到ICMP,如果将其禁用,那么其他主机就ping不通该主机了 2. ICMP数据报 2.1数据报构成 ICMP协议的报文包含在IP数据报的数据部分, …

用Unity3D实现简单的RPG游戏

文章目录 开发流程及关键要素说明**1. **环境设置与项目创建******2. **场景搭建******3. **角色控制******4. **用户输入处理******5. **敌人与战斗系统******6. **物品与装备系统******7. **任务与对话系统******8. **UI与菜单系统******9. **保存与加载系统******10. **测试…

动态内存管理(重要)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1 malloc 2.2 free 3. calloc和realloc 3.1 calloc 3.2 realloc 4.常见的动态内存的错误 4.1对NULL指针的解引用操作 4.2对动态开辟空间的越界访问 4.3对非动态开辟内存使用free释放 4.4使用free释放一块动态开辟内…

rtt的io设备框架面向对象学习-硬件定时器设备

目录 1.硬件定时器设备类对象图全貌2.stm32硬件定时器设备类及其构造函数3 硬件定时器设备基类及其构造函数4 设备基类及其构造函数5.总结6.内部调用流程7.应用程序使用流程 1.硬件定时器设备类对象图全貌 设备驱动层的硬件定时器类是实现类,是需要各个BSP实现的。其…

《数据结构学习笔记---第五篇》---链表OJ练习下

step1:思路分析 1.实现复制,且是两个独立的复制,我们必须要理清指针之间的逻辑,注意random的新指针要链接到复制体的后面。 2.我们先完成对于结点的复制,并将复制后的结点放在原节点的后面,并链接。 3.完成random结点…

Linux常用命令-文件操作

文章目录 ls基本用法常用选项组合选项示例注意事项 cd基本用法示例注意事项 pwd基本用法示例选项总结 cp基本用法常见选项示例注意事项 rm基本用法常见选项示例删除单个文件:交互式删除文件:强制删除文件:递归删除目录:交互式递归…