管理镜像

使用 Alauda Container Platform,你可以与镜像进行交互;具体取决于镜像所在的 registry、这些 registry 的任何身份验证要求,以及你希望构建和部署的行为方式。

镜像拉取策略

pod 中的每个容器都有一个容器镜像。创建镜像并将其推送到 registry 后,你就可以在 pod 中引用它。

镜像拉取策略概览

当 Alauda Container Platform 创建容器时,会使用容器的 imagePullPolicy 来判断是否应在启动容器前拉取镜像。imagePullPolicy 有三种可能的值:

imagePullPolicy 值表:

描述
Always始终拉取镜像。
IfNotPresent仅当节点上尚不存在该镜像时才拉取。
Never从不拉取镜像。

如果未指定容器的 imagePullPolicy 参数,Alauda Container Platform 会根据镜像标签进行设置:

  1. 如果标签为 latest,Alauda Container Platform 会将 imagePullPolicy 默认设置为 Always。
  2. 否则,Alauda Container Platform 会将 imagePullPolicy 默认设置为 IfNotPresent。

使用镜像拉取 Secret

如果你使用的是 Alauda Container Platform 镜像 registry,那么你的 pod ServiceAccount 应该已经具有正确的权限,无需执行其他操作。

但是,在其他场景下,例如跨 Alauda Container Platform 项目引用镜像,或从受保护的 registry 中引用镜像时,则需要额外的配置步骤。

允许 pod 引用来自其他受保护 registry 的镜像

要从其他私有或受保护的 registry 拉取受保护的容器镜像,你必须根据容器客户端凭据(例如 Podman)创建一个拉取 Secret,并将其添加到你的 ServiceAccount 中。

容器客户端使用配置文件存储身份验证详细信息,以登录到受保护或不受保护的 registry:

如果你之前已登录到受保护或不受保护的 registry,这些文件会存储你的身份验证信息。

创建拉取 Secret

你可以获取用于从私有容器镜像 registry 或 repository 拉取镜像的 image pull secret。你可以参考 Pull an Image from a Private Registry

在工作负载中使用拉取 Secret

你可以使用拉取 Secret,通过以下方法之一允许工作负载从私有 registry 拉取镜像:

  • 将 Secret 关联到 ServiceAccount,这样会自动将该 Secret 应用于使用该 ServiceAccount 的所有 pod。
  • 在 pod 规范中定义 imagePullSecrets,这对于 GitOps 或 ArgoCD 等环境很有用。

你可以通过将 Secret 添加到 ServiceAccount 中,为 pod 拉取镜像。请注意,ServiceAccount 的名称应与 pod 使用的 ServiceAccount 名称匹配。

示例输出:

apiVersion: v1
imagePullSecrets:
- name: default-cfg-123456
- name: <pull_secret_name>
kind: ServiceAccount
metadata:
  name: default
  namespace: default
secrets:
- name: <pull_secret_name>

除了将 Secret 关联到 ServiceAccount 之外,你还可以在 pod 或工作负载定义中直接引用它。这对于 ArgoCD 等 GitOps 工作流非常有用。例如:

示例 pod 规范:

apiVersion: v1
kind: Pod
metadata:
  name: <secure_pod_name>
spec:
  containers:
  - name: <container_name>
    image: your.registry.io/my-private-image
  imagePullSecrets:
  - name: <pull_secret_name>

示例 ArgoCD 工作流:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: <example_workflow>
spec:
  entrypoint: <main_task>
  imagePullSecrets:
  - name: <pull_secret_name>