Bitbucket Pipelines部署ECR镜像至EKS的命令问题排查
ECR镜像部署到EKS的问题解决与最优CI/CD方案
一、"deployments.apps 'xxx-app' not found" 错误排查
出现这个错误的核心是kubectl找不到指定部署资源,常见排查点:
- 核对部署名称拼写,或确认资源是否在目标命名空间下:执行
kubectl get deployments -n <你的命名空间>验证资源存在性 - 检查Bitbucket Pipelines关联的AWS IAM权限:确保角色拥有访问目标EKS集群及对应命名空间部署资源的权限(需包含
eks:DescribeCluster、apps:UpdateDeployment等操作权限) - 确认集群上下文配置正确:管道中需切换到目标EKS集群,可通过
aws eks update-kubeconfig --name <集群名> --region <区域>重新配置
二、正确的kubectl镜像更新命令
推荐两种适配CI/CD场景的命令:
1. 直接更新部署镜像(最快捷)
kubectl set image deployment/xxx-app <容器名称>=<ECR镜像地址>:<镜像标签> -n <命名空间>
示例:
kubectl set image deployment/xxx-app app=123456789012.dkr.ecr.us-east-1.amazonaws.com/xxx-app:v1.0.0 -n prod
2. 通过YAML文件更新(适合多配置变更场景)
先替换YAML中的镜像字段,再应用配置:
# 替换YAML内的镜像内容 sed -i 's|image: .*xxx-app|image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/xxx-app:v1.0.0|' deployment.yaml # 应用更新后的配置 kubectl apply -f deployment.yaml -n prod
三、Bitbucket Pipelines最优部署流程
1. 安全配置AWS身份认证
优先使用OIDC身份提供商(无需存储长期密钥):
- 在AWS IAM中创建OIDC提供商,关联Bitbucket的OIDC地址
- 创建IAM角色,赋予EKS集群访问权限(如
AmazonEKSClusterPolicy)及部署资源的操作权限 - 在Bitbucket仓库变量中配置AWS_REGION、EKS_CLUSTER_NAME等参数
2. Pipelines.yml示例配置
image: atlassian/aws-cli:latest pipelines: branches: main: - step: name: Deploy to EKS oidc: true script: # 配置EKS集群上下文 - aws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region $AWS_REGION # 验证集群连接状态 - kubectl get nodes # 更新部署镜像 - kubectl set image deployment/xxx-app app=$ECR_IMAGE_URI:$IMAGE_TAG -n $NAMESPACE # 等待部署完成并验证状态 - kubectl rollout status deployment/xxx-app -n $NAMESPACE variables: - ECR_IMAGE_URI: '123456789012.dkr.ecr.us-east-1.amazonaws.com/xxx-app' - IMAGE_TAG: 'v1.0.0' - NAMESPACE: 'prod' - EKS_CLUSTER_NAME: 'your-eks-cluster' - AWS_REGION: 'us-east-1'
3. 关键注意事项
- 部署步骤中添加
kubectl rollout status,确保部署成功再结束流程 - 镜像标签建议使用Git commit hash或语义化版本号,避免用latest标签导致版本不可控
- 生产环境需前置测试步骤(如单元测试、镜像安全扫描),保障镜像可用性
内容的提问来源于stack exchange,提问作者ZAFER
相关产品推荐
相关产品推荐

