管理 Helm 图表

本页介绍了如何管理保存为 OCI 容器映像的 Helm 3 图表,包括推送(上传)、拉取(下载)、列出、标记和删除图表。

准备工作

  1. 如果目标代码库不存在,请创建新代码库。选择 Docker 作为代码库格式。
  2. 验证您是否拥有 存储库
  3. (可选)为 Google Cloud CLI 命令配置默认值
  4. 安装 Helm 3.8.0 或更高版本。在更早的 Helm 版本中,OCI 格式的图表只作为一项实验性功能提供。

    运行 helm version 以验证您的版本。

  5. 配置 Helm 以对 Artifact Registry 进行身份验证

创建或获取图表

本文档重点介绍如何管理图表图片,并假定您已有现有图表或熟悉如何创建图表。要详细了解 如何在 Artifact Hub 中创建图表或获取公开的图表,请参阅 了解 Helm 文档中的相关信息。

  • 使用 Helm 介绍了如何从公共 Artifact Hub 获取图表,以及如何在安装图表之前对其进行自定义。
  • 图表描述了 以及如何创建图表
  • 图表最佳实践指南 介绍了相关惯例和最佳实践。

打包图表

您必须先将图表打包为图表归档,然后才能将其推送到 Artifact Registry。

  1. 切换到包含图表的目录。

  2. 打包图表。

    helm package CHART-PATH
    

    CHART-PATH 替换为包含 Chart.yaml 文件的目录的路径。

Helm 使用图表名称和版本作为归档文件名。例如,如果您有一个名为 my-chart 且版本号为 0.1.0 的图表,则软件包名称为 my-chart-0.1.0.tgz

现在,您可以将该图表推送到 Artifact Registry。

推送图表

打包图表后,您可以将其推送到工件注册库。

如需推送图表,请运行以下命令:

helm push my-chart-0.1.0.tgz oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

替换以下值:

  • LOCATION 是 单区域或多区域 代码库的位置。
  • PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目
  • REPOSITORY 是代码库的名称。

Helm 使用 Chart.yaml 中的信息作为 OCI 容器映像名称, 标记前面。请考虑以下示例命令:

helm push my-chart-0.1.0.tgz oci://us-west1-docker.pkg.dev/my-project/my-repo

Helm 会将图表归档文件作为标记为 0.1.0 的映像 my-chart 上传。

如需验证推送操作是否成功,请列出 存储库

gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

拉取图表

如需拉取图表,请执行以下操作:

  1. 运行以下命令以提取图表归档文件:

    helm pull oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
        --version VERSION
    

    如果要提取图表存档并提取其内容,请将 --untar 标志。

    helm pull oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
        --version VERSION \
        --untar
    

    替换以下值:

    • LOCATION 是 单区域或多区域 代码库的位置。
    • PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目
    • REPOSITORY 是映像所在的代码库的名称 存储的数据。
    • IMAGE 是代码库中的映像名称。
    • VERSION 是图表的语义版本。此标志是必需的。Helm 不支持使用标记拉取图表。

安装图表

使用 helm install 命令安装存储在 Artifact Registry 中的图表。

helm install RELEASE \
    oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
    --version VERSION

以下示例使用图表 us-west1-docker.pkg.dev/nyap-test/helm-repo/my-chart 的版本 0.1.0 安装名为 release1 的版本:

helm install release1 oci://us-west1-docker.pkg.dev/nyap-test/helm-repo/my-chart --version 0.1.0

列表图表

您可以使用 Google Cloud 控制台或命令行列出图表。如果您 将容器映像和图表存储在同一个 Docker 代码库中, 工件类型

控制台

如需查看代码库中的映像,请执行以下操作:

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 点击包含容器映像的制品库。

  3. 点击图片可查看其版本。

gcloud

列出默认项目、代码库和 配置了默认值时的位置:

gcloud artifacts docker images list

如需列出特定位置的代码库中的映像,请运行以下命令:

gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

如需列出特定映像的所有摘要和标记,请运行以下命令:

gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
--include-tags

替换以下值:

  • LOCATION 是代码库的单区域或多区域位置
  • PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目
  • REPOSITORY 是存储了映像的代码库的名称。
  • IMAGE 是代码库中的映像名称。
  • --include-tags 会显示映像的所有版本,包括摘要和标记。如果省略此标志,则返回的列表仅包含顶级容器映像。

例如,假设一个映像具有以下特征:

  • 代码库位置:us-west1
  • 代码库名称:my-repo
  • 项目 ID:my-project
  • 映像名称:my-image

完整的代码库名称为:

us-west1-docker.pkg.dev/my-project/my-repo

完整的映像名称为:

us-west1-docker.pkg.dev/my-project/my-repo/my-image

如需详细了解映像名称格式,请参阅代码库和映像名称

列出文件

您可以列出代码库中的文件、指定容器映像的所有版本中的文件,或映像的特定版本中的文件。

对于以下所有命令,您都可以通过向命令添加 --limit 标志来设置要返回的文件数量上限。

如需在配置默认值时列出默认项目、代码库和位置中的所有文件,请运行以下命令:

gcloud artifacts files list

如需列出指定项目、代码库和位置中的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION

如需列出特定容器映像的所有版本的文件,请执行以下操作:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE

如需列出特定容器映像版本的文件,请执行以下操作:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE \
    --version=VERSION
要列出特定标记的文件,请执行以下操作:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE \
    --tag=TAG

替换以下值:

  • LOCATION: 单区域或多区域 代码库的位置。
  • PROJECT:您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目
  • REPOSITORY:映像所在代码库的名称 。
  • PACKAGE:映像的名称。
  • VERSION:映像摘要,以 sha256: 开头的字符串。
  • TAG:与容器映像关联的标记。

删除映像

在 Artifact Registry 代码库中,您可以删除整个容器映像,也可以删除与标记或摘要关联的特定映像版本。删除图片后,您便无法撤消此操作。

如需删除存储在 Artifact Registry 中的映像,请执行以下操作:

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 点击映像名称即可查看该映像的版本。

  3. 选择您要删除的版本。

  4. 点击删除

  5. 在确认对话框中,点击删除

gcloud

如需删除某个映像及其所有标记,请运行以下命令:

gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE --delete-tags

如需删除特定映像版本,请使用以下命令之一。

gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE:TAG [--delete-tags]

gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE@IMAGE-DIGEST [--delete-tags]

地点

  • LOCATION 是代码库的单区域或多区域位置
  • PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目
  • REPOSITORY 是存储了映像的代码库的名称。
  • IMAGE 是代码库中的映像名称。
  • TAG 是您要删除的版本的标记。如果多个标记与同一映像版本相关联,则您必须添加 --delete-tags 才能删除映像版本,而无需先移除标记。
  • IMAGE-DIGEST 是您要删除的版本的 sha256 哈希值。如果某个标记与映像摘要相关联,则您必须添加 --delete-tags 才能删除映像版本,而无需先移除标记。
  • --delete-tags 会移除应用于映像版本的所有标记。借助此标志,您可以在以下情况下强制删除映像版本:
    • 您指定了一个标记,但有其他标记与映像版本相关联。
    • 您指定的映像摘要至少具有一个标记。

后续步骤