19、架构-虚拟化容器

概述

本文讲解虚拟化容器技术的发展及其在现代计算架构中的应用。内容分为三个主要部分:容器的崛起、以容器构建系统、以应用为中心的封装。以下是对每个知识点的详细描述。

1、 容器的崛起

容器技术的快速发展和广泛应用为软件开发和运维带来了巨大的变革。以下是容器技术崛起过程中几个关键技术和工具的演变。

 隔离文件:chroot

1979年,UNIX 7系统引入了chroot命令,作为实现文件系统隔离的工具。chroot通过将进程的根目录重新定义为指定位置,使得该进程只能访问该目录及其子目录,起到了隔离文件系统的作用。这种技术最初用于创建安全的测试环境和蜜罐系统,监控黑客的活动

访问:名称空间

2002年,Linux内核开发者提出了名称空间(Namespaces)技术,用于隔离系统资源,包括进程ID、用户ID、主机名、文件系统、网络、IPC(进程间通信)等。每个名称空间提供一个独立的资源视图,使得容器中的进程看不到其他名称空间中的资源,实现了高效的资源隔离。

 隔离资源:cgroups

cgroups(Control Groups)由Google工程师于2006年发起,旨在限制和隔离不同进程组的资源使用。cgroups能够控制CPU、内存、磁盘I/O等资源的分配和限制,确保各个进程组之间的资源使用互不干扰。cgroups技术在2008年合并到Linux Kernel 2.6.24中,并在2016年的Linux Kernel 4.5中进行了重要改进,支持统一层级管理,使资源控制更加精确和高效。

 封装系统:LXC

2008年,Linux推出了LXC(Linux Containers),这是第一个系统级的容器实现。LXC利用cgroups和namespaces技术,提供了轻量级的虚拟化解决方案,使用户可以轻松创建和管理容器。LXC的出现标志着容器技术从实验室走向了实际应用。

封装应用:Docker

2013年,Docker发布,极大地简化了应用程序的分发和部署。Docker通过将应用程序及其依赖打包成一个独立的容器,实现了跨平台运行的一致性,真正实现了“封装一次,到处运行”的目标。Docker的出现迅速改变了软件打包和分发的方式,并被广泛采用。

 封装集群:Kubernetes

Kubernetes于2014年发布,提供了强大的容器编排功能,使得应用能够在跨数据中心的集群环境中运行。Kubernetes通过自动扩展、负载均衡和故障恢复等功能,极大地提升了容器管理的效率和可靠性。2017年,Kubernetes在容器编排领域取得了胜利,成为事实上的行业标准。

2、 以容器构建系统

容器技术不仅提供了独立的运行环境,而且通过有效的调度和管理机制,使构建复杂的分布式系统成为可能。以下是容器构建系统中的关键概念和方法。

隔离与协作

容器在提供独立运行环境的同时,也需要考虑多容器之间的协作。隔离是指将应用程序及其依赖打包在一个容器中,避免与其他容器发生冲突。协作是指在复杂系统中,不同容器之间的交互和通信。

  • Pod和Service:在Kubernetes中,Pod是最基本的调度单元,一个Pod可以包含一个或多个容器。Pod内的容器共享网络命名空间和存储卷,可以进行紧密协作。Service是一个抽象,定义了一组Pod的访问策略,提供负载均衡和服务发现功能。

  • 容器编排:Kubernetes作为容器编排工具,管理容器的调度、部署、扩展和运行。通过控制器(如Deployment、StatefulSet和DaemonSet)管理容器的生命周期,确保系统的稳定和高可用性。

  • 网络模型:Kubernetes使用扁平的网络模型,所有Pod都处于同一个网络空间,可以直接互相通信。通过Network Policy可以定义网络隔离和访问控制,确保不同应用之间的安全隔离。

韧性与弹性

分布式系统的韧性和弹性是保证系统在高负载和部分故障情况下仍能正常运行的关键。Kubernetes提供了多种机制来增强系统的韧性和弹性。

  • 健康检查:Kubernetes提供了两种健康检查机制:liveness probe和readiness probe。Liveness probe用于检测容器是否需要重启,readiness probe用于判断容器是否已经准备好接收流量。通过这两种探针,Kubernetes能够自动处理容器的异常情况,确保系统的稳定性。

  • 自动扩展:Kubernetes支持水平和垂直两种扩展方式。水平扩展是通过增加或减少Pod的数量来应对负载变化,垂直扩展是通过调整Pod的资源请求和限制来优化性能。Kubernetes的Horizontal Pod Autoscaler(HPA)和Vertical Pod Autoscaler(VPA)分别实现了这两种扩展方式。

  • 故障恢复:Kubernetes具有自愈能力,当Pod或节点发生故障时,会自动重新调度和恢复受影响的容器。通过ReplicationController、ReplicaSet等控制器,确保系统始终维持预定义的运行状态。

3、以应用为中心的封装

随着容器技术的发展,应用为中心的封装方法和工具不断涌现,以简化容器化应用的管理和部署。以下是几种主要的工具和方法。

 Kustomize

Kustomize是Kubernetes原生的配置管理工具,允许用户通过覆盖和变更资源定义来定制Kubernetes应用,而无需修改原始的YAML文件。这种声明式管理方式使得应用配置更加灵活和可维护。

  • 基础配置和变更:Kustomize通过创建基础配置(base)和变更(overlay)来管理不同环境下的应用配置。基础配置包含应用的基本设置,变更文件则覆盖或修改这些基础设置,以适应特定环境的需求。

  • 资源生成:Kustomize支持生成ConfigMap和Secret等资源,使得敏感信息和配置数据的管理更加简便和安全。

Helm与Chart

Helm是Kubernetes的包管理工具,通过Helm Chart定义、安装和升级复杂的Kubernetes应用。Chart是Helm的包格式,包含了应用的Kubernetes资源定义和安装参数。

  • Chart结构:一个Helm Chart通常包含Chart.yaml(描述Chart的元数据)、values.yaml(默认配置值)、templates目录(资源模板)和其他文件。通过定义Chart,用户可以轻松管理应用的所有Kubernetes资源。

  • 安装和升级:Helm提供简单的命令行工具,帮助用户安装、升级和回滚应用。Helm的版本控制和回滚功能,确保在应用升级过程中能够快速恢复到稳定版本。

Operator与CRD

Operator是一种用于管理复杂Kubernetes应用的模式,通过编码特定应用的运维逻辑,自动执行应用的生命周期管理。Operator使用自定义资源定义(CRD)来扩展Kubernetes的API,使得应用管理更加自动化和智能化。

  • 自定义资源定义(CRD):CRD允许用户定义新的Kubernetes资源类型,通过扩展Kubernetes API,实现对特定应用的管理需求。Operator通过CRD监控和管理这些自定义资源。

  • 自动化运维:Operator将人类运维工程师的知识编码到软件中,自动执行复杂的运维任务,如备份、恢复、扩展和更新。通过这种方式,Operator能够大大降低运维的复杂性,提高系统的可靠性。

开放应用模型

开放应用模型(Open Application Model, OAM)是一种声明式的应用描述规范,旨在跨越不同的云平台和编排工具,提供一致的应用部署和管理体验。

  • 组件和特性:OAM定义了应用的组件、特性和工作流。组件是应用的基本单元,特性则定义了组件的运行时属性和行为。通过这些定义,OAM实现了应用的标准化管理。

  • 跨平台兼容:OAM的设计目标是实现跨平台兼容,无论是在本地数据中心还是在不同的云平台上,OAM都能提供一致的应用管理体验。通过这种方式,OAM简化了应用的迁移和部署过程。

总结

通过容器技术的不断发展和创新,现代计算架构在灵活性、可扩展性和可靠性方面取得了显著进步。从chroot到cgroups和namespaces,再到Docker和Kubernetes,容器技术为构建高效的分布式系统提供了坚实的基础。通过Kustomize、Helm、Operator和OAM等工具,容器化应用的管理和部署变得更加高效和自动化,使得云原生应用的发展更加迅速和便捷。

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

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

相关文章

前端性能优化篇之webpack如何提⾼的打包速度、如何减少打包体积、如何⽤来优化前端性能、如何提⾼构建速度?

目录 如何提⾼webpack的打包速度?1. 使用最新版本的Webpack和相关插件:2. 合理配置Loader:3. 使用HappyPack或thread-loader:4. 使用DllPlugin预编译依赖模块:5. 使用Tree Shaking:6. 使用缓存:7. Code Sp…

MySQL 函数

1、CURDATE():返回当前的日期。 2、查询当前年月 SELECT DATE_FORMAT(CURDATE(),%Y-%m) AS year_month 3、当前日期添加 1 个月 INTERVAL 1 MONTH 4、查询近6个月的月份 SELECT DATE_FORMAT(CURDATE(),%Y-%m)AS year_month UNION SELECT DATE_FORMAT((CURDAT…

【网络安全学习】使用Kali做信息收集 -03- <综合侦察>

综合侦察涉及从多个来源收集和分析目标的信息,以了解其背景、特征、潜在漏洞和风险。 下面介绍一些在Kali中常用的综合侦察工具。 1.Dmitry 它是一个命令行工具,可以使用不同的选项来收集目标的各种信息。 Dmitry可以与whois服务和Netcraft服务结合使…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题(一)【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片,内置玄铁64bit RISC-V CPU C906,主频高达600MHz,算力约1380DMIPS。 Model4系列工业级MPU具…

层次越高的人,越“冷漠”?

层次越高的人越冷漠。 人际关系无疑是我们生活中很重要的一部分。 我们生来渴望连接和互动,但这种渴望有时会让我们忘记自己的需求和边界。 我们可能会牺牲掉自己的时间,经历和情感迎合别人,以求得到认可和爱。 然而,当我们在人际…

HTML5 Web Workers: 异步编程的强大力量

在现代Web开发中,随着应用程序变得越来越复杂,用户界面的流畅性和响应性成为了决定用户体验好坏的关键因素之一。传统的JavaScript执行模型中,所有脚本都在同一个线程上运行,这意味着复杂的计算任务会阻塞UI更新,导致页…

BizDevOps全局建设思路:横向串联,纵向深化

本文来自腾讯蓝鲸智云社区用户:CanWay BizDevOps概述 IT技术交付实践方法在不断迭代中持续优化。在工业化时代,Biz(业务)、Dev(开发)、Ops(运维)三者往往相对分离,甚至有…

Transformer预测 | 基于Transformer+LSTM股票价格预测时间序列预测(Pytorch)

效果一览 基本介绍 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量地进行衡量。但如今,借助于机器学习,可以通过搭建网络,学习一定规模的股…

Tailwindcss Hover, Focus, Other States (悬停、聚焦和其他状态) Limitations

Tailwindcss Hover, Focus, & Other States (悬停、聚焦和其他状态) Limitations 背景 项目代码有需求是仅在hover状态下显示滚动条,在集成css之前的做法是定义一个css类,编写类的样式如下 .container {height: 300px;overflow-y: hidden; }.cont…

技术专家篇:深入理解Spring Boot配置类中List<Bean>参数的应用

例如 Configuration ConditionalOnClass(LoginUser.class) public class DataPermissionAutoConfiguration {BeanConditionalOnBean(value { PermissionApi.class, DeptDataPermissionRuleCustomizer.class })public DeptDataPermissionRule deptDataPermissionRule(Permissi…

API-操作元素内容

学习目标: 掌握操作元素内容 学习内容: 操作元素内容元素innerText属性元素innerHTML属性案例 操作元素内容: DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。就是操作对象使用的点语法。如果想要修…

Table 宽度超出页面宽度时,出现滚动条,单元格内容不换行实

修改前 方法 <div styleoverflow:auto><table stylewhite-space: nowrap></table> </div>修改后

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景&#xff1a;测试数据既要在fixture方法中使用&#xff0c;同时也在测试用例中使用 使用方法&#xff1a;在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中&#xff0c;也可以在当前测试用例中使用。 原理&#xff1a;参…

推荐一个github项目

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许可禁止转载&#xff0…

Harbor本地仓库搭建003_Harbor常见错误解决_以及各功能使用介绍_镜像推送和拉取---分布式云原生部署架构搭建003

首先我们去登录一下harbor,但是可以看到,用户名密码没有错,但是登录不上去 是因为,我们用了负债均衡,nginx会把,负载均衡进行,随机分配,访问的 是harbora,还是harborb机器. loadbalancer中 解决方案,去loadbalance那个机器中,然后 这里就是25机器,我们登录25机器 然后去配置…

【Ubuntu开发入门之“orangepi H3 linux开发②u-boot移植“】

Ubuntu开发入门之"orangepi H3 linux开发@u-boot移植" 问题描述解决方法获取u-boot源码编译配置u-boot制作并烧录TF 卡结束语郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Allwinner H3 OS:Linux ubuntu开发之“…

8.12 矢量图层面要素单一符号使用二(仅渲染中心点)

文章目录 前言仅渲染中心点&#xff08;Centroid fill&#xff09;QGis设置面符号为仅渲染中心点&#xff08;Centroid fill&#xff09;二次开发代码实现仅渲染中心点&#xff08;Centroid fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中仅渲染中心点&#xf…

DSP——从入门到放弃系列2——PLL锁相环(持续更新)

1、概述 锁相环&#xff08;Phase Locked Loop,PLL&#xff09;是处理器的时钟源&#xff0c;控制着C6678处理器中C66x内核、各外围设备的时钟的时钟比、对准和选通功能。 2、功能描述 上图显示了PLL和PLL控制器的逻辑实现。PLL控制器提供通过软件可配置的分频器&#xff0…

MT8766安卓4G核心板_MTK联发科PCBA方案开发

MT8766是联发科四核4G模块方案&#xff0c;安卓一体板。 采用台积电 12 nm FinFET 制程工艺&#xff0c;4*A53架构&#xff0c;Android 9.0操作系统&#xff0c;搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力&#xff0c;专为具有…

离散数学学习总结

今天看了离散数学的第一章&#xff0c;也是简单来总结一下离散数学第一章的知识点 1.1命题符号化及联结词 命题&#xff1a;能够判断真假的陈述句&#xff0c;以及具有唯一的真值 命题三要素&#xff1a;1.能够判断真假 2.陈述句 3.具有唯一真值 联结词&#xff1a; 1.否定…