写点什么

使用 AWS CDK 轻松构建云原生应用之 EKS 平台(四)

  • 2019-12-20
  • 本文字数:2385 字

    阅读完需:约 8 分钟

使用 AWS CDK 轻松构建云原生应用之 EKS 平台(四)

4 创建 EKS 平台

4.1 创建 EKS 集群

Amazon EKS 是 AWS 上托管的 K8S 容器管理平台,关于 EKS 这里不做过多描述了,具体的可以参考 AWS 的官方文档:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/what-is-eks.html


这里我们采用 CDK 来创建 EKS 集群,具体的代码和解释如下:



里面的参数都可以按照需要修改,在添加 node 节点时也可以选择添加 spot instance。

4.2 向 EKS 的 node group 授予 policy

有些情况下,我们要向 EKS 的节点授予一定权限,比如我们需要 node 上的应用从 System Manager 的 parameter store 中取信息,那我们需要向 node group 授予 SSM 的 policy,通过以下代码实现:



通常在用 CDK 创建 EKS 集群时会默认创建一个 AutoScalingGroup,然后在 add capacity 的时候会创建第二个 AutoSacalingGroup,所以在授予 policy 时需要向两个 ASG 中的 node 都授予。代码里也有两个部分。在我们的应用中我们设置了 default capacity 为 0,所以禁止了创建默认 ASG 的行为,就只有一个 ASG,不需要向默认创建的 ASG 授予 policy。这时候如果执行第一部分代码会报错,所以前面两行代码注释掉了。在实际使用中要注意这两者的差别,两个 ASG 需要分别控制和管理。


所有 Policy 都可以采用这种方式授予 node group,包括 AWS 托管的 Policy 和自定义的 policy。

4.3 创建 K8S 资源

通过以上步骤我们创建了一个具有 control plan 控制平面、node group 和 ASG 的 Amazon EKS 集群,除了自身的 coredns 外不具有其他的 Kubernetes 资源。但是我们知道 K8S 中有很多 Kubernetes 资源包括 deployment、services、RBAC、ingress 等是典型云原生应用运行必不可少的部分。由于这类资源对 CloudfFormation 来说并不属于 AWS 托管的服务,无法投过 CDK 提供的 L2 construct library 直接部署,因此在 AWS CDK 中会透过 @aws-cdk/aws-cloudformation 的 CustomerResource Class 来实现,也就是 @aws-cdk/aws-eks 里面的 KubernetesResource Class,而它背后是通过 AWS Lambda 调度 lambda-layer-kubectl Lambda Layer 来运行 kubectl 客户端创建出 K8S 资源,详细可以参考@aws-cdk/aws-ek/lib/k8s-resource.ts).


但是 CDK 中现在还不支持以 YAML 文件定义的资源,而只能添加一组 JSON Array。因此我单独实现了一个小工具用来将 YAML 文件转换为需要的 JSON Array。



现在,我们可以将转换好的 JSON Array 提供给 cluster 作为资源。比如说,在以下的示例代码中为该 EKS 集群增加了 RBAC 和 Ingress controller 资源:



在应用运行的时候,这些资源会重新组装成为 manifest.yaml,通过 kubectl 的方式在该 EKS 平台上运行,创建出需要的 K8S 资源。


所有需要的资源都可以采用这种方式添加到 cluster 中。

4.4 定义 EKSStack 的入口

我们在 app.py 中定义 EKS Stack 的执行入口



这里我们还用 dependency 表示 EKS 依赖于 Landingzone,也就是先要创建 AWS 上基础的网络架构,在创建 EKS 平台。

4.5 查看 Stack

现在我们在命令行中运行 ls,可以看到两个 Stack,他们之间是有相互依赖关系的。



同样我们也可以通过 cdk synth 查看生成的 CloudFormation 模板。

5.运行 Stack

我们通过 cdk deploy 依次运行 Landingzone Stack 和 EKS Stack,分别创建基础网络和 EKS 平台。当然我们也可以直接运行 EKS stack,因为它对 Landingzone stack 有依赖,所以 cdk 会先检查 Landingzone 是否创建了,如果没有的话会先创建 Landingzone。



可以看到,对于一些 IAM 和安全组相关的资源创建/删除/更改,CDK 会提示要求确认。其他资源则不会有提示。在选择了“y”之后,就会创建 cloudformation changeset,然后通过 cloudformation 创建资源,同时在 console 上输出 Cloudformation 的运行过程。


这时我们也可以在 AWS console 中的 Cloudformation 查看运行状态。



创建过程中,如果我们把 CDK 运行的命令行窗口关掉也不要紧,Cloudformation 仍然会继续执行。


执行好后,我们在命令行和 console 里都可以看到运行结果。



我们也可以采用同样的方式创建 EKS Stack。可以在 AWS console 中查看创建的结果:



可以看到有两个 stack,其中一个带有 nested 字样的是嵌套 stack,是用来运行 kubectl 客户端的 lambda layer。


我们再在 EKS 的界面看一下:



现在我们就可以登入 EKS 里玩一下啦!~

总结

这篇文章是我们云原生专栏的开篇。在这篇文章里,我们了解了如何采用 CDK 轻松快速地在一个全新的 AWS 账号下构建基础网络架构,并在其上构建 EKS 平台及需要的 K8S 资源。


AWS CDK 对底层 CloudFormation 进行了更高级别抽象,针对一些常用的架构设计方式,比如每个 AZ 中几个子网、子网的类型、安全组设置、IAM 权限设置等提供了高级别的方法,可以更加方便和高效地创建 AWS 资源,而且多语言支持简单易上手。


但是 CDK 的 L2 construct 在对 CloudFormation 资源封装的同时也缺失了一些底层属性,所以可以满足大部分使用场景但不能满足所有。如果有需要的属性缺失的话,可以基于 L1 construct 实现,也可以在 github 上提交Issue或者自己提交PR修改 L2。AWS CDK 是一个非常活跃的开源项目,更新很快,也欢迎大家贡献维护。

感谢

感谢解决方案架构师专家 Pahud Hsieh (謝洪恩)、解决方案架构师经理薛军和安全顾问 Kelvin Medina 对本文章提出的宝贵意见。

下一篇介绍

下一篇中,我们会了解如何采用 CDK 构建应用所需要的日志收集和展示系统,

本篇作者

!



### [](https://amazonaws-china.com/cn/blogs/china/tag/%E5%BC%A0%E8%8A%B8/)
张芸,AWS资深云计算及应用架构顾问。目前在AWS负责针对企业客户的云原生转型,微服务、容器化和无服务器改造等咨询实施服务。曾就职于EMC中国研究院,具有10年以上云计算和大数据相关技术研究和开发经验。拥有多项美国和中国专利,涉及云计算及服务,分布式系统,软件定义数据中心和自动化运维等领域,合作编著图书《大数据—战略·技术·实践》。
复制代码


2019-12-20 15:151035

评论

发布
暂无评论
发现更多内容

0910-求职与招聘热点信息汇总

Y11

求职 找工作 招聘 应届生 实习

VibeCoding On Function AI Deep Dive:用 AI 应用生产 AI 应用

阿里巴巴云原生

阿里云 云原生

企业如何做好知识治理?这份来自华为的经验请收好!

YG科技

免费用鲲鹏资源!华为开发者空间实操:DevKit Java 性能分析,新手也能上手

华为云开发者联盟

鲲鹏 DevKit 华为开发者空间

基于华为开发者空间,玩转MySQL系列

华为云开发者联盟

华为开发者空间 mysql'

从指标异常到细节溯源:嘉为蓝鲸CMeas研发效能洞察平台链接跳转让研发数据问题可视化

嘉为蓝鲸

DevOps 研发效能 研发效能度量 研发效能管理 研发效能洞察平台

软件著作权市场与加密货币趋势

跑一跑

著作权

CAD如何实现模型和布局空间的图形对齐

极客天地

从MySQL到StarRocks:全量与增量同步的最佳实践

谷云科技RestCloud

MySQL ETL StarRocks 数据集成工具 数据库同步

CAD工程视图如何显示切线

极客天地

基于华为开发者空间的云端JVM服务远程调试:CodeArts IDE配置指南

华为云开发者联盟

JVM CodeArts 华为开发者空间

VibeCoding On Function AI Deep Dive:用 AI 应用生产 AI 应用

阿里巴巴云原生

阿里云 AI 云原生

灵码产品演示:软件工程架构分析

阿里巴巴云原生

阿里云 云原生 通义灵码

批量查询快递信息!物流管家SaaS重塑商家物流体验

快递鸟

嘉为蓝鲸制品库:100%兼容JFrog功能,数据安全+国产化认证双重保障落地

嘉为蓝鲸

DevOps 研发效能 制品库 制品管理 JFrog迁移

开发效率翻倍!编码助手+云效 AI 评审如何破解代码质量与速度难题?

阿里巴巴云原生

阿里云 云原生 通义灵码

低代码:那些你不知道的隐藏功能大揭秘

伤感汤姆布利柏

用华为 CodeArts 搞 DevOps!团队协作搭流水线,端到端支持软件交付

华为云开发者联盟

DevOps 华为开发者空间

灵码产品演示:软件工程架构分析

阿里云云效

阿里云 云原生 通义灵码

【跨国数仓迁移实践9】dbt‑maxcompute 在 GoTerra 迁移过程中的落地与技术贡献

阿里云大数据AI技术

阿里云 数据迁移 MaxCompute

1688图片搜索相似商品API接入全攻略

tbapi

1688API 1688图片搜索接口 1688拍立淘接口

基于华为开发者空间,用大数据带你挖掘电商Top10热门品类

华为云开发者联盟

华为开发者空间

文心快码3.5S全新升级,体验多智能体协同开发,最高赢无人机!

Comate编码助手

AI辅助编程 AI 编程 文心快码 文心快码3.5S

非凸科技连续两年荣登 IDC中国FinTech Emerging 50

非凸科技

告别部署难题:基于华为开发者空间的CodeArts Deploy容器化部署解决方案

华为云开发者联盟

JVM 华为开发者空间

流程大咖说 |面向对象事件日志 OCEL技术详解

凡得流程PROCESS X

信息技术 企业构架 流程资产 #流程挖掘

开发效率翻倍!编码助手+云效 AI 评审如何破解代码质量与速度难题?

阿里云云效

阿里云 云原生 通义灵码

嘉为蓝鲸WeOps一体化智能运维平台上新:移动端知识库随手查,AI精准检测非常规监控问题

嘉为蓝鲸

智能运维 weops 一体化运维 一体化智能运维平台 一体化运维平台

GitCode 管代码 + Git 命令实操,云主机上轻松搞定项目版本控制

华为云开发者联盟

华为开发者空间 citcode

精准把控人力,PJMan “负荷分析” 助力项目高效推进

Tecjt_锦图科技

项目管理 甘特图 项目进度管理

从零开始搭建Qwen智能体:新手也能轻松上手指南

测吧(北京)科技有限公司

使用 AWS CDK 轻松构建云原生应用之 EKS 平台(四)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章