- 一文详解容器技术简介和基本原理
- 首个国家标准发布!曙光云HCI 超融合系统展现全栈能力
- 解码区块链:颠覆性分布式技术的未来启示录
- OceanBase全员信:进入AI时代CTO杨传辉担任AI一号位
- OceanBase全员信:全面拥抱AI打造AI时代的数据底座
联系人:王经理
手机:13928851055
电话:13928851055
邮箱:sgbwre@163.com
地址:广州市天河南一街14-16号华信大夏四楼
一文详解容器技术简介和基本原理
本文全面阐述了容器技术的发展历程、关键技术、架构和当前的行业生态,特别是容器技术在云环境中的应用和演进。
容器是一种虚拟化技术,用于封装应用程序及其所有依赖项和配置,以便能够在不同的计算机环境中运行。软件容器提供了一种轻量级、一致性的运行环境,使得应用程序在开发、测试和部署时更加可移植和可靠。
1.跨平台性:容器可以在不同的操作系统和云平台上运行,确保应用程序在各种环境中的一致性。这种跨平台性使得应用程序更易于移植和部署。
2.一致性和可重复性:容器封装了应用程序及其所有依赖项和配置,确保了开发、测试和生产环境的一致性。通过使用容器,可以避免由于环境差异而引起的问题,实现可重复的构建和部署过程。
3.资源隔离:容器提供了一定程度的隔离,使得多个容器可以在同一主机上并行运行而互不干扰。这种隔离性能够确保应用程序的稳定性和安全性。
4.快速部署和启动:容器可以在几秒钟内启动,相比于传统的虚拟机来说,启动时间更短。这使得应用程序的部署和扩展更加迅速和灵活。
5.高可伸缩性:容器架构支持自动化的横向扩展,可以根据需求动态地增加或减少容器实例。这种高可伸缩性使得应用程序能够更好地应对流量和负载的变化。
6.环境隔离:容器提供了独立的运行环境,每个容器都有自己的文件系统、网络和进程空间。这种环境隔离有助于防止应用程序之间的相互影响,提高了系统的稳定性和安全性。
7.资源效率:容器共享主机操作系统的内核,相比虚拟机,容器更加轻量级,更加节省系统资源。
8.持续集成和持续部署(CI/CD): 容器与持续集成和持续部署工具集成紧密,使得开发团队能够更容易地实现自动化构建、测试和部署流程。
1974 年波佩克和戈德堡在论文 《可虚拟第三代Kaiyun官网中国架构的规范化条件》 就明确提出了虚拟化系统结构的三个条件:
1.资源控制(Resource Control):控制程序必须能够管理所有的系统资源。2.等价性(Equivalence):在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
3.效率性(Efficiency):绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。
直接运行在物理硬件上,没有底层操作系统。这种类型通常用于企业级虚拟化平台,例如VMware ESXi和Microsoft Hyper-V。
运行在操作系统之上,类似于其他应用程序。这种类型通常用于开发和测试环境,例如Oracle VirtualBox和VMware Workstation。
1.基于操作系统运行:Type 2 Hypervisor 作为软件应用程序安装在宿主操作系统中。宿主操作系统管理硬件资源并为监控程序和其虚拟机提供服务。2.性能开销:由于 Type 2 Hypervisor 在宿主操作系统内运行,虚拟机与物理硬件之间存在额外的层。这可能导致性能开销,与直接在硬件上运行的 Type 1 Hypervisor 相比开销更大。3.易用性和安装方便:Type 2 Hypervisor 通常比 Type 1 Hypervisor 更易安装和配置。用户可以像在标准操作系统上安装常规软件应用程序一样安装它们。4.用途:Type 2 Hypervisor 通常用于开发、测试和桌面虚拟化场景。它们为用户提供了一种方便的方式,在单台机器上运行多个操作系统,而无需专用硬件或复杂的配置。
5.隔离:Type 2 Hypervisor 创建的每个虚拟机都与其他虚拟机以及主机系统隔离。这使用户能够在受控环境中尝试不同的操作系统、配置和应用程序。
硬件虚拟化是一种将物理计算资源抽象和分隔,以创建多个独立的虚拟环境的技术。这种虚拟化的目标是在同一物理硬件上运行多个操作系统和应用程序,从而更有效地利用硬件资源。硬件虚拟化通常涉及使用称为虚拟机(VM)的软件层将物理硬件分隔成多个虚拟环境。
Control Groups(cgroups)是 Linux 内核的一个功能,用于限制、账户和隔离进程组(包括它们的任务和资源)。cgroups提供了对系统资源(如CPU、内存、磁盘 I/O等)的精细控制,允许系统管理员将资源分配和限制应用到一组进程上,是google在2007年提出的,在2008年的时候合并到2.6的linux内核中。
每一个层级结构中是一颗树形结构,树的每一个节点是一个cgroup结构体(比如cpu_cgrp, memory_cgrp)。第一个cgroups层级结构attach了cpu子系统和cpuacct子系统, 当前cgroups层级结构中的cgroup结构体就可以对cpu的资源进行限制,并且对进程的cpu使用情况进行统计。第二个cgroups层级结构attach了memory子系统,当前cgroups层级结构中的cgroup结构体就可以对memory的资源进行限制。
当前云安全中心的客户端使用cgroup已经超过2年的时间,大大提高了客户端的稳定性,减少对客户正常业务的影响。
Linux 的命名空间(namespace)提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的命名空间中以实现资源隔离的目的。
虚拟化容器是以 Linux 名称(namespace)空间的隔离性为基础来实现的,那解决隔离的容器之间、容器与宿主机之间、乃至跨物理网络的不同容器间通信问题的责任,很自然也落在了 Linux 网络虚拟化技术的肩上。
Linux 网络虚拟化的主要技术是 Network Namespace,以及各类虚拟设备,例如 Veth、Linux Bridge、tap/tun 等,虚拟化的本质是现实世界的映射,这些虚拟设备像现实世界中的物理设备一样彼此协作,将各个独立的 namespace 连接起来,构建出不受物理环境局限的各类网络拓扑架构。
veth:Virtual Ethernet,虚拟以太网设备,用来让两个隔离的Network Namespace可以互相通信,都
Linux bridge,在主机层面,如果需要多个主机之间需要网络联通,那么我们需要一个交换机(二层设备),在linux的虚拟网络系统中,我们可以通过虚拟网桥来实现此功能Linux Bridge是Linux kernel 2.2版本开始提供的二层转发工具,与物理交换机机制一致,能够接入任何二层的网络设备(无论是真实的物理设备,例如eth0或者虚拟设备,例如veth、tap 等)。不过Linux Bridge与普通物理交换机还有有一点不同,普通的交换机只会单纯地做二层转发,Linux Bridge却还能把发给它的数据包再发送到主机的三层协议栈中。
tun/tap:tun和tap是Linux提供的两个相对独立的虚拟网络设备,其中tap模拟了网络层设备,工作在L3,操作IP报文,tun则模拟了以太网设备,工作在L2,操作的是数据帧。当前云网络的基础协议VxLan就是基于隧道技术实现的,比如云网络的基础SDN(Software Definded Network,软件定义网络)。
docker起始于2013年,经历了10年的发展,我们从下面一张图可以窥探docker结合k8s之后的变化。
2015年6月 Docker大会DockerCon推送容器标准,成立OCI组织;
早期Kubernetes完全依赖且绑定Docker,并没有过多考虑够日后使用其他容器引擎的可能性。当时kubernetes管理容器的方式通过内部的DockerManager直接调用Docker API来创建和管理容器。
Docker盛行之后,CoreOS推出了rkt运行时实现,Kubernetes又实现了对rkt的支持,随着容器技术的蓬勃发展,越来越多运行时实现出现,如果还继续使用与Docker类似强绑定的方式,Kubernetes的工作量将无比庞大。Kubernetes要重新考虑对所有容器运行时的兼容适配问题了。
Kubernetes从1.5版本开始,在遵循OCI基础上,将容器操作抽象为一个接口,该接口作为Kubelet 与运行时实现对接的桥梁,Kubelet通过发送接口请求对容器进行启动和管理,各个容器运行时只要实现这个接口就可以接入Kubernetes,这便是CRI(Container Runtime Interface,容器运行时接口)。
从上图可以看出:CRI主要有gRPC client、gRPC Server和具体容器运行时实现三个组件。其中Kubelet作为gRPC Client调用CRI接口,CRI shim作为gRPC Server 来响应CRI请求,并负责将CRI请求内容转换为具体的运行时管理操作。因此,任何容器运行时实现想要接入Kubernetes,都需要实现一个基于CRI接口规范的CRI shim(gRPC Server)。
容器网络,提供了一些接口,允许网络插件通过CNI(Container Networking Interface)与容器交互,实现容器的网络连接和配置;
它通过集成Linux命名空间、cgroups等技术,确保容器在运行时与其他容器和主机系统隔离;
OCI标准支持,对遵循 Open Container Initiative(OCI) 标准,这意味着它与符合 OCI 规范的容器和镜像兼容。
这种标准化使得 containerd 能够与其他符合同一规范的工具和平台集成;
插件系统,提供了一个插件系统,允许用户根据需要扩展其功能。这意味着用户可以选择使用特定的存储后端、日志记录器等插件,以满足其特定的需求。
上面containerd官方提供的架构图,可以看出containerd采用的是C/S架构,服务端通过unix domain socket暴露低层的gRPC API接口出去,客户端通过这些API管理节点上的容器,每个containerd只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成。具体运行容器由runc负责,实际上只要是符合OCI规范的容器都可以支持。
Snapshot Plugin: 用来管理容器镜像的文件系统快照,镜像中的每一层都会被解压成文件系统快照。
bundles是指被Runtime使用的配置、元数据、rootfs数据。一个bundle就是一个运行时的容器在磁盘上的表现形式,简化为文件系统中的一个目录。
1.指示Distribution Controller去拉取一个具体的镜像,Distribution将镜像分层内容存储到内容存储中(content store),将镜像名和root manifest pointers注册到元数据存储中(metadata store)。
一旦镜像拉取完成,用户可以指示Bundle Controller将镜像分解包到一个bundle中。
4.然后将准备好的bundle给Runtime子系统以执行, Runtime子系统将读取bundle配置来创建一个运行的容器。
容器的标准化操作包括使用标准容器感觉创建、启动、停止容器,使用标准文件系统工具复制和创建容器快照,使用标准化网络工具进行下载和上传;
内容无关指不管针对的具体容器内容是什么,容器标准操作执行后都能产生同样的效果。
如容器可以用同样的方式上传、启动,不管是 php 应用还是mysql数据库服务;
无论是个人的笔记本电脑还是AWS S3,亦或是Openstack,或者其他基础设施,都应该对支持容器的各项操作;
制定容器统一标准,是操作内容无关化、平台无关化的根本目的之一,就是为了可以使容器操作全平台自动化;
即如何运行一个容器,如何管理容器的状态和生命周期,如何使用操作系统的底层特性(namespace,cgroup,pivot_root 等);
尽管容器有许多技术优势,然而传统以runc为代表基于共享内核技术进行的软隔离还是存在一定的风险性。如果某个恶意程序利用系统缺陷从容器中逃逸,就会对宿主机造成严重威胁,尤其是公有云环境,安全威胁很可能会波及到其他用户的数据和业务。
将虚拟机的安全优势与容器的高速及可管理性相结合,为用户提供标准化、安全、高性能的容器解决方案,于是就有了Kata Containers 。
Kata Containers运行符合OCI规范,同时兼容Kubernetes CRI(虚拟机级别的Pod 实现)。为了缩短容器的调用链、高效地和Kubernetes CRI集成,Kata-Container 直接将containerd-shim和kata-shim以及kata-proxy融合到一起。CRI和Kata Containers的集成下图所示:
常见的编排工具有mesos,swarm,k8s等,当前市场最流行的还是k8s。
标准化,k8s定义了一套自己的标准,不强依赖docker,只要符合OCI和CRI规范,都能接入;
ECI从1.0已经演进到当前的3.0,从运营在on ecs到和ecs混部。
ECS/ECI/下一代......);3.IaaS中台(资源装配车间)EBS以及下面服务没有IaaS产品概念,都是资源;4.资源供给&资源调度&资源编排;5.2 如何生产一个ECI实例
1、ECI管控侧调用pync(阿里云单机管控组件)进而调用dpdkavs(阿里云单机网络组件)/tdc(阿里云单机存储组件)分别生产网卡与磁盘[备注: 这里磁盘只用来做数据盘,所有guest的系统盘均共用一块盘,实现存储的共享];
2、ECI管控侧调用eciproxy(eci管控转发组件)进而调用libvirt api生产moc上的iohub实例(阿里云神龙平台设备模拟组件),生产后的iohub实例将网卡与磁盘以bdf的形式映射到cn里;
前面已经介绍了kata-container,rund是阿里云在容器安全的实现方案,RunD 作为一种轻量级安全容器运行时,提出了 host-to-guest 的全栈优化方案来解决以下三个问题:
客户机中的操作系统基础映像等可以在多个安全容器间共享和按需压缩以降低内存开销;
以kata作为容器运行时,并发瓶颈点在于创建rootfs(红色块步骤1)和创建cgroups(红色线)密度瓶颈点在于MicroVM的高额内存开销(蓝色块步骤2)和大量cgroups的调度维护开销(蓝色块步骤3)。
RunD设计并总结了host-to-guest的全栈解决方案。RunD运行时通过virtio-fs提供只读层,使用built-in storage为virtio-blk创建一个非持久的读写层,并使用 overlayfs将前者和后者挂载为最终的容器rootfs,从而进行读/写分离。RunD利用集成了精简内核的microVM模板,并采用预处理的镜像创建一个新的microVM,进一步分摊了不同的microVM的开销。在创建安全容器时,RunD从cgroup池绑定一个轻量级的cgroup进行资源管理。
基于上述优化,当使用RunD作为安全容器运行时,安全容器将按照以下步骤启动:
第一步:一旦containerd接收到用户调用,它将请求转发给RunD运行时;
最后一个轻量级的cgroup从cgroup池中被重命名,然后绑定到沙箱上,管理资源使用。
并发性能总结:RunD能够在88ms内启动一个单独沙盒,并具备在 1 秒内同时启动 200个沙箱的并发能力,与现有技术相比,具有最小的延迟波动和CPU开销。
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
在k8S中,初始化容器(init container)概念原理是什么?
(九)深入并发编程之并发容器:阻塞队列、写时复制容器、锁分段容器原理详谈
Serverless 容器从入门到精通: - Serverless Kubernetes
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
harmonyOS基础- 快速弄懂HarmonyOS ArkTs基础组件、布局容器(前端视角篇)
揭秘 Microsoft.Docker.SDK:让容器开发更轻松的强大工具揭秘
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
云上应用管理问题之为什么很多业务会采用包年包月 + 按量付费的混合付费方式
单元测试问题之LoginServiceImpl以避免对IpUtil的依赖问题如何解决
- 上一篇:首个国家标准发布!曙光云HCI 超融合系统展现全栈能力
- 下一篇:暂无
-
2025-04-28一文详解容器技术简介和基本原理
-
2025-04-28首个国家标准发布!曙光云HCI 超融合系统展现全栈能力
-
2025-04-27聚焦 “创新 + 数字” 中濠国际酒店为轻奢酒店发展注入新动能
-
2025-04-27欧派2025“爱家季”IP重磅发布!定义中国家庭幸福GDP新标准
-
2025-04-26阿里云叔同:以容器为代表的云原生技术已成为释放云价值的最短路径
-
2025-04-26洲明科技:4月24日召开业绩说明会摩根隆裕、万全智策等多家机构参与
-
2025-04-26云容器是什么?怎么使用?
-
2025-04-26云计算容器 的相关内容