生成的 Pod 一直处于 0/2 状态,导致图像无法在 ECR 和 EKS 之间正常工作
亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《生成的 Pod 一直处于 0/2 状态,导致图像无法在 ECR 和 EKS 之间正常工作》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。
我已经尝试了几乎所有方法来让事情走上正确的路径,但仍然无法让我的 pod 处于可用状态。
所以我有一个用 go 编写的基本应用程序。
我使用 docker build --tag docker-gs-ping .
创建了程序的映像
然后我尝试在容器内运行相同的命令 docker run --publish 8080:8080 docker-gs-ping
然后我想将我的图像保存到 amazon ecr,为此我在 ecr 中创建了一个存储库。
现在,在创建存储库后,我标记了本地中存在的图像。
docker tag f49366b7f534 ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
f49366b7f534
是我本地的图像标签。 docker-gs-ping
是 ecr 中的存储库名称。
然后我使用命令将标记的图像上传到 ecr。
docker push ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
不确定上述命令是否会从本地推送标记的图像或最近的图像,因为无法提及要推送到 ecr 的特定图像。
目前的结果是
完成上述步骤后,我使用以下文件和命令创建了一个 vps:
eks 堆栈:
--- awstemplateformatversion: '2010-09-09' description: 'amazon eks cluster' parameters: clustername: type: string default: my-eks-cluster numberofworkernodes: type: number default: 1 workernodesinstancetype: type: string default: t2.micro kubernetesversion: type: string default: 1.22 resources: ########################################### ## roles ########################################### eksrole: type: aws::iam::role properties: rolename: my.eks.cluster.role assumerolepolicydocument: version: "2012-10-17" statement: - effect: allow principal: service: - eks.amazonaws.com action: - sts:assumerole path: / managedpolicyarns: - "arn:aws:iam::aws:policy/amazoneksclusterpolicy" eksnoderole: type: aws::iam::role properties: rolename: my.eks.node.role assumerolepolicydocument: version: "2012-10-17" statement: - effect: allow principal: service: - ec2.amazonaws.com action: - sts:assumerole path: / managedpolicyarns: - "arn:aws:iam::aws:policy/amazoneksworkernodepolicy" - "arn:aws:iam::aws:policy/amazonec2containerregistryreadonly" - "arn:aws:iam::aws:policy/amazoneks_cni_policy" ########################################### ## eks cluster ########################################### ekscluster: type: aws::eks::cluster properties: name: !ref clustername version: !ref kubernetesversion rolearn: !getatt eksrole.arn resourcesvpcconfig: securitygroupids: - !importvalue controlplanesecuritygroupid subnetids: !split [ ',', !importvalue privatesubnetids ] eksnodegroup: type: aws::eks::nodegroup dependson: ekscluster properties: clustername: !ref clustername noderole: !getatt eksnoderole.arn scalingconfig: minsize: ref: numberofworkernodes desiredsize: ref: numberofworkernodes maxsize: ref: numberofworkernodes subnets: !split [ ',', !importvalue privatesubnetids ]
命令:aws cloudformation create-stack --region us-east-1 --stack-name my-eks-cluster --capability capability_named_iam --template-body file://eks-stack.yaml
eks vpc yaml
--- awstemplateformatversion: '2010-09-09' description: 'amazon eks vpc - private and public subnets' parameters: vpcblock: type: string default: 192.168.0.0/16 description: the cidr range for the vpc. this should be a valid private (rfc 1918) cidr range. publicsubnet01block: type: string default: 192.168.0.0/18 description: cidrblock for public subnet 01 within the vpc publicsubnet02block: type: string default: 192.168.64.0/18 description: cidrblock for public subnet 02 within the vpc privatesubnet01block: type: string default: 192.168.128.0/18 description: cidrblock for private subnet 01 within the vpc privatesubnet02block: type: string default: 192.168.192.0/18 description: cidrblock for private subnet 02 within the vpc metadata: aws::cloudformation::interface: parametergroups: - label: default: "worker network configuration" parameters: - vpcblock - publicsubnet01block - publicsubnet02block - privatesubnet01block - privatesubnet02block resources: vpc: type: aws::ec2::vpc properties: cidrblock: !ref vpcblock enablednssupport: true enablednshostnames: true tags: - key: name value: !sub '${aws::stackname}-vpc' internetgateway: type: "aws::ec2::internetgateway" vpcgatewayattachment: type: "aws::ec2::vpcgatewayattachment" properties: internetgatewayid: !ref internetgateway vpcid: !ref vpc publicroutetable: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: public subnets - key: network value: public privateroutetable01: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: private subnet az1 - key: network value: private01 privateroutetable02: type: aws::ec2::routetable properties: vpcid: !ref vpc tags: - key: name value: private subnet az2 - key: network value: private02 publicroute: dependson: vpcgatewayattachment type: aws::ec2::route properties: routetableid: !ref publicroutetable destinationcidrblock: 0.0.0.0/0 gatewayid: !ref internetgateway privateroute01: dependson: - vpcgatewayattachment - natgateway01 type: aws::ec2::route properties: routetableid: !ref privateroutetable01 destinationcidrblock: 0.0.0.0/0 natgatewayid: !ref natgateway01 privateroute02: dependson: - vpcgatewayattachment - natgateway02 type: aws::ec2::route properties: routetableid: !ref privateroutetable02 destinationcidrblock: 0.0.0.0/0 natgatewayid: !ref natgateway02 natgateway01: dependson: - natgatewayeip1 - publicsubnet01 - vpcgatewayattachment type: aws::ec2::natgateway properties: allocationid: !getatt 'natgatewayeip1.allocationid' subnetid: !ref publicsubnet01 tags: - key: name value: !sub '${aws::stackname}-natgatewayaz1' natgateway02: dependson: - natgatewayeip2 - publicsubnet02 - vpcgatewayattachment type: aws::ec2::natgateway properties: allocationid: !getatt 'natgatewayeip2.allocationid' subnetid: !ref publicsubnet02 tags: - key: name value: !sub '${aws::stackname}-natgatewayaz2' natgatewayeip1: dependson: - vpcgatewayattachment type: 'aws::ec2::eip' properties: domain: vpc natgatewayeip2: dependson: - vpcgatewayattachment type: 'aws::ec2::eip' properties: domain: vpc publicsubnet01: type: aws::ec2::subnet metadata: comment: subnet 01 properties: mappubliciponlaunch: true availabilityzone: fn::select: - '0' - fn::getazs: ref: aws::region cidrblock: ref: publicsubnet01block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-publicsubnet01" - key: kubernetes.io/role/elb value: 1 publicsubnet02: type: aws::ec2::subnet metadata: comment: subnet 02 properties: mappubliciponlaunch: true availabilityzone: fn::select: - '1' - fn::getazs: ref: aws::region cidrblock: ref: publicsubnet02block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-publicsubnet02" - key: kubernetes.io/role/elb value: 1 privatesubnet01: type: aws::ec2::subnet metadata: comment: subnet 03 properties: availabilityzone: fn::select: - '0' - fn::getazs: ref: aws::region cidrblock: ref: privatesubnet01block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-privatesubnet01" - key: kubernetes.io/role/internal-elb value: 1 privatesubnet02: type: aws::ec2::subnet metadata: comment: private subnet 02 properties: availabilityzone: fn::select: - '1' - fn::getazs: ref: aws::region cidrblock: ref: privatesubnet02block vpcid: ref: vpc tags: - key: name value: !sub "${aws::stackname}-privatesubnet02" - key: kubernetes.io/role/internal-elb value: 1 publicsubnet01routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref publicsubnet01 routetableid: !ref publicroutetable publicsubnet02routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref publicsubnet02 routetableid: !ref publicroutetable privatesubnet01routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref privatesubnet01 routetableid: !ref privateroutetable01 privatesubnet02routetableassociation: type: aws::ec2::subnetroutetableassociation properties: subnetid: !ref privatesubnet02 routetableid: !ref privateroutetable02 controlplanesecuritygroup: type: aws::ec2::securitygroup properties: groupdescription: cluster communication with worker nodes vpcid: !ref vpc outputs: publicsubnetids: description: public subnets ids in the vpc value: !join [ ",", [ !ref publicsubnet01, !ref publicsubnet02 ] ] export: name: publicsubnetids privatesubnetids: description: private subnets ids in the vpc value: !join [ ",", [ !ref privatesubnet01, !ref privatesubnet02 ] ] export: name: privatesubnetids controlplanesecuritygroupid: description: security group for the cluster control plane communication with worker nodes value: !ref controlplanesecuritygroup export: name: controlplanesecuritygroupid vpcid: description: the vpc id value: !ref vpc export: name: vpcid
命令:aws cloudformation create-stack --region us-east-1 --stack-name my-eks-vpc --template-body file://eks-vpc-stack.yaml
命令后的结果:
现在我尝试部署deployment.yaml和service.yaml文件
deployment.yaml
apiversion: apps/v1 kind: deployment metadata: name: helloworld namespace: default spec: replicas: 2 selector: matchlabels: app: helloworld template: metadata: labels: app: helloworld spec: containers: - name: new-container image: ****40312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest ports: - containerport: 80
命令和结果:
现在service.yaml
apiversion: v1 kind: service metadata: name: helloworld spec: type: loadbalancer selector: app: helloworld ports: - name: http port: 80 targetport: 80
命令和结果:
完成这一切后,当我运行 kubectl get 部署时,我得到如下结果:
为了调试,我尝试了 kubectl描述pod helloworld,我得到如下
C:\Users\visratna\GolandProjects\testaws>kubectl describe pod helloworld Name: helloworld-c6dc56598-jmpvr Namespace: default Priority: 0 Service Account: default Node: docker-desktop/192.168.65.4 Start Time: Fri, 07 Jul 2023 22:22:18 +0530 Labels: app=helloworld pod-template-hash=c6dc56598 Annotations:Status: Pending IP: 10.1.0.7 IPs: IP: 10.1.0.7 Controlled By: ReplicaSet/helloworld-c6dc56598 Containers: new-container: Container ID: Image: 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sldvv (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-sldvv: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: DownwardAPI: true QoS Class: BestEffort Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23m default-scheduler Successfully assigned default/helloworld-c6dc56598-jmpvr to docker-desktop Normal Pulling 22m (x4 over 23m) kubelet Pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Warning Failed 22m (x4 over 23m) kubelet Failed to pull image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest": rpc error: code = Unknown desc = Error response from daemon: Head "https://549840312665.dkr.ecr.us-east-1.amazonaws.com/v2/docker-gs-ping/manifests/latest": no basic auth credentials Warning Failed 22m (x4 over 23m) kubelet Error: ErrImagePull Warning Failed 22m (x6 over 23m) kubelet Error: ImagePullBackOff Normal BackOff 3m47s (x85 over 23m) kubelet Back-off pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Name: helloworld-c6dc56598-r9b4d Namespace: default Priority: 0 Service Account: default Node: docker-desktop/192.168.65.4 Start Time: Fri, 07 Jul 2023 22:22:18 +0530 Labels: app=helloworld pod-template-hash=c6dc56598 Annotations: Status: Pending IP: 10.1.0.6 IPs: IP: 10.1.0.6 Controlled By: ReplicaSet/helloworld-c6dc56598 Containers: new-container: Container ID: Image: 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest Image ID: Port: 80/TCP Host Port: 0/TCP State: Waiting Reason: ImagePullBackOff Ready: False Restart Count: 0 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-84rw4 (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-84rw4: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: DownwardAPI: true QoS Class: BestEffort Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23m default-scheduler Successfully assigned default/helloworld-c6dc56598-r9b4d to docker-desktop Normal Pulling 22m (x4 over 23m) kubelet Pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest" Warning Failed 22m (x4 over 23m) kubelet Failed to pull image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest": rpc error: code = Unknown desc = Error response from daemon: Head "https://549840312665.dkr.ecr.us-east-1.amazonaws.com/v2/docker-gs-ping/manifests/latest": no basic auth credentials Warning Failed 22m (x4 over 23m) kubelet Error: ErrImagePull Warning Failed 22m (x6 over 23m) kubelet Error: ImagePullBackOff Normal BackOff 3m43s (x86 over 23m) kubelet Back-off pulling image "549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest"
我已经按照 stackoverflow 上的建议尝试了许多解决方案,但似乎没有任何对我有用的解决方案,有什么建议我可以让事情正常工作吗?预先非常感谢您。
正确答案
有几件事。首先,您应该避免使用最新标签。这是一种反模式。当您将映像推送到 ECR 时,请使用构建标签或版本号作为映像标签。其次,您需要验证您的工作线程节点是否有权从 ECR 提取映像,特别是 AmazonEC2ContainerRegistryReadOnly 策略。否则,kubelet 将无法从 ECR 中提取镜像。如果注册表与集群位于不同的帐户中,则需要创建存储库[资源]策略。请参阅 https://docs.aws.amazon.com/AmazonECR /latest/userguide/repository-policies.html。
理论要掌握,实操不能落!以上关于《生成的 Pod 一直处于 0/2 状态,导致图像无法在 ECR 和 EKS 之间正常工作》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

- 上一篇
- 波士顿动力Atlas:独立搬运汽车零件的新进展

- 下一篇
- 区块链供应链 DApps 开发中的新功能:仅为所有者名称添加预算
-
- Golang · Go问答 | 1年前 |
- 在读取缓冲通道中的内容之前退出
- 139浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 戈兰岛的全球 GOPRIVATE 设置
- 204浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何将结构作为参数传递给 xml-rpc
- 325浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何用golang获得小数点以下两位长度?
- 477浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何通过 client-go 和 golang 检索 Kubernetes 指标
- 486浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 将多个“参数”映射到单个可变参数的习惯用法
- 439浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 将 HTTP 响应正文写入文件后出现 EOF 错误
- 357浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 结构中映射的匿名列表的“复合文字中缺少类型”
- 352浏览 收藏
-
- Golang · Go问答 | 1年前 |
- NATS Jetstream 的性能
- 101浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何将复杂的字符串输入转换为mapstring?
- 440浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 相当于GoLang中Java将Object作为方法参数传递
- 212浏览 收藏
-
- Golang · Go问答 | 1年前 |
- 如何确保所有 goroutine 在没有 time.Sleep 的情况下终止?
- 143浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 协启动
- SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
- 7次使用
-
- Brev AI
- 探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
- 7次使用
-
- AI音乐实验室
- AI音乐实验室(https://www.aimusiclab.cn/)是一款专注于AI音乐创作的平台,提供从作曲到分轨的全流程工具,降低音乐创作门槛。免费与付费结合,适用于音乐爱好者、独立音乐人及内容创作者,助力提升创作效率。
- 6次使用
-
- PixPro
- SEO摘要PixPro是一款专注于网页端AI图像处理的平台,提供高效、多功能的图像处理解决方案。通过AI擦除、扩图、抠图、裁切和压缩等功能,PixPro帮助开发者和企业实现“上传即处理”的智能化升级,适用于电商、社交媒体等高频图像处理场景。了解更多PixPro的核心功能和应用案例,提升您的图像处理效率。
- 6次使用
-
- EasyMusic
- EasyMusic.ai是一款面向全场景音乐创作需求的AI音乐生成平台,提供“零门槛创作 专业级输出”的服务。无论你是内容创作者、音乐人、游戏开发者还是教育工作者,都能通过EasyMusic.ai快速生成高品质音乐,满足短视频、游戏、广告、教育等多元需求。平台支持一键生成与深度定制,积累了超10万创作者,生成超100万首音乐作品,用户满意度达99%。
- 9次使用
-
- GoLand调式动态执行代码
- 2023-01-13 502浏览
-
- 用Nginx反向代理部署go写的网站。
- 2023-01-17 502浏览
-
- Golang取得代码运行时间的问题
- 2023-02-24 501浏览
-
- 请问 go 代码如何实现在代码改动后不需要Ctrl+c,然后重新 go run *.go 文件?
- 2023-01-08 501浏览
-
- 如何从同一个 io.Reader 读取多次
- 2023-04-11 501浏览