将EC2手工加入EKS集群成为托管节点

EKS动手实验合集请参考这里

一、背景

1、EKS服务使用EC2的两种模式

EKS服务使用EC2的两种模式

  • 使用EKS自动生成的托管节点组:在EKS服务控制台或者通过eksctl命令完成,EKS会自动使用最新镜像,全自动创建,并使用Autoscaling缩放;如果是通过eksctl脚本,还会自动创建合适的IAM角色;这时候EC2会在托管节点组内。
  • 使用EKS提供的AMI以托管节点方式自行加入集群:使用EKS官方提供的基础镜像,手工创建一个EC2,并手工配置IAM角色,然后使用bootstrap.sh脚本,将本EC2加入EKS集群;这时候EC2会成为托管节点,但不会进入上一步的托管节点组。

以上两种方式,都是EKS托管节点,意味着EKS可有效进行版本升级等管理。不过不在节点组中的EC2不能参与缩放,当节点不够用时候,需要手工拉起新的节点。

本文介绍第二种方式的使用。

Continue reading “将EC2手工加入EKS集群成为托管节点”

复制ECR上的镜像并指定新的Tag标签

一、背景

ECR上的镜像仓库有个选项叫做Tag immutability,可以要求指定唯一的标签,以避免版本冲突。有时候需要对当前镜像新生成一个新的标签做测试,且生成新的标签的过程不希望下载、构建、打包、上传等过程,只是希望复制一份,重新生成一个标签。此时可以用本文的方法操作。

Continue reading “复制ECR上的镜像并指定新的Tag标签”

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

EKS 1.27版本 & Karpenter 0.29版本 @2023-07 AWS Global区域测试通过

EKS动手实验合集请参考这里

注:本实验操作难度稍高,需要时间约2小时,请事先完成之前的所有基础实验,包括集群创建、管理、容器构建、NLB等主题后,再开始本实验。

一、背景

EKS的扩容有两种方式:

  • 1、单个应用的Deployment的replica扩容,Pod数量增加,Node不变
  • 2、Node节点的扩容,Node增加,Pod不变
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服务相关汇总

注:本文这套操作文档是按照2022年的AWS ESC容器服务的Console体验编写,2023年新的ECS Console已经推出。截图和文字有待更新。

容器基础1:构建Apache+PHP镜像DockerFile (更新了Amazon Linux 2023模版)

容器基础2:构建容器镜像并上传到ECR (更新了AWSCLI的ECR认证)

容器基础3:复制ECR上的镜像并指定新的Tag标签

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

ECS 201 Workshop(二)发布ECS服务

ECS 201 Workshop(三)弹性扩展

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

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

(六)使用为ECS Fargate使用Spot实例

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

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

构建基于 Amazon Linux 2/2023系统的Apache2+PHP 7.4/8 环境的容器Dockerfile文件

2023-08更新了Amazon Linux 2023操作系统Apache+PHP8.1的模版

一、背景

1、启动脚本问题

构建容器用于AWS ECS服务和AWS EKS服务的时候,由于容器服务的启动endpoint只能是唯一的启动进程,而且必须处于前台,因此会面临无法同时启动php-fpm和httpd的问题。为了解决这个问题,可增加一个启动服务脚本,然后让容器调用这个单一脚本。

Continue reading “构建基于 Amazon Linux 2/2023系统的Apache2+PHP 7.4/8 环境的容器Dockerfile文件”

在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进程”

实验九、为私有NLB使用指定的、固定的内网IP地址

EKS动手实验合集请参考这里

EKS 1.27版本 @2023-06 AWS Global区域测试通过

一、背景

在一些情况下,EKS部署的服务需要使用私有的NLB即 Internal NLB + Node Port 方式对VPC内的其他应用暴露服务,但是又不需要暴露在互联网上。

Continue reading “实验九、为私有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地址”