Helm 找不到 ECR 协议处理程序

问题描述 投票:0回答:3

执行

helm repo add
时出现以下错误:

Error: could not find protocol handler for: ecr

我在不同的 helm 版本(3.8.0、3.10.1、3.12)上收到此错误。

kubernetes kubernetes-helm amazon-ecr
3个回答
0
投票

查看 helm registries 文档,看起来 helm 最新版本原生支持 OCI(AWS ECR 使用的图像规范),但您仍然需要 ECR 插件才能使其工作。
我发现工作的插件是helm-ecr

helm plugin install https://github.com/vetyy/helm-ecr.git
    

0
投票
ECR 与

helm

 兼容,其中包括 
helm CLI
,您不需要 ECR 的 helm 插件。

Amazon ECR 中的 OCI 工件支持介绍了如何使用 ECR API 获取兼容的 helm 注册表登录


0
投票
我假设您想要创建 Helm 图表的 OCI 映像并在集群中使用它,对于 3.8.0 之后的所有 Helm 版本,这是一种实现方法,

创建/打包 OCI 映像:

在现有的 helm 存储库中,确保图表名称按照

Chart.yaml

 中的预期编写,还要确保您正在使用文件的 
version
 字段跟踪应用程序的版本。

将图表打包为:

$ helm package <chart-name>


这将创建一个名为:

<chart-name>-<version>.tgz

的文件,这是一个有效的 OCI 映像,可以部署在集群上并且与 AWS ECR 兼容。
例如。 
nginx-0.1.6.tgz


将图表上传到AWS ECR:

    创建一个名称相同的 ECR 存储库:
  1. <registry-name>/<chart-name>
    例如
Suppose your Chart name is nginx-on-steroids and you want your registry to be called my-company-name (This is just a name, can be anything, keep it common for all charts of the org for similar setup of cluster) The ECR Repo should be created with name : "my-company-name/nginx-on-steroids"

    使用以下方式登录 ECR:

$ aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com


$ aws ecr get-login-password --region <region> | helm registry login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com


两者都工作正常,因为

都将凭证存储在同一位置

    现在将
  1. .tgz
     图表推送到注册表:
    
    $ helm push <chart-name> <registry>
    例如。 
    $ helm push nginx-on-steroids my-company-name
    
    
这将给出如下输出:

Pushed: ***.dkr.ecr.<region>.amazonaws.com/my-company-name/nginx-on-steroids:0.1.6 Digest: sha256:c1bd780f358afcd1efd3d5144683b259fcf3e4424be1409735b04fed3f389fads


直接使用集群中的OCI镜像:

按照上述方式登录ECR,然后您可以执行以下操作:

A.本地拉取镜像:

$ helm pull oci://<aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-company-name/nginx-on-steroids --version 0.1.6


B.在集群中部署图表:

$ helm install my-new-release-nginx oci://<aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-company-name/nginx-on-steroids --version 0.1.6



使用Cluster中的OCI Image作为子图:

如上所述登录 ECR,然后在要使用 OCI 图像作为子图表的图表的

Chart.yaml

 中,添加图像的依赖项,例如:

apiVersion: v2 name: mega-project description: A super duper project type: application version: 0.1.0 appVersion: "0.1.0" dependencies: - name: nginx-on-steroids repository: "oci://<aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-company-name" version: "0.1.6"

注意:存储库没有图表名称,只有注册表名称。

在 Values.yaml 中,通过创建一个具有子图表名称的部分,将值传递给子图表:

nameOverride: blah ... nginx-on-steroids: serviceAccountName: something-else ...


其他文档:

打包图:

https://helm.sh/blog/storing-charts-in-oci/

处理注册表:

https://helm.sh/docs/topics/registries/

使用 ECR:

https://docs.aws.amazon.com/AmazonECR/latest/userguide/push-oci-artifact.html

© www.soinside.com 2019 - 2024. All rights reserved.