实现容器的底层技术

进程间通信:

  1.socket
  2.共享内存
  3.消息队列

为了更好地理解容器的特性,我们将讨论容器的底层实现技术。
cgroup 和 namespace 是最重要的两种技术。cgroup 实现资源限额, namespace 实现资源隔离。

cgroup:
cgroup 全称 Control Group。
Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。
cgroup 到底长什么样子呢?我们可以在 /sys/fs/cgroup 中找到它。还是用例子来说明,启动一个容器,设置内存为512M
在 /sys/fs/cgroup/memory/docker 目录中,Linux 会为每个容器创建一个 cgroup 目录,以容器长ID 命名:
 
对内存使用限制:
   Docker 可以通过 -c 或 –cpu-shares 设置容器使用 CPU 的权重。如果不指定,默认值为 1024。
与内存限额不同,通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。

换句话说:通过 cpu share 可以设置容器使用 CPU 的优先级。
比如在 host 中启动了两个容器:
docker run –name “containerA” -c 1024 httpd
docker run –name “containerB” -c 512 httpd
containerA 的 cpu share 1024,是 containerB 的两倍。当两个容器都需要 CPU 资源时,containerA 可以得到的 CPU 是 containerB 的两倍。
需要特别注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 containerA 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。
 
可以在这里找到设置的cpu

[[email protected] ~]# cat /sys/fs/cgroup/cpu/docker/a1f00b2682796ec9d0c64c8356645ecaeba95c622b4d306124c01d17fd9e5829/cpu.shares
512

namespace:
   在每个容器中,我们都可以看到文件系统,网卡等资源,这些资源看上去是容器自己的。拿网卡来说,每个容器都会认为自己有一块独立的网卡,即使 host 上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机。
Linux 实现这种方式的技术是 namespace。namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离。
Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User,下面我们分别讨论。
 
Mount namespace
Mount namespace 让容器看上去拥有整个文件系统。
容器有自己的 / 目录,可以执行 mount 和 umount 命令。当然我们知道这些操作只在当前容器中生效,不会影响到 host 和其他容器。
 
UTS namespace
简单的说,UTS namespace 让容器有自己的 hostname。 默认情况下,容器的 hostname 是它的短ID,可以通过 -h 或 --hostname 参数设置。
 
IPC namespace
IPC namespace 让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起。
 
PID namespace
容器在 host 中以进程的形式运行。容器内进程的 PID 不同于 host 中对应进程的 PID,容器中 PID=1 的进程当然也不是 host 的systemd进程。也就是说:容器拥有自己独立的一套 PID,这就是 PID namespace 提供的功能。
 
Network namespace
Network namespace 让容器拥有自己独立的网卡、IP、路由等资源。
 
User namespace
User namespace 让容器能够管理自己的用户,host 不能看到容器中创建的用户。

原文地址:https://www.cnblogs.com/twoo/p/11815599.html

时间: 2024-11-01 17:29:50

实现容器的底层技术的相关文章

实现容器的底层技术 - 每天5分钟玩转 Docker 容器技术(30)

为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术.cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额, namespace 实现资源隔离. cgroup cgroup 全称 Control Group.Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额.相信你已经猜到了:前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 到底长什么

第 4 章 容器 - 030 - 实现容器的底层技术

实现容器的底层技术 cgroup 和 namespace 是最重要的两种技术. cgroup 实现资源限额 namespace 实现资源隔离 cgroup cgroup 全称 Control Group. Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额. 前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 存在 /sys/fs/cgroup 文件中. 举个例子:启动一个容

28-实现容器的底层技术

为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术.cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额, namespace 实现资源隔离. cgroup cgroup 全称 Control Group.Linux 操作系统通过 cgroup 可以设置进程使用 CPU.内存 和 IO 资源的限额.相信你已经猜到了:前面我们看到的--cpu-shares.-m.--device-write-bps 实际上就是在配置 cgroup. cgroup 到底长什么

030、实现容器的底层技术(2019-01-25 周五)

参考https://www.cnblogs.com/CloudMan6/p/7045784.html 为了更好的理解容器的特性,本节我们将讨论容器的底层实现技术. cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额,namespace 实现资源隔离 cgroup 全程 Control Group .Linux操作系统通过 cgroup 可以设置进程使用CPU.MEM 和 IO 资源的限额.就是我们前面学习的参数 --cpu-shares -m --device-

各大公司容器云的技术栈对比

郑昀编著于2015/10/20 目前来看,几家历史包袱较重的公司都选择不让上层应用感知到底层是 VM 还是容器,所以都改了 docker 内核,如360.点评.汽车之家.最后附上我们的容器私有云技术栈以及系统截图. 点评容器技术栈 2014年启动基于 docker 搭建私有云,之前谈不上使用过私有云 运维工具:Puppet NATS+Nginx+Zookepper: 组件之间的交互使用了 NATS,通过消息的『发布-订阅』模型,将各个组件之间的耦合最小化 对于Web类型的应用,通过和 Nginx

关联容器(底层机制) — hashtable

C++ 11已将哈希表纳入了标准之列.hashtable是hash_set.hash_map.hash_multiset.hash_multimap的底层机制,即这四种容器中都包含一个hashtable. 解决碰撞问题的办法有许多,线性探测.二次探测.开链等等.SGI STL的hashtable采用的开链方法,每个hash table中的元素用vector承载,每个元素称为桶(bucket),一个桶指向一个存储了实际元素的链表(list),链表节点(node)结构如下: template <cl

从容器和 Kubernetes 技术看现代云计算的发展轨迹

容器化技术(containerization). 你可能会有很多疑惑:容器到底是什么,它究竟怎样工作?Docker.Kubernetes到底指的是什么,Google Container Engine以及Managed VM又有什么用?它们之间有何关联,我们如何通过容器来构建一个功能强大的服务,并且能让它们在生产环境的大规模集群中使用? 用户采用这种技术,怎样才能获得商业价值?好了,我们不再卖关子,接下来就直入主题.我们首先会对容器技术进行具体的介绍,之后讲述容器技术究竟如何使我们更好地进行工作.

Docker底层技术Namespace &amp; Cgroup应用

Docker底层技术: docker底层的2个核心技术分别是Namespaces和Control groupsNamespace:是容器虚拟化的核心技术,用来隔离各个容器,可解决容器之间的冲突. 主要通过以下六项隔离技术来实现:有两个伪文件系统:/proc和/sys/ UTS:允许每个container拥有独立的hostname(主机名)和domainname(域名),使其在网络上可以被视作一个独立的节点而非Host上的一个进程. IPC:contaner中进程交互还是采用linux常见的进程间

AWS Lambda&Fargate 无服务底层技术是如何实现的

一.AWS Serverless 服务 近些年 AWS 非常推崇无服务器模式,自从2014年 Lambda 发布之后,无服务器大受欢迎,随之 2017 年推出 AWS Fargate 服务,应用于自家的容器服务平台 ECS.在 2019 年,EKS 也相继支持 AWS Fargate. 现在,更多的用户使用无服务器计算来构建应用程序,AWS 旨在打造让用户无需担心基础设施的预置或管理问题.开发人员可以使用 AWS Fargate 将其代码封装为无服务器容器,或使用 AWS Lambda 封装为无