Managing images

通过 Alauda Container Platform,您可以根据镜像仓库的位置、这些仓库的认证要求,以及您希望构建和部署的行为,来管理镜像。

Image pull policy

Pod 中的每个容器都有一个容器镜像。在您创建镜像并将其推送到仓库之后,就可以在 Pod 中引用该镜像。

目录

Image pull policy overview

当 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。

Using image pull secrets

如果您使用的是 Alauda Container Platform 的镜像仓库,那么您的 Pod 服务账户应该已经拥有正确的权限,无需额外操作。

但是,对于其他场景,例如跨 Alauda Container Platform 项目引用镜像或从受保护的仓库拉取镜像,则需要额外的配置步骤。

Allowing pods to reference images from other secured registries

要从其他私有或受保护的仓库拉取受保护的容器镜像,必须使用容器客户端凭据(例如 Docker)创建拉取密钥,并将其添加到您的服务账户中。

Docker 使用配置文件存储登录受保护或非受保护仓库的认证信息:

默认情况下,Docker 使用 $HOME/.docker/config.json。

如果您之前登录过受保护或非受保护的仓库,这些文件会存储您的认证信息。

Creating a pull secret

您可以获取拉取密钥,以便从私有容器镜像仓库或仓库中拉取镜像。您可以参考 Pull an Image from a Private Registry

Using a pull secret in a workload

您可以通过以下方法之一使用拉取密钥,允许工作负载从私有仓库拉取镜像:

  • 将密钥关联到 ServiceAccount,这样所有使用该服务账户的 Pod 会自动应用该密钥。
  • 在 Pod 规范中定义 imagePullSecrets,这对于 GitOps 或 ArgoCD 等环境非常有用。

您可以通过将密钥添加到服务账户来为 Pod 拉取镜像使用该密钥。请注意,服务账户的名称应与 Pod 使用的服务账户名称匹配。

示例输出:

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

除了将密钥关联到服务账户之外,您还可以直接在 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>