Kubernetes 知识体系 系列一

news/2024/4/29 23:15:03/文章来源:https://blog.csdn.net/weixin_39082432/article/details/137121510

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

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

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

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

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

相关文章

2024最新华为OD机试试题库全 -【二叉树计算】- C卷

1. 🌈题目详情 1.1 ⚠️题目 给出一个二叉树如下图所示: 请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 1.2 �…

钡铼技术R40路由器助力构建无人值守的智能化污水处理厂

钡铼技术R40路由器作为智能化污水处理厂的关键网络设备,发挥着至关重要的作用,助力构建无人值守的智能化污水处理系统。在现代社会,污水处理是城市环境保护和可持续发展的重要组成部分,而智能化污水处理厂借助先进的技术和设备&am…

OPC560:打造智能制造领域的通讯桥梁

描述:随着工业4.0时代的到来,智能制造已成为推动工业发展的核心力量。在这一背景下,高效、稳定的数据通讯系统成为连接设备、平台和人员的关键。OPC560以其强大的功能和兼容性,为智能制造领域的数据通讯提供了全新解决方案。本文将…

幻兽帕鲁服务器价格表_阿里云/腾讯云/京东云/华为云报价大全

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

极简wordpress网站模板

Pithy设计师wordpress网站模板 精练简洁的wordpress模板,设计师或设计工作室展示型网站模板。 https://www.jianzhanpress.com/?p6329

网络编程综合项目-多用户通信系统

文章目录 1.项目所用技术栈本项目使用了java基础,面向对象,集合,泛型,IO流,多线程,Tcp字节流编程的技术 2.通信系统整体分析主要思路(自己理解)1.如果不用多线程2.使用多线程3.对多线…

数据库管理开发工具Navicat for MySQL Mac版下载

Navicat for MySQL(Mac版)是一款强大的数据库管理开发工具,专为MySQL设计。它提供直观的用户界面,支持数据建模、查询构建、数据传输等功能,帮助用户轻松管理数据库。其特点包括高效的数据处理能力、安全的数据传输机制…

mysql80-DBA数据库学习1-数据库安装

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

Flutter Provider 使用指南详解

介绍 在Flutter应用程序开发中,状态管理是一个至关重要的方面。随着应用程序的复杂性增加,有效地管理和共享状态变得至关重要。Flutter Provider是一个流行的状态管理解决方案,它提供了一种简单而强大的方式来管理Flutter应用程序中的状态。…

Web Components初探

组件化,标签语义化,是前端发展的趋势。现在流行的组件化框架有React、Vue等,标签语义化在H5中添加的article、dialog等。 Web Components 就是类似的一套技术,允许您创建可重用的定制元素,并且在您的web应用中使用它们…

2024河北石家庄矿业矿山展览会|河北智慧矿山展会|河北矿博会

2024中国(石家庄)国际矿业博览会      时间:2024年7月4-6日 地点:石家庄国际会展中心.正定      随着全球经济的持续增长和矿产资源需求的不断攀升,矿业行业正迎来前所未有的发展机遇。作为矿业领域的盛会&…

代码随想录算法训练营第day60|84.柱状图中最大的矩形

84.柱状图中最大的矩形 力扣题目链接(opens new window) 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路: 为什么这么说呢&#xff…

浏览器工作原理与实践--作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的

在上一篇文章中我们讲到了什么是作用域,以及ES6是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念。 理解作用域链是理解闭包的基础&#…

如何在Linux系统使用Docker本地部署Halo网站并实现无公网IP远程访问

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可…

GEC6818开机自动加载驱动与更改开发板的RTC时钟

GEC6818开机自动加载驱动与更改开发板的RTC时钟 本文主要涉及: 1.GEC6818开机自动加载驱动 2.更改开发板的RTC时钟 文章目录 GEC6818开机自动加载驱动与更改开发板的RTC时钟一、开机自动加载驱动或运行程序**STEP1:** 使用vi打开文件profile.命令如下**S…

Gitlab的流水线任务【实现每小时自动测试 dev分支的更新】

背景 在现代软件开发实践中,持续集成(Continuous Integration, CI)是确保代码质量和快速响应软件缺陷的关键策略。GitLab 提供了强大的 CI/CD 功能,允许开发者自动化测试和部署流程。本文将介绍如何设置 GitLab 流水线计划任务&a…

GPT5都要来了,现在登录就送!!!

据《商业内幕》报道,OpenAI计划在未来几个月内推出ChatGPT的更强大版本。 据两位知情人士透露,这款名为GPT-5的新型人工智能模型预计将在今年夏天发布。在发布之前,一些企业据称已经尝试了该工具的演示版本,以测试其升级后的能力。…

Windows系统安装Elasticsearch结合内网穿透实现远程团队数据共享

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多…

php 快速入门(七)

一、操作数据库 1.1 操作MySQL的步骤 第一步:登录MySQL服务器 第二步:选择当前数据库 第三步:设置请求数据的字符集 第四步:执行SQL语句 1.2 连接MySQL 函数1:mysql_connect() 功能:连接(登录…

权限提升-Win系统权限提升篇AD内网域控NetLogonADCSPACKDCCVE漏洞

知识点 1、WIN-域内用户到AD域控-CVE-2014-6324 2、WIN-域内用户到AD域控-CVE-2020-1472 3、WIN-域内用户到AD域控-CVE-2021-42287 4、WIN-域内用户到AD域控-CVE-2022-26923 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权…