【发布时间】:2021-07-25 04:00:08
【问题描述】:
在我第一次尝试使用云部署应用程序时...
问题: GCP(谷歌云平台)意外的实例小时使用(前端实例小时)。 高流量不是问题,但由于某种原因,创建了一堆“实例”和“版本” 通过他们的自动缩放功能。
他们建议的解决方案: 禁用自动扩展并停止为您的实例的先前部署版本提供服务。 我仍然需要运行一个版本/实例,但通过他们的控制台我仍然没有找到 它显示我运行了多少个版本/实例或在哪里停止它们 (同时验证至少 1 个实例仍在工作,以免破坏我的应用程序)
我的应用是由 Google 开发人员开发并推荐用于动态呈现 JS SPA(允许搜索引擎和爬虫查看完全呈现的 html)的简单应用。
我的实际网站以及指向 GCP 的节点应用程序
爬虫托管在其他地方(在 Godaddy 上)
两者都很好地合作。
我部署到 GCP 的应用名为 Rendertron (https://github.com/GoogleChrome/rendertron)
Google 还建议部署到 GCP (大多数文档都涵盖了这种部署形式)。 我尝试部署到我的 Godaddy 共享主机,但这并不简单 为了工作,我只是尝试创建一个 GCP 项目并尝试在那里部署。 一切都很好!
将应用部署到几乎没有流量的 GCP 后, 我预计零成本或最多不到一美元。
很遗憾,我收到了本月超过 150 美元的账单 下个月的预计大致相同。
无需额外支付 150 美元的技术支持费用,我就可以联系 GCP 计费 通过电话,他们很棒,因为他们愿意报销费用 但只有在我自己解决问题之后。
他们慷慨地向您抛出一组文档链接 (意外实例小时使用的常见原因) 但无能为力。
经过多次谷歌搜索,阅读文档, 通过pluralsight.com 支付和观看gcloud 教程, 目前了解或不了解的方向如下:
- 几乎所有文档、视频和教程都在谈论管理或关闭自动缩放 使用 Compute Engine 实例组
- 目前尚不清楚实例组不是我会陷入的另一个漏洞,即付费服务 我会被收取超出必要的费用
- 对于只希望以最低成本运行一个实例的简单应用来说,实例组似乎有点过头了
- 没有足够的文档或很难找到有关如何使用最少的资源以最低的成本运行非常小规模的应用程序的文档
- 我还没有阅读或观看任何关于如何简单地使用 config .yaml 文件(最初部署)来确保应用程序不会自动缩放以及如果我发现我似乎仍然需要删除版本或实例的任何内容已经开始了,也不清楚如何做。
- 实例和版本在谷歌控制台上不清楚有多少正在运行,我仍然没有在谷歌控制台上找到有多个实例/版本正在运行。
我可以使用指导来继续尝试调查如何解决问题。
-
我需要创建一个组实例的方向(这样我就可以 从那里管理无自动缩放)是要走的路,我应该把重点放在哪里?
-
继续学习如何在 .yaml 文件中简单地更新我的配置以创建不缩放的方向,例如将 min_instances 和 max_instances 设置为 1 以及学习如何手动停止(直接从 GCP 控制台)超过当前正在运行的 1 个实例/版本是我应该关注的地方?
-
第三种选择?
附带说明,使用 GCP 进行自动缩放似乎不是很智能。
为什么我几乎没有流量的应用会遇到创建多个实例的问题?
任何见解将不胜感激。
**** 更新 ****平台信息
我的应用已部署到 Google App Engine (GAE) (部署的代码,不是容器)
部署步骤:
git clone https://github.com/GoogleChrome/rendertron.git
cd rendertron
npm install && npm run build
gcloud app deploy app.yaml --project MY_PROJECT_ID
我只是按照上述步骤操作,我的应用程序一直在运行 太棒了,自部署以来没有碰过任何东西。
最初部署的配置 (app.yaml) 是:
(我没有对 Rendertron 存储库进行任何更改)
runtime: nodejs12
instance_class: F4_1G
automatic_scaling:
min_instances: 1
env_variables:
DISABLE_LEGACY_METADATA_SERVER_ENDPOINTS: "true"
-- 谷歌云控制台信息
在 App Engine 下 --> 版本
列出的 1 项具有以下值:
Instances: 1
Runtime: nodejs12
环境:标准
Size: 392.7 MB
Deployed: Feb 23, 2021
Config:
runtime: nodejs12
env: standard
instance_class: F4_1G
handlers:
url: .*
script: auto
env_variables:
DISABLE_LEGACY_METADATA_SERVER_ENDPOINTS: 'true'
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: automatic
min_pending_latency: automatic
max_pending_latency: automatic
min_instances: 1
network: {}
**** 解决方案 ****
我上传了一个新的 app.yaml 文件并更改了:
min_instances: 1 到 max_instances: 1
(必须使用更新的 app.yaml 重新部署整个项目)
一开始我也是为了省钱把“instance_class”从F4_1G改成了F1, 但我在我的应用程序中收到一个错误,即内存不足,我的应用程序因 500 服务器错误而崩溃。 (渲染器应用程序出现但在尝试渲染某些内容时崩溃) 我再次将其更新回 F4_1G,并且该应用似乎可以正常运行。
如果我以后流量上升时再次看到收费,我会检查 F1 到 F4_1G 之间是否有一个实例类,它可能有足够的内存让我的应用程序运行,但会累积可能的最低费用。
您可以在下面看到,当我在周五进行更改时,直到下周日,成本降至 0,但应用程序仍在正常运行:
Screenshot showing GCP billing report costs dropped after change
**** 解决方案 ****
【问题讨论】:
-
您的应用是否已部署到 Google App Engine (GAE)?如果是这样,它是标准环境还是灵活环境?您的运行时是什么?
-
您的环境听起来像是 App Engine 灵活的,或具有手动扩展的标准环境。您需要分享更多关于您的平台、部署和配置的信息。如果你部署你的代码或容器,你也可以分享一下吗?
-
我对问题进行了更新以回答您的问题。感谢您的关注:)
标签: google-cloud-platform gcloud autoscaling google-cloud-billing rendertron