如何快速使用Markdown:
加粗 (Ctrl+B) 和 斜体 (Ctrl+I)引用 (Ctrl+Q)代码块 (Ctrl+K)标题 1, 2, 3 (Ctrl+1, Ctrl+2, Ctrl+3)列表 (Ctrl+U 和 Ctrl+Shift+O)K8s 是目前容器编排应用最活跃的,用的公司也越来越多,接下来我将从最初的docker容器到k8s集群应用,整理出来供大家参考!
docker镜像:解决打包的根本性问题,是一个完整操作系统的所有文件和目录,我们可以封装镜像,并使用镜像运行容器,解决了开发环境与用户环境统一的问题。
docker build "image name" docker run "image name"进程:一个程序运行起来后的计算机执行环境的总和。
容器核心功能:通过约束和修改进程的动态表现,从而为其创造出一个“边界”
创建一个容器
docker run -it busybox /bin/sh / # ps在容器中执行ps可以发现/bin/sh的进程号被划分为1,但是在宿主机上,这个容器的pid可能是100,使用namespace机制对进程进行隔离
namespace隔离内容: - pid - mount - uts - ipc - network - user
实际上是创建容器进程时,制定了这个进程所需要启用的一组namespace参数,这样,容器就只能看到当前namespace所限定的资源、文件、设备、状态,或者配置。而至于宿主机以及其他不相关的程序,它就完全看不到了。所以,容器其实是一种特殊的进程而已
cgroups就是linux内核中用来为进程设置资源限制的一个重要功能。主要作用: 限制一个进程能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。
cgroups给用户暴露出来的操作接口是文件系统 , 它以文件和目录的方式组织在操作系统的/sys/fs/cgroup路径下。
mount -t cgroup可以看到,在/sys/fs/cgroup下面有很多诸如cpuset、cpu、memory这样的子目录,也叫子系统。这些都是该机器当前可以被cgroups限制的资源种类。而在子系统对应的资源种类下,你就可以看到该资源具体可以被限制的方法。
如cpu子系统
ls /sys/fs/cgroup/cpu cpu.cfs_period_us cpu.cfs_quota_us tasks ...这前两个参数组合使用,可以用来限制进程在长度为cfsperiodus的一段时间内,只能被分配到总量为fsquotaus的CPU时间
修改参数,限定进程使用CPU的比例
]# cd /sys/fs/cgroup/cpu/ ]# mkdir container ]# while : ; do : ; done & [1] 25739 ]# top cpu占用率 100% ]# cd container/ ]# echo 20000 > cpu.cfs_quota_us 指的是没100ms中cpu运行20ms ]# echo 25739 > tasks ]# top cpu占用率 20%cgroups的每一项子系统都有其独有的资源限制能力。
对于docker等linux容器项目来说,他们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的pid填写到对应的控制组的tasks文件中就可以了
用户只需要在运行docker run命令时指定参数即可
docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash容器就是一个“单进程”模型
未完待续。。。