【问题标题】:How to include AWS EKS with CI/CD?如何在 CI/CD 中包含 AWS EKS?
【发布时间】: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


【解决方案1】:

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

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

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

Lambda for Kubernetes image update

lambda 必须要求 EKS:describecluster 策略。

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

【讨论】:

  • 谢谢@Prashanna。我正在尝试使用您的 lambda 函数来使用 Fargate 更新 EKS 集群。根据说明,我可以知道我需要向 lambda 执行角色添加什么策略(AmazonEKSFargatePodExecutionRolePolicy??)吗?关于修改k8s config map,我应该为上面的lambda执行角色添加一个mapRole吗?我应该将角色映射到哪些组(system:masters??)?
  • RBAC 角色不必是 master 任何具有更新容器权限的角色就足够了。对于 lambda,您需要提供 EKS 描述集群策略
  • 谢谢。最后设法用源代码创建了 lambda 函数。感谢您指点方向。
  • @Prashanna 您提到的流程对我有用,我得到了 200 状态,但我得到 [Errno 2] No such file or directory: 'aws': 'aws' 并且部署永远不会发生。有什么想法吗?
【解决方案2】:

由于目前没有用于 EKS 的内置 CI/CD,这将展示 EKS 中第 3 方 CI/CD 的成功/失败故事 :) 我的看法:https://github.com/fluxcd/flux

优点:

  • 初始设置快速(直到您进入多个团队/环境)
  • 开箱即用地跟踪和部署映像版本
  • 可以使用正则表达式在 dev/prod 中拆分自动部署的内容。例如。开发的所有版本,只有次要的产品。或者为 dev/prod 单独标记前缀。
  • 所有状态都在 git 中 - 一个很好的实践开始

缺点:

  • 为进一步扩展管道而变得复杂,例如蓝绿、金丝雀、自动回滚等。
  • 仪表板是专有的(weave works 产品)
  • 不像传统 CI 那样用于按需参数化作业运行。

设置:

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

完成。新发布的属于正则表达式的图像标签将自动部署到集群中,新版本将提交到 gitops 存储库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2020-10-30
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多