概念介绍

  • k8s:Kubernetes 一个容器编排工具(以pod为单位进行编排)
  • 容器 :进程级别的虚拟化技术,常和虚拟机进行对比,它的容器更加轻量。虚拟机是硬件级别的隔离,拥有自己独立的内核和操作系统;而容器采用cgroup限制资源,namespace限制网络环境等,和本机共享内核等资源。
  • pod:k8s中创建和管理的最小计算单位,由一组紧密关联的容器组成,这些容器共享存储、网络、一级怎么样运行这些容器的声明。它是k8s中最重要的核心概念之一。

pod为什么存在?

Q:为什么k8s不直接使用容器作为最小计算单位,而是给出一个新的pod的概念?

A:原因在于容器的设计本身更适合一个容器内只运行一个进程。pod可以更好的适应当前的生产环境。

Dockerfile创建镜像时,通过ENTRYPOINT命令指定启动容器时运行的第一个进程,这个进程的pid是1

  1. 容器中孤儿进程的管理需要自行实现。
    在正常的操作系统中,pid为1的进程是init进程,是所有进程的父进程,它的其中一个使命是负责收养孤儿进程,但在容器中,除非我们自己去实现管理孤儿进程的逻辑,否则将无法处理。
  2. 除pid为1 的进程外,额外进程的健康状态需自行管理。

Q:一个pod中运行多个服务可不可以?

A:从实现上来说是可以的,但是并不推荐这样。一个pod尽量由一组紧密关联的容器组成,例如该服务进程需要一些额外的agent进程支持等。

k8s pod中容器 k8s pod和容器的关系_docker

结语

如果真的需要在一个容器中运行多个进程,会增加很多程序员的额外负担,pod作为一种更加高级的结构将容器绑定在一起,并且将他们作为一个单元进行管理。
但这并不意味着所有的pod都由多个容器组成,一个pod中一个容器的情况也是非常常见的。