前言
Amazon Elastic Kubernetes Service (EKS) 是 AWS 上托管的 Kubernetes 服务。2 月 28 日已在由光环新网运营的 AWS 中国(北京)区域和由西云数据运营的 AWS(宁夏)区域上线。
Amazon EKS 在 Kubernetes 用户中收到了极大的欢迎。据第三方统计机构 nuclearsearch 的统计,全球公有云上的容器数量,有 80% 运行在 AWS 上。如果只统计 Kubernetes 的应用,那么在 AmazonEKS 上运行的应用数量更是占到了总数的 82%。
Amazon EKS 使用起来非常方便。用户可以通过 AWS Console、AWS SDK、AWS CLI、CloudFormation 等方法,调用 Amazon EKS 的 EndPoints,就可以轻松的创建自己的 Kubernetes 集群,而无需要安装、操作和维护自己的 Kubernetes 控制平面。
Amazon EKS 创建的 Kubernetes 与上游完全兼容,因此运行在标准 Kubernetes 集群上的应用程序可以轻松迁移,并且可以很方便的与 AWS 的服务集成,比如用于负载分发的 Application Load Balancer、用于基于角色的访问控制的 IAM 和用于 Pod 联网的 VPC。用户能够充分利用 AWS 平台的卓越性能、可扩展性、可靠性和可用性来构建自己的应用。
Amazon EKS 集群主要有两部分构成:由 AWS 托管的控制平面和由用户自己管理的工作节点,这里简称数据平面,如下图所示:
Amazon EKS 的控制平面由 AWS 托管,跨越多个可用区,可扩展且高度可用。其中 etcd 持久层的 Auto Scaling Group Minimum Size 是 3,跨三个可用区,能够在某个可用区不可用的情况下(虽然概率极低)保证 etcd 可读可写,无状态的 Kubernetes API Auto Scaling Group Minimum Size 是 2,跨越两个可用区, 用户可以根据 Amazon EKS 集群的压力为控制面板扩容。 Amazon EKS 会自动检测和替换运行状况不佳的主节点,以确保 Kubernetes 控制平面的高可用性。控制平面的架构如下图所示:
接下来我们看下数据平面。数据平面给了用户充足的自主权。用户可以按照需求,选择 EC2 的实例类型,选择自定义的 AMI,选择不同的计费方式,可选择使用按需实例,预留实例或者竞价实例,用户还可以按需划分自己的网段,选择是否允许可以通过 SSH 登陆等。
然而,用户在使用 Amazon EKS 来管理自己的 Kubernetes 集群的时候,还是需要自己去管理 Kubernetes 集群中的 EC2 的生命周期。需要自行去创建 EC2,注册 EC2 到 Kubernetes 的集群,用户还需要自行去维护 EC2 的 AMI,给 AMI 打各种补丁等。
这个问题有什么好的办法吗? Amazon EKS 在的 Managed Node Group 的特性很好的解决了这个问题。
Managed Node Group 概述
为了能够进一步简化用户在管理 Kubernetes 集群的工作, Amazon EKS 在 Data Plane 的管理上推出了 Managed Node Group 的服务。这使得用户可以只用一条简单的命令完成创建、更新、扩容或终止工作节点(EC2 实例)的工作。
在加入 Managed Node Group 之后,Amazon EKS 的架构如下图所示:
这里简单介绍下 Managed Node Group 的核心概念:
Amazon EKS 负责node groups的创建,负责node group中EC2实例的创建
Managed Node Group中的托管的节点被创建于Auto Scaling Group中,由Amazon EKS管理。Auto Scaling Group和EC2实例都运行在用户的账号内;
在创建Managed Node Group时,用户指定节点运行在哪些子网内;
只要有公网访问的权限,无论公有子网还是私有子网之内,都可以创建Managed Node Group ;
托管节点组中的实例使用最新版本 Amazon EKS 优化的 Amazon Linux 2 AMI ,用户可以在标准版AMI 或者GPU优化版 AMI之间按需选择。
Amazon EKS 在托管节点组上遵循 CVE 和安全补丁的责任共担模式。由于托管节点运行 Amazon EKS 优化的 AMI,因此在遇到,Amazon EKS 负责构建这些 AMI 的修补版本,用户负责将这些修补的 AMI 版本部署到托管节点组;
EKS集群内可以创建多个Managed Node Group。比如,用户可以为某些工作负载使用标准的 Amazon EKS 优化 Amazon Linux 2 AMI 创建一个节点组,为需要 GPU 支持的工作负载使用 GPU优化AMI创建另一个节点组。
如果Managed Node Group运行异常,则 Amazon EKS 返回错误消息以帮助诊断问题;
Amazon EKS 会给Managed Node Group内的节点打上前缀为eks.amazon.com的Kubernetes标签;
在Amazon EKS终止或更新节点之前,会调用Kubernetes 的API来驱逐节点(drain node),保持整个集群的高可用;
使用 Amazon EKS Managed Node Group没有额外的费用,用户只需为预配置的 EC2 等资源付费
接下来给大家演示如何通过控制面板和 AWS CLI 管理 Managed Node Group。
在开始之前,需要先创建一个 Kubernetes 的集群。在 Amazon EKS 中,创建集群,有诸多办法,比如通过控制台,AWS CLI, AWS SDK,Cloudformation 等。
这里通过 eksctl 来创建用来演示的集群:
备注:这里用的是 eksctl 的版本 0.15.0,从 0.15.0 起,加入了对中国 region 的支持, 推荐使用最新的版本。
通过 AWS 控制台来创建管理 Managed Node Group
打开 AWS 控制台,进入 EKS 服务的页面,点击左侧导航栏的 Clusters,可以看到创建好的 EKS 集群,以及集群中的 Managed Node Group , 这里的 Managed Node Group 为空。
点击 Add Node Group 按钮,进入新建 Managed Node Group 配置页面:
点击 Next, 配置 Node 的 AMI,实例类型以及磁盘的大小:
点击 Next,配置 Group 的弹性扩展参数,包括最多多少个 Node,最少多少个 Node,以及默认启动多少个 Node:
点击 Next,进入 Review 界面,在确认无误后,点击 Create 按钮,就可完成 Managed Node Group 的创建。
稍等片刻,在 Managed Node Group 创建成功后,进入到 EKS 集群的页面,可以查看到创建好的 Node Group:
可以看到,利用 Managed Node Group 的特性,在控制台上只需要简单的几步操作,就可以完成 EKS 集群的扩容。
通过 AWS CLI 来创建管理 Managed Node
除了通过控制台之外,用户也可以利用 AWS CLI 或者 AWS SDK 等方法来创建管理 Managed Node Group。
通过 AWS CLI 来创建管理 Managed Node Group 方法如下:
查看 Node Group 列表:
新建 Node Group:
查看创建好的 Node Group
Managed Node Group 版本升级
当有新版本的 Amazon EKS 优化过的 Linux AMI 可用时,在 AWS 的控制台的 Node Group 列表,用户可以看到“Update Now“的提示。用户可以按需选择将 Managed Node Group 中节点的 AMI 进行升级。
有以下两点需要注意:
只有当有新版本AMI可用时,AWS的控制台才会出现“Update Now”的提示,如果没有“Update Now”的提示,说明Node Group中所采用的AMI的版本已经为最新;
一旦升级AMI后,将不能再回滚到以前的版本;
更新节点的 AMI,会导致节点重启。Amazon EKS 在重启节点之前,会调用 Kubernetes 的 API 来驱逐节点(drain node)。如果驱逐节点(drain node)的时间在 15 分钟内不能完成,那么如果用户选择的是强制更新,被更新的节点会被强制终止,如果用户选择的是非强制更新,则会停止更新,向用户显示更新失败。
Managed Node Group 健康检测
Amazon EKS 会自动监控 Managed Node Group 的健康状况。用户可以通过 AWS 控制台或者 API 来查询 Managed Node Group 的健康状况。
健康检测的内容主要包含如下几个方面:
集群运行必需的资源被删除或者不可用,比如:“Ec2LaunchTemplateNotFound” 或 “InsufficientFreeAddresses” ;
更新过程中遇到的错误,比如:“PodEvictionFailure” 、 “PodDeletionFailure” 或者“InstanceLimitExceeded”;
节点创建或者删除时的错误,比如:“NodeCreationFailure”;
总结
AWS 始终坚持以客户为中心,致力于为客户提供云上最好的 Kubernetes 管理平台。当 Amazon EKS 刚刚发布的时候,AWS 提供了托管的控制平面,后又在数据平面加入了 Managed Node Groups 的功能,这大大简化了用户在 AWS 上创建、管理一个生产级别的高可用的 Kubernetes 集群的工作。接下来 AWS 将继续提供更多的功能,进一步提升客户创建、管理、使用 Kubernetes 集群的体验。
Amazon EKS 的 roadmap 可参看。
参考:
https://nucleusresearch.com/research/single/guidebook-containers-and-kubernetes-on-aws/
https://amazonaws-china.com/cn/blogs/containers/eks-managed-node-groups/
https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html
作者介绍:韩医徽,AWS 解决方案架构师,负责 AWS 合作伙伴生态系统的云计算方案架构咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。
本文转载自 AWS 技术博客。
评论