www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

说了容器不应该讲讲Namespace和Cgroups吗,因为我还没写多少文章,循序渐进,和大家一同共同进步,不断学习,也怕写的不好,但是还是得写,一方面督促自己,一方面也能收获不少志同道合的朋友,今天我就以我的理解来说一说这个点。

 

 

如果是入门了的朋友,就会觉得容器这东西一点也不复杂,只是把容器拿来用用而已的话,直接上百度一搜docker,照着官网的文档和例子,不一会就搞定了。至于基本的运行命令可以在我前面的文章里找一下。尽快实现你一次打包,随处使用的目的。

 

 

当然容器具体是啥,不得不说Namespace和Cgroups,有朋友问你说linux里面跑容器跑的到底是啥,你先回答这俩洋文单词,Namespace(命名空间)和Cgroups(Control groups 机翻为控制组),这俩东西怎么说,就是可以让程序在一个空间里隔离运行,这个空间里面的资源是可控的,关键是环境隔离,这个就可以大概的回答你朋友的疑问了。

 

 

然后容器跑的时候,这玩意的进程、还有网络、还有文件系统都是独立起来的,那就有朋友疑惑了,这隔离的独立的运行环境是怎么建立的?这里就说一说这个Namespce了,这个概念咱们来分析分析,直接搞一个运行的

 

 

 

容器来看看Namespace是什么玩意?

 

 

docker exec dcokerid ps -ef 就是进入容器执行ps命令

 

 

 

(当然有可能有的容器用不了ps命令,还要装ps命令使用相关服务)

 

 

发现几个nginx服务

 

 

 

如果不进入容器,直接ps -ef就会看到很多进程,然后grep这几个服务

 

 

 

这两种结果,有啥不一样呢,对比了一下,最大的不同就是进程的pid不一样,为啥子pid不同,ps-ef 和docker exec ps -ef 结果为啥不一样,这里就要搞清楚linux里面namespace的概念,linux系统在创建容器的时候,就会有一个pid的命名空间,这个PID就是进程的序号,编号。建立一个namspace,就会对进程进行pid编个号码,每个命名空间里的pid编号都是从NO1开始

 

 

就是一个进程命名空间里只能看到自己个这个空间里的进程,看不到别的namespace里面的进程。如果有另外一个容器,那么它也会有自己的一个pid namespace,这两个空间之间都看不到对方的进程。这linux系统这个namespace太强了,其实也就是蒙蔽了对方空间双眼。这个namespace最大的作用就是,我把你给隔离了,你也把我隔离算了。容器之间你有啥资源我看不见,我有啥你也看不见,反正就是隔离了,互不打扰,这样资源能利用性就变大了,可以充分利用宿主机资源,而且保障了安全。

 

 

宿主机的pid namespace,他是把这台机器上所有的进程,进行编号,和容器里面pid namespace里的编号就不同了,这就是为啥编号不一样。

 

 

这个namespace可以有不同的类型,除了pid namespace还有比如network space负责隔离不同的网络环境,mount namespace可以隔离文件系统,反正就是这些namspace,才让我们得以隔离出一个个容器,这一个个小系统,小的独立的计算机,那容器算一个小计算机,这里面啥配置啊?

 

 

要说到这小容器计算机啥配置,就得说这个Cgroups了。这个东西可以对特有的各种进程做各种计算机资源的限制,比如cpu、内存、io、等等的,反正没有这东西,一个进程搞出来好多个线程,你这宿主机的资源cpu内存直接给你干爆,你说这东西强不强。

 

 

Cgroups,就是可以对一个或者一些进程的分配计算机资源,消耗啥的进行一系列限制。具体咋实现的,这个朋友可以单独研究下linux 关于cgroups的定义,我后期也会单独写一下。

 

 

Cgroups通过各种不同的子系统限制不同的资源,每个子系统都能沟限制一种资源,就各司其职,相关的进程我给你分配一个相关的控制组,然后通过树结构管理。每个控制组有自己的相关资源控制参数。启动容器进程后,把这个进程pid写到对应的控制组的文件里可以起到限制作用。

 

 

CPU子系统,可以决定你可以使用的最大CPU

 

 

memory子系统,限制控制组内能使用最大的内存量

 

 

pids子系统,控制你运行多少个进程

 

 

cpuset子系统,限制一个控制组里进程可以在哪几个物理cpu运行

 

 

嗯,我只是大致的讲一下和这个东西,总之,关于容器实现技术,就记住namspace是实现各种资源的隔离、而cgroups限制了各种资源能使用的量。

 

 

前面浅谈容器技术,其实如果说简单点就可以这么说就是Nameaspace+Cgroups技术,首写字母简称牛叉组合技术!N+C

posted on 2023-04-21 08:12  秦瑞It行程实录  阅读(12)  评论(0编辑  收藏  举报
www.cnblogs.com/ruiyqinrui