第 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
标签 | 描述 |
---|---|
|
pod 可以被“标上”一个或多个标签,然后使用这些标签在一个操作中选择和管理多组 pod。标签以 key:value 格式存储在 metadata 散列中。本例中的一个标签是 |
|
Pod 在其命名空间内需要具有唯一名称。pod 定义可以使用 |
|
|
| 环境变量将必要的值传递给每个容器。 |
| pod 中的每个容器使用自己的 Docker 格式的容器镜像进行安装。 |
| 容器可以绑定到 pod IP 上提供的端口。 |
| 指定 Pod 时,您可以选择性地描述容器需要的资源量。要指定的最常见资源是 CPU 和内存 (RAM)。其他资源可用。 |
| OpenShift Online 为容器定义了一个安全上下文,用于指定是否允许其作为特权容器运行,作为所选用户运行,等等。默认上下文的限制性比较强,但管理员可以根据需要进行修改。 |
| 容器指定外部存储卷应当挂载到容器内的什么位置上。在本例中,一个卷用于存储 registry 的数据,另一个卷则提供凭证的访问途径,registry 需要这些凭证来向 OpenShift Online API 发出请求。 |
|
一个 pod 可以包含一个或多个容器,这些容器必须从某些 registry 中拉取。如果容器来自需要身份验证的 registry,您可以提供一个 |
|
pod 重启策略,可能的值为 |
|
Pod 对 OpenShift Online API 发出请求是一种比较常见的模式,它有一个 |
| pod 定义了可供其容器使用的存储卷。在本例中,它提供了一个用于存储 registry 的临时卷,以及一个包含服务帐户凭证的 secret 卷。 |
您可以通过编辑自动化控制器 UI 中的 pod 规格来修改在基于 Kubernetes 的集群中运行作业的 pod。用于创建运行作业的 pod 的 pod 规格,采用 YAML 格式。有关编辑 pod 规格的更多信息,请参阅自定义 pod 规格。
1.1.1. 自定义 pod 规格
您可以使用以下步骤自定义 pod。
流程
-
在自动化控制器 UI 中,进入到
。 - 检查 。
- 在 Pod Spec Override 字段中,使用切换来指定命名空间来启用和扩展 Pod Spec Override 字段。
- 点击 。
- 可选:如果要提供额外的自定义,点 查看整个自定义窗口。
作业启动时使用的镜像由与作业关联的执行环境决定。如果 Container Registry 凭证与执行环境关联,则自动化控制器将使用 ImagePullSecret
来拉取镜像。如果您不想授予服务帐户管理 secret 的权限,您必须预先创建 ImagePullSecret
,在 pod 规格中指定它,并从使用的执行环境省略任何凭证。
1.1.2. 启用 Pod 引用其他安全 registry 中的镜像
如果容器组使用需要凭证的安全 registry 中的容器,您可以将 Container Registry 凭证与分配给作业模板的 Execution Environment 关联。自动化控制器使用它来在容器组作业运行的 OpenShift Container Platform 命名空间中创建 ImagePullSecret
,并在作业完成后进行清理。
另外,如果容器组命名空间中已存在
,您可以在 ContainerGroup 的自定义 pod 规格中指定 ImagePullSecret。
ImagePullSecret
请注意,容器组中运行的作业所使用的镜像始终被与作业关联的执行环境覆盖。
使用预先创建的 ImagePullSecrets (高级)
如果要使用此工作流并预先创建 ImagePullSecret
,您可以提供所需的信息,以便从之前访问安全容器 registry 的系统上本地 .dockercfg
文件创建它。
流程
用于较新的 Docker 客户端的 .dockercfg
文件或 $HOME/.docker/config.json
是一个 Docker 凭证文件,如果您之前已登录到安全或不安全的 registry,则该文件会保存您的信息。
如果您已经为安全 registry 有一个
.dockercfg
文件,您可以通过运行以下命令来从该文件中创建 secret:$ oc create secret generic <pull_secret_name> \ --from-file=.dockercfg=<path/to/.dockercfg> \ --type=kubernetes.io/dockercfg
或者,如果您有一个
$HOME/.docker/config.json
文件:$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
如果您还没有安全 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>
要使用 secret 为 Pod 拉取镜像,您必须将 secret 添加到您的服务帐户中。本例中服务帐户的名称应与 Pod 使用的服务帐户的名称匹配。默认为 default 服务帐户。
$ oc secrets link default <pull_secret_name> --for=pull
可选:要使用 secret 来推送和拉取 (pull) 构建镜像,该 secret 必须可在 pod 内挂载。您可通过运行以下命令实现这一目的:
$ oc secrets link builder <pull_secret_name>
- 可选: 对于构建,还必须将 secret 引用为构建配置中的 pull secret。
成功创建容器组后,新创建的容器组的 Details 选项卡将保留,供您查看和编辑容器组信息。如果从 实例组 链接中点 ,则打开这个菜单。您还可以编辑实例,并查看与此实例组关联的作业。