深刻剖析Kubernetes学习笔记:容器基础(05-06)

05 :从进程提及

一、容器自己没有价值,有价值的是"容器编排"

二、什么是进程?

一旦"程序"被执行起来,它就从磁盘上的二进制文件,变成node

一、计算机内存中的数据
二、寄存器里的值
三、堆栈中的指令
四、被打开的文件
五、以及各类设备的状态信息的一个集合。

像这样一个程序运行起来后的计算机执行环境的综合,就是咱们今天的主角:进程docker

三、容器技术的核心功能:

一、就是经过约束和修改进程的动态表现,从而为其创造出一个"边界"ubuntu

二、Cgroups 技术是用来制造约束的主要手段bash

三、Namespace 技术则是用来修改进程视图的主要方法。网络

四、Linux容器最基本的实现原理了

[root@luoahong ~]# docker run -it busybox /bin/sh
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
57c14dd66db0: Pull complete
Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
Status: Downloaded newer image for busybox:latest
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
6 root 0:00 ps

请帮我启动一个容器,在容器里执行 /bin/sh,而且给我分配一个命令行终端跟这个容器交互性能

原本,每当咱们在宿主机上运行了一个 /bin/sh 程序,操做系统都会给他分配一个进程编号,好比PID=100
这个编号是进程的惟一标识,就像员工的工牌同样,因此PID=100,能够粗略地理解为这个/bin/sh是咱们公司里的第
100号员工,而第1号员工就天然是比尔 · 盖茨这样统领全局的人物。ui


而除了咱们刚刚用到的 PID Namespace,Linux操做系统还提供了 Mount、UTS、IPC、
Network 和 User 这些 Namespace用来对各类不一样的进程上下文进行“障眼法”操做spa

五、容器,实际上是一种特殊的进程而已

其实是在建立容器进程时,指定了这个进程所须要启用的一组 Namespace 参数。这样,容器就只能“看”到当前
Namespace 所限定的资源、文件、设备、状态,或者配置而对于宿主机以及其余不相关的程序,它就彻底看不到了。操作系统

六、容器和虚拟机的比较


这时,这些进程就会以为本身是各自 PID Namespace,里的第 1 号进程,只能看到各自 Mount Namespace里挂载命令行

用来对各类不一样的进程上下文进行“障眼法”操做

06 :隔离与限制

Namespace 技术实际上修改了应用进程看待整个计算机"视图"被操做系统作了限制,只能"看到"某些指定的内容

一、容器相对于虚拟机最大的优点是?

“敏捷”和“高性能”是容器相较于虚拟机最大的优点,也是它可以在 PaaS 这种更细粒度的资源管理平台上大行其道的重要缘由

优势:“敏捷”和“高性能”
缺点:隔离的不完全

不能被Namespace 化的资源和对象 好比时间

二、限制

一、Linux Cgroups 的全称是 Linux Control Group。它最主要的做用,就是限制一个进程组可以使用的资源上限,包括CPU、内存、磁盘、网络带宽等等

[root@luoahong container]# pwd
/sys/fs/cgroup/cpu/container
[root@luoahong container]# while : ; do : ; done &
[1] 1447
[root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us 
-1
[root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 
100000
[root@luoahong container]# echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
[root@luoahong container]# echo 1447 > /sys/fs/cgroup/cpu/container/tasks

二、Linux Cgroups 的设计仍是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源限制文件的组合

 

docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash

$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us 
100000
$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us 
20000

三、容器是一个单进程模型

[root@k8s-master ~]# docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash 
root@beac9236771e:/# cd /sys/fs/cgroup/cpu/
root@beac9236771e:/sys/fs/cgroup/cpu# ls
cgroup.clone_children cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat cpuacct.usage notify_on_release
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares cpuacct.stat cpuacct.usage_percpu tasks
root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us 
100000
root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us
20000
root@beac9236771e:/sys/fs/cgroup/cpu# pwd
/sys/fs/cgroup/cpu

$ mount -l | grep tmpfs
none on /tmp type tmpfs (rw,relatime)

[root@k8s-master cpu]# mount -l | grep tmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,size=1006112k,nr_inodes=251528,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203192k,mode=700)

这就意味着这个 Docker 容器,只能使用到 20% 的cpu带宽

相关文章
相关标签/搜索