【发布时间】:2022-02-12 09:38:46
【问题描述】:
我正在研究 AWS 上的 CI/CD (CodePipeline/CodeBuild/CodeDeploy),发现它是一个非常好的工具,可以管理云上的管道并管理所有内容(甚至不需要在 EC2 上安装 Jenkins) .
我现在正在阅读有关容器构建和部署的信息。对于构建阶段,CodeBuild 支持构建容器映像。在部署阶段,虽然我可以找到 ECS 集群的 CodeDeploy 解决方案,但似乎没有针对 EKS 的直接 CodeDeploy 解决方案(如果我错了,请纠正)。
请问是否有集成 EKS 集群的解决方案(即部署阶段可以从 ECR 或 dockerhub 获取 docker 映像并部署到 EKS)?我遇到了一些想法,使用 lamda 函数来触发集群以执行容器映像的滚动更新,但我找不到这方面的分步指南。
===========================
(2020 年 9 月 17 日更新)
不知何故设法创建了一个 lambda 函数来触发对 EKS 的更新,以执行 k8s 部署的滚动更新。感谢 Prashanna 提供源代码库。
只想分享过程中的关键设置。
(1) 更新 lambda 执行角色以包含描述 EKS 集群的权限
创建具有描述 EKS 集群访问权限的策略,并附加到角色:
政策 sn-p:
...
......
"Action": "eks:Describe*"
...
......
或者您可以创建“EKSFullAccess”策略,并附加到 lambda 执行角色
(2) 更新 k8s ConfigMap,将 lambda 执行角色 ARN 补充到 mapRole 部分。对应的 k8s 角色应该是有权更新用于 k8s 部署的容器镜像(比如 system:masters)的角色
您可以使用如下命令编辑地图:
kubectl edit -n kube-system configmap/aws-auth
即使您的部署位于另一个命名空间中,您也不必添加/更新另一个 ConfigMap。它也会生效。
示例 lambda 函数调用请求和响应:
【问题讨论】:
-
C 你提到的流程对我有用,但我得到 [Errno 2] No such file or directory: 'aws': 'aws' 我可以看到你的屏幕截图也会出现部署永远不会发生。有什么想法吗?
标签: kubernetes aws-codepipeline aws-code-deploy aws-codebuild amazon-eks