【问题标题】:Which GCP service to choose for hosting Docker image stored at Container Registry?选择哪个 GCP 服务来托管存储在 Container Registry 中的 Docker 映像?
【发布时间】:2021-07-21 10:58:18
【问题描述】:

我有一个使用单个 Dockerfile dockerized 的 SPA 应用程序(服务器端是由带有 Spring boot 的 Kotlin 提供的,前端是由带有 React 的 typescript 提供的),并且我正在尝试将 GCP 上的 docker 映像作为 Web 应用程序托管。

起初我认为 Cloud Run 云是合适的,但似乎 Cloud Run 是无服务器服务,而不是用于托管 Web 应用程序。我知道有几种选择; App Engine(灵活环境)、Compute Engine 和 Kubernetes Engine。

考虑到上面的故事,我可以请 GCP 社区支持来决定选择哪一个来达到目的吗?

  • 托管存储在 Cloud Registry 中的 Docker 映像
  • 该应用程序应公开部署; 。IE。每个人都可以像其他网站一样通过浏览器访问该应用
  • 部署的 Docker Image 需要连接 Cloud SQL 来持久化其数据
  • 计划使用 Cloud Build for CI/CD 环境

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: docker google-app-engine google-cloud-platform google-compute-engine google-kubernetes-engine


    【解决方案1】:

    IMO,您需要避免提出建议(Kubernetes、Compute Engine 和 App Engine Flex)并(重新)考虑 Cloud Run 和 App Engine 标准。

    如果您有容器,则 App Engine Standard 不符合要求,但您可以简单地部署您的代码,让 App Engine 标准构建和部署自己的容器(其中包含您的代码)。

    我的偏好是 Cloud Run,它是为 webapp 完美设计的,只要:

    • 您只执行请求处理(没有后台进程,没有长时间运行的操作(超过 60 分钟))
    • 您不需要将数据存储在本地(而是将数据存储在外部服务、数据库或存储中)

    我还建议您将前端和后端分开。

    • 在 App Engine 标准或云存储上部署您的前端
    • 在 Cloud Run 中部署您的后端(因此在容器中)
    • 在两者前面放置一个 HTTPS 负载平衡器,以消除 CORS 问题并只公开 1 个 URL(在您自己的域名后面)

    主要优点是:

    • 如果您从 Cloud Storage 提供文件,则可以利用缓存,从而降低成本和延迟。如果您在负载均衡器中使用 CDN 容量,情况也是如此。如果您将前端托管在 Cloud Run 或任何其他计算系统中,您将使用 CPU 仅提供静态文件,并且您将为此 CPU/内存付费 -> 无用
    • 分离的前端和后端让您能够独立发展这两个部分,而无需重新部署整个应用程序,只需要更改的部分。
    • 建议的模式是企业级模式。每月 16 美元起,您可以在全球范围内进行大规模扩展。您还可以在负载均衡器上激活 WAF 以提高安全性和攻击防护。

    那么现在,如果您同意这一点,您的下一个问题是什么?

    【讨论】:

    • 非常感谢您的专业知识!我基本上同意你的意见,但仍然需要考虑一件事。当我分别拆分后端和前端时,是否可以构建 CD 环境(尽管我知道您在回答中提到了此重新部署)?现在我需要做的只是在 GitHub 上构建由合并操作触发的 CD 环境。所以我假设我只需要构建两个 CD 环境;一个用于后端的 Cloud Run,另一个用于前端的 Cloud Storage?
    • 如果您的正面和背面都有一个单一的存储库,您可以选择:1 个构建,正面和背面的所有步骤,并且您只运行您想要的一面文件更改。或构建 2 个管道,在同一事件上触发。如果更改的是后端文件,则管道继续,前端管道正常停止(无事可做),反之亦然。第二种解决方案更易于维护,尤其是当您的组织中有团队前端和团队后端时的管道定义。但这仍然是见仁见智的问题!
    • 对不起,我缺乏知识,但我可以确认第一部分所描述的内容吗?你写了“1 build with all step for front and back,根据文件变化只运行你想要的那一面”。那么这是否意味着“任何对 mono repo 的推送都会触发 CI/CD 流程,并且 Cloud Build 将选择哪个服务(Cloud Run 用于后端或 Cloud Storage 用于前端)将构建的内容部署为 CD 流程”?
    • 是的,根据更新的目录(例如,前目录或后目录)过程会有所不同。如果事实上您无法在 Cloud Build 上运行条件步骤,则运行所有步骤。因此,您需要在每个步骤的开头添加一个条件并说“如果是后面,则继续,否则优雅地退出该步骤并转到下一个)
    • 非常感谢您的帮助!我会按照您介绍的方式尝试。
    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2021-05-31
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多