12 K8S之应用容器及Pod资源
现代应用容器技术用来运行单个进程(包括子进程),它在容器中PID名称空间中的进程号为1,可直接接收并处理信号,因而该进程终止也将导致容器终止并退出。这种设计使得容器与内部进程具有共同的生命周期,更容易发现和判定故障,也更利于对单个应用程序按需求进行扩容和缩容。
一个容器中仅应该运行一个进程是应用容器“立身之本”,这也是Docker及Kubernetes使用容器的标准方式。Kubernetes使用名为pause的容器作为Pod中所有容器的父容器来支撑这种构想,因而也被称为Pod的基础架构容器。Kubernetes默认不会为Pod内的各容器共享PID名称空间,它依赖于用户的显式设定。
单容器模式就是指将应用程序封装为应用容器运行,这也是我们开始容器技术之旅的方式。需要特别强调的一点是,该模式需要遵循简单和单一原则,每个容器仅承载一种工作负载,因而在同一个容器中同时运行Web服务器和日志收集代理程序便违反了该设计原则。
单节点多容器模式是指跨容器的设计模式,其目的是在单个主机之上同时运行多个共生关系的容器,因而容器管理系统需要将它们作为一个原子单位进行统一调度。Kubernetes编排系统设计的Pod概念就是这个设计模式的实现之一。单节点多容器模式的常见实现有Sidecar(边车)、适配器(Adapter)、大使(Ambassador)、初始化(Initializer)容器模式等。
适配器模式用于为主应用程序提供一致的接口,实现了模块重用,支持标准化和规范化主容器应用程序的输出以便于外部服务进行聚合。
多节点模式就是将分布式应用的每个任务实例分布于多个节点,分别以单节点模式运行,并以更高级的形式进行彼此通信和协同的更高级模式。
Pending:API Server创建了Pod资源对象并已存入etcd中,但它尚未被调度完成,或仍处于从仓库中下载容器镜像的过程中。
Running:Pod已经被调度至某节点,所有容器都已经被kubelet创建完成,且至少有一个容器处于启动、重启或运行过程中。
Succeeded:Pod中的所有容器都已经成功终止且不会再重启。
Failed:所有容器都已经终止,但至少有一个容器终止失败,即容器以非0状态码退出或已经被系统终止。Unknown:API Server无法正常获取到Pod对象的状态信息,通常是由于其无法与所在工作节点的kubelet通信所致。