如何利用 Managed Node Group 高效管理 Amazon EKS 集群

2020 年 3 月 19 日

如何利用 Managed Node Group 高效管理 Amazon EKS 集群

前言


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 create cluster --name=eksngdemo --region=cn-north-1
复制代码


备注:这里用的是 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 列表:


aws eks list-nodegroups --cluster-name=eksngdemo{ "nodegroups": [     "ng1-by-console" ]}
复制代码


  • 新建 Node Group:


aws eks create-nodegroup \>        --cluster-name "eksngdemo" \>        --nodegroup-name "ng2-by-cli" \>        --subnets "subnet-048e5fe91337a699c" "subnet-0237837c3956660b0" "subnet-0a6aca88ae3d42344" "subnet-05704b2e5bea4cc19" \>        --node-role "arn:aws-cn:iam::464600099053:role/eksctl-eksngdemo-nodegroup-ng-34d-NodeInstanceRole-172ZU91D5PDDP"
{ "nodegroup": { "status": "CREATING", "scalingConfig": { "minSize": 1, "maxSize": 2, "desiredSize": 2 }, "diskSize": 20, "subnets": [ "subnet-048e5fe91337a699c", "subnet-0237837c3956660b0", "subnet-0a6aca88ae3d42344", "subnet-05704b2e5bea4cc19" ], "clusterName": "eksngdemo", "releaseVersion": "1.14.9-20200122", "amiType": "AL2_x86_64", "instanceTypes": [ "t3.medium" ], "tags": {}, "version": "1.14", "modifiedAt": 1583641877.485, "nodeRole": "arn:aws-cn:iam::464600099053:role/eksctl-eksngdemo-nodegroup-ng-34d-NodeInstanceRole-172ZU91D5PDDP", "nodegroupName": "ng2-by-cli", "nodegroupArn": "arn:aws-cn:eks:cn-north-1:464600099053:nodegroup/eksngdemo/ng2-by-cli/6ab85c34-ac53-4cde-1061-5ec4e5dc5e4f", "health": { "issues": [] }, "createdAt": 1583641877.485 }}
复制代码


  • 查看创建好的 Node Group


aws eks list-nodegroups --cluster-name=eksngdemo  {      "nodegroups": [          "ng1-by-console",          "ng2-by-cli"      ]  }
复制代码


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 可参看。


参考:



作者介绍:韩医徽,AWS 解决方案架构师,负责 AWS 合作伙伴生态系统的云计算方案架构咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/how-to-manage-amazon-eks-clusters-with-managed-node-group-preface/


2020 年 3 月 19 日 21:41152

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

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

案例解析丨金蝶K/3 Wise接入华为云RDS数据库SQL Server

华为云开发者社区

MySQL 数据库 Serverless 数据 华为云

静态代码检查完成代码分析和SonarQuber的初探

陈磊@Criss

SaaS是「包治百病」的良药吗?

ToB行业头条

计算机网络基础(二)---网络层-IP协议详解

书旅

php laravel 计算机网络 网络协议

从需求到交付——论敏捷过程中的需求管理

华为云开发者社区

敏捷开发 团队协作 需求管理 故事 持续交付

面试官:如何决定使用 HashMap 还是 TreeMap?

爱嘤嘤嘤斯坦

Java 算法 hashmap

API接口设计最佳实践

Man

Java 安全开发 设计实践 APi设计 接口管理

doris临时故障恢复过程时序图

刘志刚

PowerPivot服务

JackWangGeek

SharePoint

一致性协议算法

张瑞浩

啃碎并发(11):内存模型之重排序

猿灯塔

腾讯的区块链为何败给了老干妈的“萝卜章”?

ToB行业头条

从一盏路灯,看亿万级联接的智能之路

华为云开发者社区

人工智能 物联网 智能设备 华为云

海南七星彩网站源码结算功能开发

网站,小程序,APP开发定制

Excel服务

JackWangGeek

SharePoint

PerformancePoint 组件概述

JackWangGeek

SharePoint Online

MySQL 三万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

海星

Java MySQL 面试

未来的智慧城市:未来的城市生活愿景

网站,小程序,APP开发定制

再强调一遍, 我为什么不建议大家接外包干私活?

非著名程序员

程序员 外包 提升认知 程序员成长 接私活

PerformancePoint服务

JackWangGeek

SharePoint

MySQL性能优化(四):如何高效正确的使用索引

xcbeyond

MySQL 索引 MySQL性能优化

为什么我们应该使用 Flutter?

环信

flutter

MySQL性能优化(五):为什么查询速度这么慢

xcbeyond

MySQL 查询优化 MySQL性能优化

MySQL性能优化(二):选择优化的数据类型

xcbeyond

MySQL性能优化

震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下?

why技术

Java 源码 jdk 后端 bug

MySQL性能优化(六):常见优化SQL的技巧

xcbeyond

MySQL MySQL性能优化 SQL优化 优化技巧

MySQL性能优化(七):MySQL执行计划,真的很重要,来一起学习吧

xcbeyond

MySQL MySQL性能优化 执行计划

MySQL性能优化(三):深入理解索引的这点事

xcbeyond

MySQL 索引 MySQL性能优化

Spring配置类深度剖析-总结篇(手绘流程图,可白嫖)

YourBatman

spring springboot @Configuration 白嫖

MySQL性能优化(一):MySQL架构与核心问题

xcbeyond

MySQL MySQL性能优化

Visio服务

JackWangGeek

SharePoint

如何利用 Managed Node Group 高效管理 Amazon EKS 集群-InfoQ