我是 Kubernetes 新手,作为我自己的教程,我一直致力于使用 helm (v3) 将一个基本项目部署到 Kubernetes。 我在 AWS 的 ECR 中有一个图像以及该项目的本地 helm 图表。 然而,我正在努力使用 Kubernetes 运行我的映像。
我的图像设置正确。如果我在本地尝试类似
docker run my_image_in_ecr
的操作,它会按预期运行(在本地配置我的 IAM 访问凭证之后)。
我的舵图已正确检查,并且在我的图像图中,它指定:
image:
repository: my_image_in_ecr
tag: latest
pullPolicy: IfNotPresent
当我尝试使用 helm 进行部署时,我遇到了问题。 我的理解是用 helm 运行我的程序,我应该:
在我的图表上运行 helm install
在我的新 kubernetes pod 中运行映像
但是当我查看我的 kubernetes pod 时,它们似乎从未启动并运行。
hello-test1-hello-world-54465c788c-dxrc7 0/1 ImagePullBackOff 0 49m
hello-test2-hello-world-8499ddfb76-6xn5q 0/1 ImagePullBackOff 0 2m45s
hello-test3-hello-world-84489658c4-ggs89 0/1 ErrImagePull 0 15s
这些 Pod 的日志如下所示:
Error from server (BadRequest): container "hello-world" in pod "hello-test3-hello-world-84489658c4-ggs89" is waiting to start: trying and failing to pull image
由于我不知道如何使用 Kubernetes 正确设置 imagePullSecrets,所以我预计这会失败。但我期待不同的错误消息,例如错误的身份验证凭据。
如何正确设置凭据(例如 imagePullSecrets)来授权从 ecr 拉取镜像?
传统的方法是授予节点一个实例角色,其中包括
ecr:*
IAM 权限,确保您已在 --cloud-provider=aws
、apiserver
和 controller-manager
上设置了 kubelet
(如果您正在这样做) AWS 内任何带有 kubernetes 的东西,您肯定希望正确启用和配置),然后 kubelet
将自动与 ECR 协调以实现 Just Work™
该信息出现在您引用的页面上,标题为 Using Amazon Elastic Container Registry 下,但不清楚您是否阅读了该信息但不理解,或者阅读了它但它不适用于您,或者没有到达页面那么远
如果您在 AWS 上使用 EKS,您可以创建 k8s 服务帐户,为您的 pod 分配 IAM 角色权限。
这是供您开始使用的 AWS 文档 https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html