如何在云计算基础架构平台中创建云主机
149
2023-10-25
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》一书中第1章,第3节,由陆平、左奇、付光和张晗等编著。
1.3.2 容器
容器是Docker引擎的核心服务对象,也是应用的运行环境,需要从以下几个方面来了 解其特点。
隔离环境
在Linux下,由创建容器的各个只读镜像层叠加容器可读写层以及运行时准备的特殊 目录/文件(比如,/proc、/dev和/sys等),构成了每个容器可访问文件系统的初始边界, 并由Mount 命名空间来增强其隔离性。通过绑定挂载附加的数据卷,还能动态扩展这个视 图的边界。
容器运行时不仅会根据镜像中内容为容器准备好根文件系统视图,还会为容器中的应 用准备好/proc、/dev、/sys、/dev/pts和/dev/mqueue等虚拟文件系统;准备好/dev/null、1 dev/zero、/dev/full、/dev/tty、/dev/random等各种支持 POSIX API所需要的特殊文件;将/ proc/asound、/proc/bus、/proc/sys、/proc/fs 等路径设置为只读;将/sys/fireware文件,以 及/proc下 的 kcore、keys、scsi、latency stats、timer list、timer stats 和 sched debug 这 几个文件做屏蔽处理,使得应用在容器中对其无法读取到有意义的内容。为了网络应用的 正常执行,容器运行时还会准备好/etc/hosts、/etc/resolv.conf和/etc/hostname 这几个文件, 通过绑定挂载方式将它们链接到容器根文件系统中。容器运行时会根据创建容器时的参数, 设置应用的UID、GID、 归属的补充gid列表、当前路径、环境变量和 oom 设置值。
为了实现容器隔离性,在Linux下容器运行时还使用以下一些技术:根据需要启用MOUNT、PID、UTS、IPC、NET 和User命名空间;默认为每个容器新建CGroups
节点、启用所有的控制器;容器中可用设备文件由白名单配置;进程只具有14个默认 Capabilities; 使用默认白名单启用 seccomp控制,并可控制sysctl列表、 selinux 应用标签 和 Apparmor Profile。
总之,容器运行时尽量为应用提供一致和标准的运行环境,尽可能确保在共享内核环 境下容器之间的隔离性。用户也可通过API 接口参数来控制这一过程。
■ 容器生命周期管理
Docker引擎提供了容器生命周期管理功能,并将容器的运行状态分为created、 running、pausing、paused和 stopped。 容器运行时提供 create、start、run、pause、resume、 kill、delete等命令来管理容器的运行状态,并通过 list、state、ps、events等命令来获取 容器运行信息,还能通过update命令动态调整容器的 CPU、 内存和I/O的资源限制,通过 exec在已经启动的容器中执行命令,通过 checkpoint 和restore命令执行生成检查点和恢复 检查点的操作。
容器运行时依靠静态/动态两种json格式元数据实现容器的生命周期管理。静态元数 据保存配置信息,动态元数据对应状态信息,两者格式差异不大,后者增加了状态数据。 静态数据首先用于创建,而运行时可根据容器ID 找到动态数据,再利用进程号、根路径、 命名空间路径、 CGroup 路径等执行进一步操作。启动容器时的 create/start 两个步骤也据此 关联起来,并可执行钩子程序。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~