序
容器技能和PaaS(Platform-as-a-Service) 是运维无法绕开的话题。
假如你的项目现在正在运用AWS,那么这篇文章,或许会对你的云基础设施改造有所帮助。假如你的项目在运用其他云服务,那也不要紧,快来了解了解,或许下个项目就能用上呢。
Elastic Beanstalk
Beanstalk 是一项 PaaS 服务,用于布置 Web 运用。如官方介绍的那样,咱们只需求上传代码,它就能主动帮咱们把 EC2、RDS 数据库、主动扩容、负载均衡等资源创立出来。但需求留意,VPC 仍是得咱们自己创立。
现在支撑的语言和环境仍是较为丰富的,常用的 Java、Node.js、Go、Python、Ruby、PHP、.NET 均是支撑的,对了,Docker 也是支撑的。
假如需求执行一些同步数据,需求较长时间运转的代码,Beanstalk 供给 Worker 环境,能够结合 SQS 消息队列,对数据异步地接收处理。
Beanstalk 支撑版别控制,版别指向 S3 中的对应的代码。
关于布置策略,支撑“一次性布置”、“翻滚布置”、“额定批量翻滚”、“不可变布置”、“流量拆分”(灰度发布)、“蓝/绿布置”等。一起,Beanstalk 是支撑 AWS CodePipeline 的。
关于 Web 单体运用,Beanstalk 能够做到快速测验、布置、上线、扩容,大大下降运维复杂度。关于轻量的 Web 运用,Beanstalk 也是不错的挑选。
App Runner
另一个纯粹面向容器的 PaaS 服务就是 App Runner 了。它支撑主动扩容、负载均衡等常用功能。
App Runner 支撑两种布置方式:手动布置和主动布置。手动布置包含 UI、CLI 和 API 方式。主动布置即 CI/CD,当代码或许容器镜像更新后,主动触发布置流程。
App Runner 对那些不了解运维技能的开发人员友好,通过简略的装备就能够快速发动一个容器化 Web 运用,具有高可用,主动扩容(包含横向和纵向)等特性。当咱们只需求运转一个小规模项目,并不需求强壮的基础设施装备时,App Runner 会是最佳挑选。
ECS
ECS(Elastic Container Service) 是由 AWS 供给的容器编列服务,能够灵活地办理容器集群,装备主动扩容、负载均衡等服务。
相较于前两者,ECS 更为灵活,但更为复杂。它供给 3 中运转容器的方式:
- Fargate;
- EC2 实例;
- 外部数据中心实例。
Fargate 是 AWS 供给的容器 Serverless 渠道,相较于 EC2 实例,Fargate 能够让运维人员不用去关心底层操作系统,提高工作效率。
ECS 集群有三个概念:
- ECS 集群;
- ECS 服务;
- ECS 使命。
其中,ECS 集群是办理 ECS 服务、ECS 使命的逻辑分组。ECS 服务用于保护一系列 ECS 使命。一个 ECS 使命会基于 ECS 的使命界说,运转相应的容器。一起,每个使命能够通过 IAM 人物分配不同的权限,做到权限隔离。
关于 ECS,负载均衡、主动扩容等服务需求咱们额定装备。所以相较于 Beanstalk 和 App Runner 来说,运维的复杂性增加许多,但也为咱们带来了更多的灵活性。
ECS 能够装备 CI/CD,实现微服务的测验、布置、上线等运维工作。当咱们需求发动一个微服务项目的时分,ECS 是一个不错的挑选。
EKS
EKS(Elastic Kubernetes Service) 是由 AWS 托管的 Kubernetes 服务。Kubernetes 是开源的容器编列服务,用于容器的主动布置、扩展和办理。
在 Kubenetes 中,一组运转的容器被称为 Pods。Pod 支撑纵向扩容和横向扩容。扩容支撑两种产品:
- Kubernetes Cluster Autoscaler;
- Karpenter。
关于节点,节点是运转容器的机器,有以下几个类型:
- Fargate;
- EC2:
- 托管节点组;
- 自行办理的节点。
别的,EKS Anywhere 也支撑运转在外部数据中心上的 Kubernetes 集群。
关于负载均衡,当创立 Kubenetes ingress 的时分,AWS 会预置 ALB(运用层负载均衡器)。当创立类型为 LoadBalancer 的 Kubenetes 服务时,AWS 可供给 NLB(传输层负载均衡器)。
ECS 是 AWS 专有的容器编列计划,假如项目只用到 AWS,那它是不错的挑选。而当咱们要跨多个云环境运用相同的容器编列计划时,EKS 将会是更好的挑选。
总结
咱们往往会依据项目的实际情况,挑选适宜的服务。
假如是需求运转一个轻量、简略的运用,并且需求快速布置上线,那 Beanstalks 和 App Runner 是不错的挑选,前者能够直接布置代码,而后者则针对容器化运用。
假如想要在 AWS 上布置容器化微服务,则能够挑选 ECS。
而当咱们想要跨环境,运用统一的容器化编列计划的时分,EKS 则是更好的挑选。