5.3. 为 OpenShift Container Platform 创建 Kubernetes 清单

尽管容器镜像是容器化应用程序的基本构建块,但需要更多信息才能在 Kubernetes 环境(如 OpenShift Container Platform)中管理和部署该应用程序。创建镜像后的典型后续步骤:

  • 了解 Kubernetes 清单中使用的不同资源
  • 就您将运行的应用程序做出一些决策
  • 收集支持组件
  • 创建清单并将该清单存储到 Git 存储库中,以便您可以将其存储在源版本控制系统中,对其进行审核、跟踪和升级,并将其部署到下一环境中,在必要时回滚到旧版本,以及与他人共享

5.3.1. 关于 Kubernetes pod 和服务

容器镜像是 docker 的基本单元,而 Kubernetes 使用的基本单元称为 pods。Pod 代表构建应用程序的下一步。pod 可以包含一个或多个容器。关键之处在于 pod 是您部署、扩展和管理的单个单元。

在决定 pod 中要放入的内容时,可扩展性和命名空间或许是要考虑的主要项目。为便于部署,您可能需要将容器部署到 pod 中,并在 pod 中包含其本身的日志记录和监控容器。以后,在您运行 pod 并需要扩展额外的实例时,其他那些容器也会随之扩展。对于命名空间,pod 中的容器共享相同的网络接口、共享存储卷和资源限制(如内存和 CPU)。这样一来,将 pod 内容作为一个单元进行管理变得更加轻松。pod 中的容器还可以使用标准的进程间通信(如 System V 信号或 POSIX 共享内存)相互通信。

虽然单个 pod 代表 Kubernetes 中的一个可扩展单元,但服务提供了一个途径,能够将一系列 pod 分组到一起以创造完整且稳定的应用程序,完成诸如负载均衡之类的任务。 服务也比 pod 更持久,因为服务可以一直从同一 IP 地址使用,直到您删除为止。在使用服务时,可通过名称来请求服务,OpenShift Container Platform 集群则将该名称解析为您可用于访问构成该服务的 pod 的 IP地址和端口。

从本质上讲,容器化应用程序与运行它们的操作系统是隔开的,进而与其用户隔开。Kubernetes 清单的一部分描述了如何通过定义网络策略将应用程序公开给内部和外部网络,对您的容器化应用的通信进行精细的控制。要将来自集群外部的 HTTP、HTTPS 和其他服务的传入请求连接到集群内部的服务,可以使用 Ingress 资源。

如果容器需要磁盘存储而不是数据库存储(可以通过服务提供),则可以将添加到清单中,使该存储可供 pod 使用。您可以配置清单以创建持久性卷 (PV),或动态创建添加到 Pod 定义中的卷。

在定义了组成应用程序的一组 pod 后,您可以在 DeploymentDeploymentConfig 对象中定义这些 pod。