Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 AWS CDK Python 从零开始构建 EKS 集群

使用 AWS CDK Python 从零开始构建 EKS 集群

作者头像
郭旭东
发布于 2021-01-29 07:43:12
发布于 2021-01-29 07:43:12
1.9K00
代码可运行
举报
文章被收录于专栏:云原生工具箱云原生工具箱
运行总次数:0
代码可运行

记得点击上方云原生之路”关注哦

前言

上篇文章《AWS CDK | IaC 何必只用 Yaml》笔者介绍了 AWS CDK 的概念和基本使用方法,本篇文章就来使用 CDK 在 AWS 从零开始构建一个全新的 KES 集群,实际感受一下使用 AWS CDK 创建和管理云资源的简单和便捷。

资源清单

本文中,笔者会创建以下资源:

  • 创建一个 EKS 集群
  • 为 EKS master 配置一个 IAM Role
  • 创建一个 VPC(包含子网和 NAT
  • 为 EKS 创建一个 Node Group 用来管理一组 Worker 节点
  • 为 EKS 创建一个 Auto Scaling Group 用来管理弹性伸缩节点

Show me the code

本文代码已全部上传 GitHub,配合代码阅读本文体验更佳。

https://github.com/sunny0826/aws-cdk-eks

安装 AWS CDK

首先其实需要有 AWS CLI 命令行工具,并配置了 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGION,这里就不做详细介绍了,同时还要安装 Node.js 10.3.0 以上的版本。

使用 npm 安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install -g aws-cdk

安装完成后,检查 AWS CDK 版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cdk --version

创建 APP

AWS CDK 安装完成后,就可以开始创建项目了。

新建一个目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir aws-cdk-eks
$ cd aws-cdk-eks

初始化项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cdk init app --language python
$ source .venv/bin/activate
$ python -m pip install -r requirements.txt

这里就会生成一个 Python 项目,目录结构如下如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ tree
.
├── README.md
├── app.py
├── cdk.json
├── cdk_python
│   ├── __init__.py
│   └── cdk_python_stack.py   # 主要文件
├── requirements.txt
├── setup.py
└── source.bat

之后的代码就是写在 cdk_python_stack.py 中。

Codeing

接下来就是写代码时间了。

创建 VPC

首先 EKS 需要一个 VPC,这里有三种方式:

  • 使用 default VPC
  • 指定一个已有 VPC
  • 新建一个 VPC

直接使用 default VPC:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vpc = ec2.Vpc.from_lookup(self, id='Vpc', is_default=True)

指定现有 VPC:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vpc = ec2.Vpc.from_lookup(self, id='Vpc', vpc_id='vpc-0417e46d')

新建 VPC:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vpc = ec2.Vpc(self,
    'eks-vpc', # VPC id
    cidr='10.3.0.0/16', # CIDR
    max_azs=3,  # 跨3AZ
    nat_gateways=1 # 新建一个 NAT Gateway
    )

还有很多其他参数可以配置,这里用不到直接使用默认值。

创建 IAM

这里需要给 k8s 的 master 创建一个 IAM Role,这样我们才能对 EKS 进行管理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eks_master_role = iam.Role(self, 'EksMasterRole',
    role_name='EksAdminRole',
    assumed_by=iam.AccountRootPrincipal()
    )
创建 EKS

VPC 和 IAM 都已经准备好了,现在可以创建 EKS 集群了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cluster = eks.Cluster(self, 
    'Cluster',  # 集群 id
    vpc=vpc,  # 指定 VPC
    version=eks.KubernetesVersion.V1_18,  # K8S 版本
    masters_role=eks_master_role, # naster 的 IAM Role
    default_capacity=0  # 这里不需要 worker 节点,后面采用 MNGASG 来管理
    )

可以看到先前定义的 vpceks_master_role 都作为参数被传给了 cluster,而 default_capacity 是定义默认 worker 节点的,下面我们会采用 MNG 和 ASG 来管理 worker 节点,所以这里设置为 0.

为 EKS 添加 MNG

cluster 定义好后,相当于 K8S 的 master 节点已经配置完成,接下来就是 worker 节点的配置。EKS 可以使用 MNG 和 ASG 来管理 worker 节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cluster.add_nodegroup_capacity(
    'MNG',  # MNG id
    capacity_type=eks.CapacityType.SPOT,  # 节点类型
    desired_size=2, # 节点数量
    instance_types=[  # 节点规格
        ec2.InstanceType('t3.large'),
        ec2.InstanceType('m5.large'),
        ec2.InstanceType('c5.large'),
    ]),
为 EKS 添加 ASG
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cluster.add_auto_scaling_group_capacity(
  'ASGNG', # ASG id
  instance_type=[  # 节点规格
        ec2.InstanceType('t3.large'),
        ec2.InstanceType('m5.large'),
        ec2.InstanceType('c5.large'),
  ],
  desired_capacity=2 # 节点数量
  )

当然 MNG 和 ASG 都可以设置 max_sizemin_size,也就是可以实现节点级别的弹性伸缩,但是目前测试下来只有 ASG 可以将配置的资源 TAG 带入 EC2 的配置,而 MNG 需要通过定制 launch_template_spec 的方式才能实现。如果对这方面没有要求的话推荐使用 MNG。

到这里代码就写好了,只有几十行代码,下面我们就是检查和部署了。

Bootstrap

如果是第一次使用 AWS CDK 需要先执行 cdk bootstrap 命令,这个命令会在 S3 创建一个名为 cdktoolkit-XXX 的 bucket 用来存放 CDK 配置。

检查

执行 cdk diff 命令,这时就会打印出一系列列表,告诉你会有哪些资源变化,大致内容如下图。

cdk diff

可以执行 cdk synth 命令用来查看生成的 AWS CloudFormation template,笔者统计了一下生成 AWS CloudFormation template 的行数,这几十行代码居然生成了 1156 行的 CloudFormation 配置!

部署

在检查无误后就可以开始部署了,执行命令 cdk deploy 并输入 y 确认,之后可以看到部署的进度条。如果部署中间出现错误, CDK 会自动进行回滚,之前创建和修改的资源都会被恢复原样,可以放心使用。

部署成功

到这里,EKS 集群就已经部署成功了,执行两条命令,就能生成 kubeconfig 并使用 kubectl 访问了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ aws eks updata-kubeconfig ...
$ aws eks get-token ...

销毁

在完成测试后,执行命令 cdk destroy 对创建的资源进行释放。

结语

非常感谢来自 AWS 的 @pahud[1] 同学的指导和帮助,总体来说 Python 版本的 CDK 使用起来比较方便,但文档和源码中的说明略有不足。AWS CDK 的核心引擎其实是使用 Typescript 编写,其他语言的版本都是采用 JSii[2] 通过 TypeScript 转化而来。如果要深入使用,这里还是推荐使用 Typescript 的版本(其实我已经换成 Typescript 来写了),难度不是很大,值得一试。

参考资料

[1]

@pahud: https://github.com/pahud

[2]

JSii: https://github.com/aws/jsii

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AWS CDK | IaC 何必只用 Yaml
近年来基础设施即代码(IaC)的方式被越来越多的开发者和管理者所采用,各大公有云都提供了使用 IaC 管理自己云资源的方式,如 AWS 的 CloudFormation、阿里云的 ROS 等,而第三方的 Terraform 也有各大公有云的 Provider。越来越多像我一样的云资源运维和管理者开始采用 IaC 的方式对云资源进行创建、运维和管理。
郭旭东
2021/02/01
2.1K0
基于AWS EKS的K8S实践 - 集群搭建
基于AWS EKS的K8S实践系列文章是基于企业级的实战文章,一些设置信息需要根据公司自身的网络等要求进行设置,如果大家有问题讨论或咨询可以后台私信我或者加入知识星球问我,知识星球的加入方式在文章末尾。
shysh95
2023/08/23
6220
基于AWS EKS的K8S实践 - 集群搭建
AMBERSQUID 云原生挖矿恶意软件疑似与印尼黑客有关
Sysdig 的研究人员发现了一种新的云原生挖矿攻击行动,并将其命名为 AMBERSQUID。攻击针对不太常用的 AWS 服务,如 AWS Amplify、AWS Fargate 和 Amazon SageMaker。这些不常见的服务往往意味着其安全性也会被忽视,AMBERSQUID 可能会让受害者每天损失超过 1 万美元。
FB客服
2023/10/06
4730
AMBERSQUID 云原生挖矿恶意软件疑似与印尼黑客有关
基于AWS EKS的K8S实践 - 如何打通云企业网集群内外服务调用
service 通常用作集群内服务之前的通信,ingress 通常用于暴露给集群外的服务使用。
shysh95
2023/08/23
4490
基于AWS EKS的K8S实践 - 如何打通云企业网集群内外服务调用
在 EKS 上管理 NodeGroup
最初使用的 NodeGroup 的 InstantType 规格太低,不太好用,所以需要增加一个新的 NodeGroup 。
云云众生s
2024/03/27
1600
弹性 Kubernetes 服务:Amazon EKS
Amazon EKS(Amazon Elastic Kubernetes Service)是一项托管服务,允许您在 AWS 云上运行 Kubernetes,而无需设置、管理或维护自己的控制平面和节点。
网络技术联盟站
2023/03/13
3.8K0
弹性 Kubernetes 服务:Amazon EKS
AWS 容器服务的安全实践
随着微服务的设计模式得到越来越多开发者的实践,容器和微服务已经在生产环境中开始了规模化的部署。在这一过程中,也面临着越来越多的挑战。比如说,很多的微服务之间是相互依赖的,我们需要有更多的手段和方式来进行微服务的计划,扩展和资源管理,另外微服务之间的隔离更少,它们通常会共享内核或者网络,也对安全性提出了更高的要求。
我是阳明
2021/06/25
2.9K0
AWS 容器服务的安全实践
零停机给Kubernetes集群节点打系统补丁
Salesforce 的 Einstein Vision 和语言服务部署在 AWS Elastic Kubernetes Service(EKS) 集群上。其中有一个最主要的安全和合规性需求,就是给集群节点的操作系统打补丁。部署服务的集群节点需要通过打补丁的方式进行系统的定期更新。这些补丁减少了可能让虚拟机暴露于攻击之下的漏洞。
深度学习与Python
2021/06/08
1.3K0
零停机给Kubernetes集群节点打系统补丁
AWS简单搭建使用EKS二
紧接AWS简单搭建使用EKS一,eks集群简单搭建完成。需要搭建有状态服务必然就用到了storageclass 存储类,这里用ebs记录以下
对你无可奈何
2023/02/15
1.6K0
EKS 的 VPC 详解
通过 eksctl 创建集群,默认情况下会创建一个专门的 VPC 以及相关的资源,看起来较为复杂,所以有必要了解一下默认的 VPC ,然后才能更好的实现更个性化的配置。
云云众生s
2024/03/27
3350
创建 EKS 管理员
EKS 管理员不仅需要登录管理控制台,也需要通过 eksctl 管理集群,还需要能够管理 EC2 和 CloudFormation 等资源,所以需要较高的权限。
云云众生s
2024/03/27
2070
[工作随笔]Python 和 CDK的aws-route53那些事
AWS CDK,与使用 YAML(或 JSON)的声明式方法相比,CDK 允许您命令式声明基础设施。主要语言为 TypeScript,同时也支持另外几种语言。
DriverZeng
2022/10/31
1K0
[工作随笔]Python 和 CDK的aws-route53那些事
配置语言的黄金时代
我认为我们当前所认知的 DevOps 即将走到尽头。至少,其中的 Ops 会如此。随着云基础设施成为应用程序关注的重点,越来越多的 ops 任务由云本身完成或内置于应用程序中。剩下的就是供应和管理应用程序所需的基础设施。这关系到所有的相关附属内容,例如安全性和网络。
深度学习与Python
2021/03/12
3.3K0
从Wiz Cluster Games 挑战赛漫谈K8s集群安全
11月初,云安全公司WIZ发起了一项名为“EKS Cluster Games”的CTF挑战赛[1],引发了众多云安全爱好者的参与。本次挑战赛的主题是关于容器集群的攻击技巧。比赛共包括5个场景,整体存在一定的难度,非常值得挑战和学习。
云鼎实验室
2023/12/16
6020
从Wiz Cluster Games 挑战赛漫谈K8s集群安全
AWS CDK 漏洞使黑客能够接管 AWS 账户
Aquasec 的安全研究人员最近在 AWS Cloud Development Kit (CDK) 中发现了一个关键漏洞,该漏洞可能允许攻击者获得对目标 AWS 账户的完全管理访问权限。
星尘安全
2024/10/28
1720
AWS CDK 漏洞使黑客能够接管 AWS 账户
Deploy TiDB on AWS EKS
how to deploy a TiDB cluster on AWS Elastic Kubernetes Service (EKS) ?
杨漆
2021/03/09
1.2K0
Deploy TiDB on AWS EKS
资源 | Parris:机器学习算法自动化训练工具
选自GitHub 机器之心编译 参与:刘晓坤、路雪、蒋思源 Parris 是一个自动化训练机器学习算法的工具。如果各位读者经常需要构建并训练机器学习模型,且花费很多时间来设置运行服务器,使用远程登录服务以监控进程等。那么这个工具将对大家十分有帮助,甚至我们都不需要使用 SSH 访问服务器以完成训练。机器之心简要介绍了该工具,更详细的内容请查看该 GitHub 项目。 项目地址:https://github.com/jgreenemi/Parris 安装 我们需要一个 AWS 账户,并将 AWS 证书加载到工
机器之心
2018/05/10
3.1K0
配置 Windows 节点组
创建 cluster 时我们没有指定 --install-vpc-controllers 参数,所以我们需要首先安装 vpc controller :
云云众生s
2024/03/27
1510
K8S-Node自动扩容项目CA源码分析(上)
上一篇文章介绍了 k8s 自动扩缩容的三种方式:HPA、VPA、CA,以及各自的使用场景和架构。本文针对 CA 做源码分析。
kinnylee
2022/07/02
1.2K0
基础设施即代码的历史与未来
基础设施即代码(Infrastructure as Code)是软件开发中一个引人入胜的领域。虽然作为一门学科,它相对年轻,但在其短暂的存在期间,它已经经历了几次具有开创性意义的转变。我认为它是当今软件开发创新最热门的领域之一,许多参与者——从大型科技公司到初创企业——都在创造新的方法。如果完全实现,这些方法有可能彻底改变我们编写和部署软件的方式。
云云众生s
2024/03/27
4590
相关推荐
AWS CDK | IaC 何必只用 Yaml
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验