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 通信所致。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/c433c8d96646ca565f889b969】。文章转载请联系作者。
评论