如何将 AWS EKS 包含在 CI/CD 中?

How to include AWS EKS with CI/CD?

我正在研究 AWS (CodePipeline/CodeBuild/CodeDeploy) 上的 CI/CD,发现它是一个非常好的工具,用于管理云上的管道,一切都在管理中(甚至不需要安装) EC2 上的詹金斯)。

我正在阅读有关容器构建和部署的内容。对于构建阶段,CodeBuild 支持构建容器镜像。对于部署阶段,虽然我可以找到针对 ECS 集群的 CodeDeploy 解决方案,但似乎没有针对 EKS 的直接 CodeDeploy 解决方案(如果我错了,请纠正)。

请问有没有集成EKS集群的解决方案(即部署阶段可以从ECR或dockerhub获取docker镜像并部署到EKS)?我遇到了一些使用 lamda 函数触发集群执行容器镜像滚动更新的想法,但我找不到这方面的分步指南。

=========================

(2020 年 9 月 17 日更新)

设法创建了一个 lambda 函数来触发对 EKS 的更新,以执行 k8s 部署的滚动更新。感谢 Prashanna 提供源代码库。

只想分享过程中的关键设置。

(1) 更新 lambda 执行角色以包含描述 EKS 集群的权限

创建一个描述 EKS 集群访问的策略,并附加到角色:

政策片段:

...
......
"Action": "eks:Describe*"
...
......

或者您可以创建“EKSFullAccess”策略,并附加到 lambda 执行角色

(2)更新k8s ConfigMap,将lambda执行角色ARN补充到mapRole部分。对应的k8s角色应该是有权限更新用于k8s部署的容器镜像(比如system:masters)的角色

您可以使用如下命令编辑地图:

kubectl edit -n kube-system configmap/aws-auth

即使您的部署位于另一个命名空间中,您也不必 add/update 另一个 ConfigMap。也会生效。

lambda 函数调用请求和响应示例:

Gitab 借助 Helm 图表提供了 EKS 和部署的内置集成。如果您打算使用其他工具使用 AWS lambda 来更新图像是最好的选择!

我已经添加了我的 github 项目。

使用以下代码设置一个 lambda,并在您的 EKS 中授予 RBAC 访问此 lambda 的权限。尝试通过传递命名空间、部署、映像等所需信息来调用 lambda

Lambda for Kubernetes image update

lambda 必须要求 EKS:describecluster 策略。

必须至少在 EKS 集群中提供 Lambda 角色更新映像 RBAC 角色 RBAC role setup

由于目前没有 built-in CI/CD 的 EKS,这将展示第 3 方 CI/CD 的 success/failure 个故事EKS :) 我的看法:https://github.com/fluxcd/flux

优点:

  • 初始设置快速(直到您进入多个 teams/environments)
  • 开箱即用地跟踪和部署映像版本
  • 可以使用正则表达式将 auto-deploy 中的内容拆分为 dev/prod。例如。所有版本都用于开发,只有次要版本用于生产。或者 dev/prod.
  • 的单独标签前缀
  • 所有状态都处于 git - 开始的好习惯

缺点:

  • 为了进一步的管道扩展而变得复杂,例如blue-green、金丝雀、auto-rollbacks 等
  • 仪表板是专有的(编织作品产品)
  • 不适用于 on-demand 参数化作业像传统 CI 一样运行。

设置:

  • 设置自动映像构建(看起来您已经想通了)
  • fluxhelm-operator 设置到集群中,将它们指向您的“gitops 存储库”
  • 对于每个应用,创建一个 HelmRelease 对象来描述要跟踪的图像标签的正则表达式

完成。符合正则表达式的新发布的图像标签将 auto-deployed 到集群,新版本提交到 gitops 存储库。