×

Pod 是一个或多个容器一起部署在一个主机上,是可定义、部署和管理的最小计算单元。

了解 Pod

Pod 类似于容器的机器实例(物理或虚拟)。每个 Pod 都分配有自己的内部 IP 地址,因此拥有其整个端口空间,并且 Pod 中的容器可以共享其本地存储和网络。

Pod 具有生命周期;它们被定义,然后被分配到节点上运行,然后它们运行直到其容器退出或由于其他原因被删除。根据策略和退出代码,Pod 可能会在退出后被删除,或者可以保留以访问其容器的日志。

OpenShift Container Platform 将 Pod 视为基本上不可变的;在 Pod 运行时,无法更改 Pod 定义。OpenShift Container Platform 通过终止现有 Pod 并使用修改后的配置、基础镜像或两者都重新创建它来实现更改。Pod 也被视为可消耗的,并且在重新创建时不保留状态。因此,Pod 通常应由更高级别的控制器管理,而不是直接由用户管理。

有关每个 OpenShift Container Platform 节点主机的最大 Pod 数,请参见集群限制。

未由复制控制器管理的裸 Pod 在节点中断时不会重新调度。

Pod 配置示例

OpenShift Container Platform 利用 Kubernetes 的 Pod 概念,它是一个或多个容器一起部署在一个主机上,是可定义、部署和管理的最小计算单元。

以下是 Pod 定义示例。它演示了 Pod 的许多功能,其中大部分在其他主题中进行了讨论,因此此处仅简要提及。

Pod 对象定义 (YAML)
kind: Pod
apiVersion: v1
metadata:
  name: example
  labels:
    environment: production
    app: abc (1)
spec:
  restartPolicy: Always (2)
  securityContext: (3)
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containers: (4)
    - name: abc
      args:
      - sleep
      - "1000000"
      volumeMounts: (5)
       - name: cache-volume
         mountPath: /cache (6)
      image: registry.access.redhat.com/ubi7/ubi-init:latest (7)
      securityContext:
        allowPrivilegeEscalation: false
        runAsNonRoot: true
        capabilities:
          drop: ["ALL"]
      resources:
        limits:
          memory: "100Mi"
          cpu: "1"
        requests:
          memory: "100Mi"
          cpu: "1"
  volumes: (8)
  - name: cache-volume
    emptyDir:
      sizeLimit: 500Mi
1 Pod 可以用一个或多个标签进行“标记”,然后可以使用这些标签以单个操作选择和管理 Pod 组。标签以键/值格式存储在metadata 哈希中。
2 Pod 重新启动策略,可能的值为AlwaysOnFailureNever。默认值为Always
3 OpenShift Container Platform 为容器定义了一个安全上下文,该上下文指定它们是否允许作为特权容器运行、以其选择的用户的身份运行等等。默认上下文非常严格,但管理员可以根据需要修改此上下文。
4 containers 指定一个或多个容器定义的数组。
5 容器指定外部存储卷在容器中挂载的位置。
6 指定要为 Pod 提供的卷。卷挂载在指定路径上。不要挂载到容器根目录/或主机和容器中相同的任何路径。如果容器具有足够的权限(例如主机/dev/pts文件),这可能会损坏您的主机系统。可以使用/host安全地挂载主机。
7 Pod 中的每个容器都是从其自己的容器镜像实例化的。
8 Pod 定义了其容器可用的存储卷。

如果将具有大量文件的持久卷附加到 Pod,则这些 Pod 可能会失败或启动时间过长。更多信息,请参见 在 OpenShift 中使用具有大量文件的持久卷时,为什么 Pod 无法启动或达到“就绪”状态的时间过长?

此 Pod 定义不包含在 Pod 创建并开始其生命周期后由 OpenShift Container Platform 自动填充的属性。 Kubernetes Pod 文档 详细介绍了 Pod 的功能和用途。

其他资源