深入剖析Kubernetes--第二章:容器技术基础

Cgroups & Namespace

Cgroups技术是用来制造约束的主要手段,Namespace技术是用来修改进程视图的主要方法

​ docker 容器实际上是再创建容器进程时,指定了该进程所需要启用的一组Namespace参数,这样容器就只能看到当前Namespace所指定的资源、文件、设备、状态或者配置。容器也是一种特殊的进程。

虚拟机和容器
虚拟机

​ 虚拟机软件通过硬件虚拟化功能模拟出了一个操作系统所需要的各种硬件,比如CPU、内存、I/O设备等,然后再这些虚拟的硬件上安装一个新的操作系统。

Docker

​ 在启动进程的同时,为它们加上了各种的Namespace参数,使得只能看到各自Mount Namespace 里挂载的目录和文件,只能访问到各自Namespace里的网络设备。

Linux Cgroups

​ Linux内核中用来为进程设置资源限制的一个重要功能

​ Cgroups 向用户暴露出来的操作接口是文件系统(操作系统的/sys/fs/cgroup)(一个子系统目录加上一组资源限制文件的组合)

​ 对于容器而言,需要在每个子系统下为每个容器创建一个控制组(一个新目录),然后在启动容器进程之后,把这个进程的PID填写到对应控制组的tasks文件中即可。

mount 挂载linux系统外的文件
mount -l 显示已加载的文件系统列表
MountNamespace

​ 在容器进程启动前,重新挂载他的整个根目录“/”,这个操作对宿主机不可见。(使用chroot改变进程的根目录到指定位置)

#假设有一个$HOME/test目录,将他作为一个/bin/bash进程的根目录
#首先创建一个test目录和几个lib文件夹
mkdir -p $HOME/test
mkdir -p $HOME/test/{bin,lib64,lib}
cd $T

#然后把bash命令复制到test目录所对应的bin路径下
cp -v /bin/{bash,ls} $HOME/test/bin
T=$HOME/test
list="$(ldd /bin/ls  | egrep -o '/lib.*\.[0-9]')"
for i in $list;do cp -v "$i" "${T}${i}";done
#最后执行chroot命令(使用$HOME/test作为/bin/bash进程的根目录)
chroot $HOME/test /bin/bash

​ 挂载在容器根目录上用来为容器进程提供隔离后执行环境的文件系统(容器镜像),即rootfs(根文件系统)(只是一个操作系统所包含的文件,配置和目录,不包括操作系统内核)

综上所述:

docker最核心的原理就是为待创建的用户进程:启动LinuxNamespace配置,设置指定的Cgroups参数,切换进程的根目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值