【问题标题】:AWS K8S web application architecture choiceAWS K8S Web 应用程序架构选择
【发布时间】:2021-07-11 05:00:32
【问题描述】:

我正在尝试使用 Kubernetes 和 Amazon Web Service 构建一个 Web 应用程序。 我相信有很多不同的方法,但我想征求您的意见!

为简单起见,该应用程序将是一个显示信息的简单网页。用户登录后,根据过滤器获取特定信息。

我对 k8s 内部架构的反思:

  1. 我可以将我的整个应用程序作为 Pod 吗?这样,集群和节点的可扩展性将通过为每个用户分配 1 个 pod 使应用程序可供每个用户使用。这是好的做法吗?
  2. 按照这个逻辑,我的应用程序的每个不同元素都将成为一个容器。例如,以简单的方式,1 个包含应用程序前端的容器,1 个具有数据访问/管理的容器,1 个用于后端/身份验证的容器等

因此,1 个用户将“消费”1 个容器,这些容器正在一起讨论以从用户那里提供所需的数据。 k8s 将为每个用户创建一个 pod,扩大/缩小节点数量等...... 但是,除了数据本身,一切都将被 docker 化并存储在 ECR(弹性容器注册表)上,对吗?所以我认为不需要任何 S3/EBS/EFS。

我是 AWS 和 k8s 的新手,所以请随时提供诚实的意见 :) 反馈,无论好坏,总是值得接受的。

提前致谢!

【问题讨论】:

  • 您描述的架构更类似于 AWS lambda 或 kubeless (kubeless.io),而不是标准的 k8s 部署。
  • 我正在探索 ^^' 谢谢你的信息,我会去看看!

标签: amazon-web-services kubernetes architecture


【解决方案1】:

我会推荐一个布局:

  • 任何容器都可以为任何用户执行其工作单元
  • 每个 pod 一个容器
  • 应用程序的每个组件都有自己的(无状态)部署

尝试将整个应用程序放入单个多容器 pod 可能效果不佳。这意味着整个应用程序需要适合单个节点;一些应用程序比这更大,即使它适合,也可能导致调度问题。这也意味着,如果您更新任何单个容器的映像,则需要删除并重新创建所有容器,这可能比您想要的更具破坏性。

尝试为每个用户创建一个 pod 也会带来一些实际问题。您需要弄清楚如何将入站请求路由到特定用户的 pod,并将请求保存在该用户的容器集中; Kubernetes 对此没有任何原生支持。每个用户的 pod 也将继续使用资源,即使对于该用户来说是通宵或周末并且他们没有使用该应用程序。当新用户加入您的平台时,您还需要能够访问 Kubernetes API 的东西来创建和销毁资源。

在特定于 AWS 的环境中,您可能会考虑使用 RDS(托管 PostgreSQL/MySQL)或 S3(对象存储)进行数据存储(同样一个数据库或 S3 存储桶在所有客户之间共享)。 ECR 很有用,但可以作为存储 Docker 镜像的地方;也就是说,您构建的代码,但不是任何持久化数据或正在运行的容器。

【讨论】:

  • 好的,非常感谢!因此,将应用程序设置在 pod 级别并不是一个好主意,因为在 K8s 中路由 pod 并不是那么容易。但是,对于第 2 点中描述的每个“目的”,使用 oneToMany pod 是否有意义?是的,用于 img 存储的 ECR 和用于其余数据的 S3 可能。非常感谢您提供的详细信息,我会根据这些调整我的想法!
  • 将应用程序拆分为多个组件可能是有意义的;但可能这些组件中的每一个都应该是它自己的部署,启动单容器 Pod。
  • 绝对。没有词汇,但这就是我的意思。感谢您的澄清!现在我定义了一个适当的架构,我将能够更好地工作。惊人的!你摇滚!周末愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多