第 1 章 Pod 规格的变化


1.1. 简介

pod 的 Kubernetes 概念是共同部署在同一主机上的一个或多个容器,也是可被定义、部署和管理的最小计算单元。

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

Pod 具有生命周期。它们经过定义后,被分配到某一节点上运行,然后持续运行,直到容器退出或它们因为其他原因被删除为止。根据策略和退出代码,Pod 可在退出后删除,或被保留下来以启用对容器日志的访问。

Red Hat Ansible Automation Platform 提供了一个简单的默认 Pod 规格,但您可以提供一个自定义 YAML 或 JSON 文档来覆盖默认 Pod 规格。此自定义文档使用自定义字段,如 ImagePullSecrets,可序列化为有效的 Pod JSON 或 YAML。

可在 Openshift 文档中找到完整的选项列表。

提供长时间运行的服务的 pod 示例。

这个示例展示了 pod 的许多特性,其中大多数已在其他主题中阐述,因此这里仅简略提及:

apiVersion: v1
kind: Pod
metadata:
  annotations: { ... }                      1
  labels:
    deployment: docker-registry-1
    deploymentconfig: docker-registry
    docker-registry: default
  generateName: docker-registry-1-          2
spec:
  containers:                               3
  - env:         	            	  4
    - name: OPENSHIFT_CA_DATA
      value: ...
    - name: OPENSHIFT_CERT_DATA
      value: ...
    - name: OPENSHIFT_INSECURE
      value: "false"
    - name: OPENSHIFT_KEY_DATA
      value: ...
    - name: OPENSHIFT_MASTER
      value: https://master.example.com:8443
    image: openshift/origin-docker-registry:v0.6.2 5
    imagePullPolicy: IfNotPresent
    name: registry
    ports:   		                          6
    - containerPort: 5000
      protocol: TCP
    resources: {}                                    7
    securityContext: { ... }    		 8
    volumeMounts:                       	   9
    - mountPath: /registry
      name: registry-storage
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-br6yz
      readOnly: true
  dnsPolicy: ClusterFirst
  imagePullSecrets:                                  10
  - name: default-dockercfg-at06w
  restartPolicy: Always  			     11
  serviceAccount: default			    12
  volumes:        	                            13
  - emptyDir: {}
    name: registry-storage
  - name: default-token-br6yz
    secret:
      secretName: default-token-br6yz
标签描述

annotations:

pod 可以被“标上”一个或多个标签,然后使用这些标签在一个操作中选择和管理多组 pod。标签以 key:value 格式存储在 metadata 散列中。本例中的一个标签是 docker-registry=default

generateName:

Pod 在其命名空间内需要具有唯一名称。pod 定义可以使用 generateName 属性指定名称的基础,并自动添加随机字符来生成唯一名称。

containers:

containers 指定一组容器定义。在这种情况下(在大多数情况下),仅定义一个容器。

env:

环境变量将必要的值传递给每个容器。

image:

pod 中的每个容器使用自己的 Docker 格式的容器镜像进行安装。

ports:

容器可以绑定到 pod IP 上提供的端口。

resources

指定 Pod 时,您可以选择性地描述容器需要的资源量。要指定的最常见资源是 CPU 和内存 (RAM)。其他资源可用。

securityContext

OpenShift Online 为容器定义了一个安全上下文,用于指定是否允许其作为特权容器运行,作为所选用户运行,等等。默认上下文的限制性比较强,但管理员可以根据需要进行修改。

volumeMounts:

容器指定外部存储卷应当挂载到容器内的什么位置上。在本例中,一个卷用于存储 registry 的数据,另一个卷则提供凭证的访问途径,registry 需要这些凭证来向 OpenShift Online API 发出请求。

ImagePullSecrets

一个 pod 可以包含一个或多个容器,这些容器必须从某些 registry 中拉取。如果容器来自需要身份验证的 registry,您可以提供一个 ImagePullSecrets 列表,它引用命名空间中的 ImagePullSecrets。指定这些可让 Red Hat OpenShift Container Platform 在拉取镜像时与容器 registry 进行身份验证。如需更多信息,请参阅 Kubernetes 文档中的 Pod 和容器的资源管理

restartPolicy:

pod 重启策略,可能的值为 AlwaysOnFailureNever。默认值为 Always

serviceAccount:

Pod 对 OpenShift Online API 发出请求是一种比较常见的模式,它有一个 serviceAccount 字段,用于指定 pod 在发出请求时使用哪个服务帐户用户进行身份验证。这可以为自定义基础架构组件提供精细的访问控制。

volumes:

pod 定义了可供其容器使用的存储卷。在本例中,它提供了一个用于存储 registry 的临时卷,以及一个包含服务帐户凭证的 secret 卷。

您可以通过编辑自动化控制器 UI 中的 pod 规格来修改在基于 Kubernetes 的集群中运行作业的 pod。用于创建运行作业的 pod 的 pod 规格,采用 YAML 格式。有关编辑 pod 规格的更多信息,请参阅自定义 pod 规格

1.1.1. 自定义 pod 规格

您可以使用以下步骤自定义 pod。

流程

  1. 在自动化控制器 UI 中,进入到 Administration Instance Groups
  2. 检查自定义 pod 规格
  3. Pod Spec Override 字段中,使用切换来指定命名空间来启用和扩展 Pod Spec Override 字段。
  4. 点击 Save
  5. 可选:如果要提供额外的自定义,点 Expand 查看整个自定义窗口。

作业启动时使用的镜像由与作业关联的执行环境决定。如果 Container Registry 凭证与执行环境关联,则自动化控制器将使用 ImagePullSecret 来拉取镜像。如果您不想授予服务帐户管理 secret 的权限,您必须预先创建 ImagePullSecret,在 pod 规格中指定它,并从使用的执行环境省略任何凭证。

1.1.2. 启用 Pod 引用其他安全 registry 中的镜像

如果容器组使用需要凭证的安全 registry 中的容器,您可以将 Container Registry 凭证与分配给作业模板的 Execution Environment 关联。自动化控制器使用它来在容器组作业运行的 OpenShift Container Platform 命名空间中创建 ImagePullSecret,并在作业完成后进行清理。

另外,如果容器组命名空间中已存在 ImagePullSecret ,您可以在 ContainerGroup 的自定义 pod 规格中指定 ImagePullSecret。

请注意,容器组中运行的作业所使用的镜像始终被与作业关联的执行环境覆盖。

使用预先创建的 ImagePullSecrets (高级)

如果要使用此工作流并预先创建 ImagePullSecret,您可以提供所需的信息,以便从之前访问安全容器 registry 的系统上本地 .dockercfg 文件创建它。

流程

用于较新的 Docker 客户端的 .dockercfg 文件或 $HOME/.docker/config.json 是一个 Docker 凭证文件,如果您之前已登录到安全或不安全的 registry,则该文件会保存您的信息。

  1. 如果您已经为安全 registry 有一个 .dockercfg 文件,您可以通过运行以下命令来从该文件中创建 secret:

    $ oc create secret generic <pull_secret_name> \
    --from-file=.dockercfg=<path/to/.dockercfg> \
    --type=kubernetes.io/dockercfg
  2. 或者,如果您有一个 $HOME/.docker/config.json 文件:

    $ oc create secret generic <pull_secret_name> \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson
  3. 如果您还没有安全 registry 的 Docker 凭证文件,您可以通过运行以下命令来创建 secret:

    $ oc create secret docker-registry <pull_secret_name> \
    --docker-server=<registry_server> \
    --docker-username=<user_name> \
    --docker-password=<password> \
    --docker-email=<email>
  4. 要使用 secret 为 Pod 拉取镜像,您必须将 secret 添加到您的服务帐户中。本例中服务帐户的名称应与 Pod 使用的服务帐户的名称匹配。默认为 default 服务帐户。

    $ oc secrets link default <pull_secret_name> --for=pull
  5. 可选:要使用 secret 来推送和拉取 (pull) 构建镜像,该 secret 必须可在 pod 内挂载。您可通过运行以下命令实现这一目的:

    $ oc secrets link builder <pull_secret_name>
  6. 可选: 对于构建,还必须将 secret 引用为构建配置中的 pull secret。

成功创建容器组后,新创建的容器组的 Details 选项卡将保留,供您查看和编辑容器组信息。如果从 实例组 链接中点 Edit,则打开这个菜单。您还可以编辑实例,并查看与此实例组关联的作业。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.