管理镜像

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

镜像拉取策略

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

镜像拉取策略概览

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

imagePullPolicy 的取值:

ValueDescription
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 service account 应该已经具有正确的权限,不需要额外操作。

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

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

要从其他私有或受保护的 registry 中拉取受保护的容器,你必须使用容器客户端凭据(例如 Podman)创建一个 pull secret,并将其添加到你的 service account 中。

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

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

创建 pull secret

你可以获取 image pull secret,以便从私有容器镜像 registry 或 repository 中拉取镜像。你可以参考 从私有 registry 拉取镜像

在 workload 中使用 pull secret

你可以通过以下任一方式使用 pull secret,允许 workload 从私有 registry 拉取镜像:

  • 将 secret 关联到 ServiceAccount,这样该 secret 会自动应用到使用该 service account 的所有 pod。
  • 在 pod 规范中定义 imagePullSecrets,这在 GitOps 或 ArgoCD 等环境中非常有用。

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

示例输出:

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

除了将 secret 关联到 service account,你也可以在 pod 或 workload 定义中直接引用它。这对于 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>