关于容器、K8s的一点认知

一、什么是容器

容器实质上是一个进程,只是这个进程通过linux提供的namespace机制进行了隔离,以及通过cgroups限定了这个进程可以占用的系统资源。而且容器进程就代表我们的应用本身,并没有一个专门的容器应用,容器只是帮我们在启动我们的进程之前,帮我们做了一些隔离和资源限制地设置。(容器是一个单进程的模型,即容器所代表的这个进程,运行的就是我们要跑的程序本身。)

  • 容器通过 PID namespace,使得在容器自己看来,自己是PID=1的进程,但是在宿主机上容器进程PID还是原来的。
  • 容器通过 network namespace,屏蔽了网络设备
  • 容器通过Mount namespace,屏蔽了宿主机上的文件系统,并通过chroot命令,将容器进程的根目录挂载到指定的文件夹,这样容器进程在启动时在宿主机创建一个文件夹,并通过chroot命令将容器进程的根目录指定为这个文件夹 (其实就是将镜像所组成的rootfs文件系统挂载到容器的根目录上)。
  • 容器通过在/sys/fs/cgroup目录下,自动创建一个资源限制组,然后将容器的PID写入控制组,从而实现容器的资源限制

注意:

  • 由于容器只是一个特殊的进程,所以容器会和宿主机其他进程共享内核,所以有一些无法被namespace隔离的资源就需要谨慎对待,比如时间。

二、什么是容器镜像

容器镜像实际上就是一个联合文件系统rootfs(linux的文件系统是一个目录树,每个目录可以挂载别的文件系统,所以可以将rootfs挂载到容器进程的某个目录上,并更改那个目录作为容器进程所能 “看到” 的根目录)

之所以采用联合文件系统是为了最大程度的重用已有的文件,即docker的镜像是分层的,基础层是整台宿主机共享的,只读的,容器可以更改的只有最上面的读写层,删除基础层的文件也只是在读写层创建一个whiteout文件,将基础层的对应文件给覆盖掉,类似于隐藏文件。

容器在读写层之下,基础层之上用于存储那些容器进程启动要用到,但是提交景象又不需要的一些参数的Init层,该层用于操作比如启动进程绑定的端口号等等,这些参数启动容器需要,但是提交镜像又要剥离出去,所以在读写层和基础层之外,因为读写层的内容生成新的镜像后,就会成为新镜像基础层的一部分。

在这里插入图片描述

三、什么是Volume

Volume实质上就是挂载操作,在Mount namespace将挂载镜像之前,容器是可以看到宿主机的目录的,但是宿主机看不到容器进程的目录,此时通过挂载操作,将宿主机的某个目录对应的inode挂载到容器的某个目录下(此时对该目录操作,只影响宿主机,不影响容器镜像),从而实现容器往这个目录中存储东西,容器销毁后,宿主机依然保留。

由于这个挂载点被Mount namespace屏蔽了,宿主机是不知道容器进程内部的目录结构是什么样子的。(底层原理是什么呢? 宿主机和容器看到的目录表不同?目录表存储的内容不一样?)

四、什么是k8s、Pod

k8s是一个管理容器、编排容器的平台,将容器比作云计算平台的进程,k8s则是云计算平台的操作系统。

k8s分为master节点和node节点,master节点管控整个集群,包括 api server、scheduler、controller、etcd几个部分,node包括kublet、容器运行时、kube-proxy等几部分。

需要注意,master节点上的组件都是通过容器方式运行的,所以master和普通node的区别只是容器中运行的程序不一样。(所以master节点也是一个node节点,只是不可被调度而已——通过打上“污点”实现,所以master节点也有kublet组件),kublet组件是k8s最核心的组件。

master的容器是如何启动的呢?

  • 通过kublet以static pod的方式启动,k8s集群在启动时,kubelet会扫描某个固定的目录,把那个目录下的声明api对象的yaml文件读取并生成对应的pod。

pod又是什么呢?

  • pod是为了解决超亲密关系的,即有可能几个进程他们需要共享网络、磁盘等资源,此时将他们放到一个命名空间下,当作一个单位来进行调度,这就是pod。pod是一个逻辑上的概念,实质就是一组共享某些资源的容器进程。类似于云计算平台上的一台虚拟机。
  • 如何实现呢?其实就是pod所属的这几个容器被当作原子单位分配一个node,然后k8s为他们配置共享的网络命名空间,共享的volume等等

五、k8s里的volume

容器的volume和宿主机绑定,但是k8s中容器恢复重启会被重新创建,可能会被调度到一个新的node上,所以k8s中的volume一般都是远程存储,即一个额外的公共存储。

六、k8s的控制器模式

七、k8s的网络原理

八、k8s的调度原理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
企业级容器平台k8s是一个开源的容器编排工具,有助于简化和管理大规模容器部署的复杂性。 首先,k8s具备自动化容器部署、扩缩容、服务发现和负载均衡的能力。它可以根据用户定义的规则,自动调度和部署容器应用,根据负载情况自动扩展或缩减容器数量,并通过服务发现功能,使容器之间能够互相通信。这大大简化了容器集群的管理工作,提高了应用的可靠性和可伸缩性。 其次,k8s提供了一套强大的容器编排机制。它允许用户定义容器之间的依赖关系,可以通过指定服务间的关联关系和资源需求,实现容器之间的协同工作。它还支持通过命名空间和标签对容器进行划分和管理,方便用户对不同的应用进行隔离和访问控制。 此外,k8s拥有丰富的生态系统和广泛的社区支持。众多开发者和厂商都对k8s进行了贡献和扩展,使得k8s可以很好地与其他工具和系统集成,如监控和日志系统等。同时,k8s也积极响应用户需求,持续地进行更新和改进,提供更好的功能和性能。 总而言之,企业级容器平台k8s提供了一种高效、灵活和可靠的容器化解决方案,可以帮助企业更好地管理和部署容器应用。它的自动化和编排能力,丰富的生态系统和社区支持,使得使用k8s能够轻松应对大规模容器部署的挑战,提高部署效率和应用可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值