EKS 101动手实验(十二)使用Karpenter+HPA实现EKS集群扩展

有关EKS系列文档和实验的汇总,请点击这里跳转

一、背景

EKS的弹性有两种方式:

  • 1、单个应用的Deployment的replica扩容
  • 2、Node节点的扩容

对于第一种扩容,常用的方式是Horizontal Pod Autoscaler (HPA),通过metrics server,监控CPU负载等指标,然后发起对deployment的replica的变化。此配置会调整Pod数量,但不会调整节点数量。

对于第二种扩容,之前常用的方式是Cluster Autoscaler (CA)对NodeGroup节点组的EC2进行扩容,但是其扩展生效速度较慢。本文使用新的Karpenter组件对Nodegroup进行扩容。Karpenter不需要创建新的NodeGroup,而是直接根据匹配情况自动选择On-demand或者Spot类型的实例。

本实验流程如下:

Continue reading “EKS 101动手实验(十二)使用Karpenter+HPA实现EKS集群扩展”

升级EKS托管节点组的AMI到最新版镜像

EKS节点EC2推荐采用Managed Node托管节点组,其使用的操作系统AMI清单参考这里:

https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/eks-linux-ami-versions.html

由于操作系统需要定期升级更新,因此对EKS节点升级可通过刷新Node Group对应的AMI来进行版本升级。

Continue reading “升级EKS托管节点组的AMI到最新版镜像”

ECS服务相关汇总

容器基础1:构建Apache+PHP镜像DockerFile

容器基础2:构建容器镜像并上传到ECR

ECS 201 Workshop(一)准备工作:配置IAM和任务定义

ECS 201 Workshop(二)发布ECS服务

ECS 201 Workshop(三)弹性扩展

ECS 201 Workshop(四)通过CodeDeploy实现蓝绿发布

ECS 201 Workshop(五)使用CLI发起CodeDeploy部署新的ECS版本

Continue reading “ECS服务相关汇总”

构建Apache2+PHP容器的例子

构建容器用于AWS ECS服务和AWS EKS服务的时候,由于容器服务的启动endpoint只能是唯一的启动进程,而且必须处于前台,因此会面临无法同时启动php-fpm和httpd的问题。此外,在构建容器中,还经常遇到体积过大,影响服务发布速度等问题。

如下配置文件可参考构建容器镜像用于AWS ECS服务和AWS EKS服务。中国区和海外区测试通过。

Continue reading “构建Apache2+PHP容器的例子”

在ECS容器服务上使用EFS文件服务提供持久化存储

一、背景

EFS文件系统可以提供可靠的、持续的文件系统给多种服务,这其中也包括ECS容器服务。在容器场景上使用EFS的主要优势是可以简化管理,借助托管服务快速部署无须复杂运维,让ECS容器镜像的构建只需要关心应用程序本身,不需要将配置文件、数据文件打包到容器中。由此可实现容器的运行时和数据的分离。ECS Fargate和Fargate Spot都支持使用EFS文件系统,其中在Fargate Spot服务上搭配EFS,更可以借助EFS的持久化,避免Spot中断时候的数据持久保存问题。

Continue reading “在ECS容器服务上使用EFS文件服务提供持久化存储”

在ECS Fargate使用Session Manager登录到容器内的SSH进程

一、背景

之前介绍过使用System Manager套件中的Session Manager免密钥登录EC2,可参考这篇文章。针对ECS容器服务,因为开发、调试和运维的需要,也希望能登录到容器内部的shell上进行操作。此场景可使用ECS服务的exec功能在容器上执行shell命令的功能。

本文档适用于ECS Fargate和ECS Fargate spot,并在中国区测试通过。

Continue reading “在ECS Fargate使用Session Manager登录到容器内的SSH进程”

为EKS使用私有NLB并指定IP地址

有关EKS系列文档和实验的汇总,请点击这里跳转

一、背景

在一些情况下,EKS部署的服务需要使用私有的NLB即 Internal NLB + Node Port 方式对VPC暴露服务,例如:

  • 某个纯内网的微服务,不需要外部互联网调用,只需要从VPC和其他内网调用
  • 结合Gateway Load Balancer部署的多VPC的网络流量扫描方案,EKS所在的VPC为纯内网
  • 其他需要固定IP地址作为入口的场景

在这些场景下创建Internal NLB即可,不需要创建Internet-facing NLB。

Continue reading “为EKS使用私有NLB并指定IP地址”

查询EKS创建的NLB所使用的IP地址

一、背景

AWS Elastic Load Balancer(简称ELB)有Application Load Balancer(简称ALB)和Network Load Balancer(简称NLB)两种。其中NLB是四层负债均衡器,常用于TCP/UDP协议的转发。又因为NLB支持使用固定的EIP或者内网IP作为流量入口,所以在特定场景下也会使用NLB转发HTTP和HTTPS流量。

NLB有两种类型,别分是Internet-facing和Internal NLB。前者用于直接对外提供互联网入口,对内连接到VPC内的内网资源;后者用于完全在VPC内的场景,其流量入口和目标组(Target Group)都是内网资源。

本文介绍如何查询NLB使用的IP地址。

Continue reading “查询EKS创建的NLB所使用的IP地址”

为VPC扩展IP地址并配置EKS Pod使用独立的IP地址段

有关EKS系列文档和实验的汇总,请点击这里跳转

一、背景

1、关于EKS的默认CNI

AWS EKS默认使用AWS VPC CNI(了解更多点这里),所有的Pod都将自动获得一个本VPC内的IP地址,从外部网络看Pod,它们的表现就如同一个普通EC2。这是AWS EKS默认的网络模式,也是强烈推荐的使用模式。

2、需要额外IP的解决方案(三选一)

某些场景下,可能当前创建VPC时候预留IP地址过少,要大规模启动容器会遇到VPC内可用IP地址不足。此时有几个办法:

Continue reading “为VPC扩展IP地址并配置EKS Pod使用独立的IP地址段”

解决AWS中国区的EKS部署Container Insight无法从海外拉取镜像的问题

有关EKS系列文档和实验的汇总,请点击这里跳转

一、背景

EKS的Container Insight的配置过程可参考官方文档。在配置过程中,分别面临github的raw文件服务器无法下载,以及Docker Hub官方的镜像仓库无法拉取的问题。

由此,可分别在中国区部署对应的资源。

Continue reading “解决AWS中国区的EKS部署Container Insight无法从海外拉取镜像的问题”

将IAM用户或角色授权为EKS集群管理员

有关EKS系列文档和实验的汇总,请点击这里跳转

使用EKS服务过程中,经常出现创建EKS集群和管理EKS集群的不是一个人。由此会导致在AWS控制台上显示EKS服务不正常,无法获取有关配置。例如出现如下错误:

通俗点说:A使用eksctl命令行工具创建了集群,B在AWS控制台上看不到,现在需要A给B授权。B可能是一个IAM User用户,也可能是一个IAM Role角色(虚拟的)。根据B是用户还是角色,后续操作二选一。

解决办法如下。

Continue reading “将IAM用户或角色授权为EKS集群管理员”

使用eksctl在现有VPC和子网中创建EKS集群

有关EKS系列文档和实验的汇总,请点击这里跳转

在EKS教程和实验手册中,使用eksctl工具创建集群,可以在几分钟内配置好一个EKS集群。但是,默认情况下,eksctl将会通过Cloudformation创建一个全新的VPC,默认使用192.168.0.0/16的子网掩码,而且Nodegroup还是位于Public Subnet。由此,并未能落在现有VPC内,也未能使用Private Subnet。因此,在这种场景下,可使用如下方法。

Continue reading “使用eksctl在现有VPC和子网中创建EKS集群”