云计算之k8s系列_第一回

云计算之k8s系列

如何快速使用Markdown:

  • 加粗 (Ctrl+B) 和 斜体 (Ctrl+I)
  • 引用 (Ctrl+Q)
  • 代码块 (Ctrl+K)
  • 标题 1, 2, 3 (Ctrl+1Ctrl+2Ctrl+3)
  • 列表 (Ctrl+U 和 Ctrl+Shift+O)

K8s 是目前容器编排应用最活跃的,用的公司也越来越多,接下来我将从最初的docker容器到k8s集群应用,整理出来供大家参考!

docker 应用管理

docker镜像:解决打包的根本性问题,是一个完整操作系统的所有文件和目录,我们可以封装镜像,并使用镜像运行容器,解决了开发环境与用户环境统一的问题。

docker build "image name"
docker run "image name"

docker容器编排

  • swarm是docker提出的,最大的优点是和docker容器无缝拼接,适合小型docker编排
  • fig之前是由两个人维护的,后期被docker公司收购,改名成compose,称为docker公司第二大亮点,到现在还很受欢迎
  • mesosphere是mesos提出的,最大亮点是经过了万级集群验证,适合大规模容器编排
  • CNCF基金会打造kubernetes

docker——进程namespace

进程:一个程序运行起来后的计算机执行环境的总和。

容器核心功能:通过约束和修改进程的动态表现,从而为其创造出一个“边界”

创建一个容器

docker run -it busybox /bin/sh
/ # ps

在容器中执行ps可以发现/bin/sh的进程号被划分为1,但是在宿主机上,这个容器的pid可能是100,使用namespace机制对进程进行隔离

namespace隔离内容: - pid - mount - uts - ipc - network - user

实际上是创建容器进程时,制定了这个进程所需要启用的一组namespace参数,这样,容器就只能看到当前namespace所限定的资源、文件、设备、状态,或者配置。而至于宿主机以及其他不相关的程序,它就完全看不到了。所以,容器其实是一种特殊的进程而已

docker——资源cgroups

  • namespace缺点1: 因为容器只是运行在苏足迹上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统的内核。
  • namespace缺点2: 在linux内核中,有很多资源和对象是不能被namespace化的,最典型的例子就是:时间。

cgroups就是linux内核中用来为进程设置资源限制的一个重要功能。主要作用: 限制一个进程能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。

cgroups给用户暴露出来的操作接口是文件系统 , 它以文件和目录的方式组织在操作系统的/sys/fs/cgroup路径下。

扫描二维码关注公众号,回复: 6726253 查看本文章
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

容器就是一个“单进程”模型

docker——文件系统

未完待续。。。

阶段总结

  • namepace实现资源隔离
  • cgroups实现资源限制
  • rootfs又是做什么的呢?轻听下回讲解

猜你喜欢

转载自blog.csdn.net/mx_steve/article/details/90417984