管理 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。

推送图表

打包图表后,您可以将其推送到 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-east4-docker.pkg.dev/my-project/my-repo

Helm 将图表归档上传为映像 my-chart,并添加标记 0.1.0

如需验证推送操作是否成功,请列出代码库中的映像。

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-east4-docker.pkg.dev/nyap-test/helm-repo/my-chart 的版本 0.1.0 安装名为 release1 的版本:

helm install release1 oci://us-east4-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 会移除应用于映像版本的所有标记。借助此标志,您可以在以下情况下强制删除映像版本:
    • 您指定了一个标记,但有其他标记与映像版本相关联。
    • 您指定的映像摘要至少具有一个标记。

后续步骤