为什么我的第一次部署工作但所有后续部署都无法获得实例?

时间:2018-03-09 09:51:28

标签: google-app-engine google-cloud-platform

我有一个包含多项服务的应用 - 这种情况适用于所有服务但下面是 data-dev 服务的数据:

如果我将任何服务部署到空白项目 - 即没有具有该名称的服务的项目,则使用此命令可以正常部署:

gcloud -q app deploy app.yaml --promote

如果我然后对应用程序进行了更改,并再次运行相同的命令 - 控制台在Updating service [data-dev] (this may take several minutes)上挂起超过两个小时 - 从不崩溃 - 没有错误。

如果我进入该服务并查看版本,则有新的'版本,但他们似乎永远不会给一个实例运行 - 这里有一些我使用以下命令部署,以便在日志等中更容易找到它们:

versions

gcloud -q app deploy app.yaml --promote --version=devX

如果我查看任何这些版本的日志 - 我将以下内容作为唯一条目:

picture of logs

让这更令人烦恼的是 - 当我拥有所有这些东西时,我无法删除该服务'等等。因为:

error when trying to delete services

我必须完全进入整个应用程序的设置,禁用它,等待所有服务关闭15分钟,然后重新启用它以删除单个服务 - 一旦我删除服务我我再次能够毫无问题地部署事物(一次) - 所有后续部署都失败了。

任何人都有任何想法可能会发生这种情况,或者如何调试?

以下是 app.yaml

runtime: nodejs
env: flex
service: data-dev
manual_scaling:
  instances: 1

2 个答案:

答案 0 :(得分:4)

你没有让它工作的原因是因为没有可用的实例 - 你为服务指定1,所以当你尝试部署另一个时,没有更多的实例要部署到 - 你可以实现你的行为想要(即1个实例)使用以下app.yaml:

runtime: nodejs
env: flex
service: data-prod
automatic_scaling:
  min_num_instances: 1
  max_num_instances: 20
  cpu_utilization:
    target_utilization: 0.7

你可以根据需要调整max_num_instances,但要确保你有足够的部署!

答案 1 :(得分:1)

您可以通过转到日志并使用resource.type="gce_instance" AND "aef-"设置高级过滤器( a pp 来查看运行GAE flex应用的实例正在进行的操作e ngine f lex实例标有aef-<service_id>-<version_id>-<random_digits>)。

在那里,您将看到有关您的实例正在做什么的更多详细信息,并且您将能够更好地调试正在进行的操作。

通常,如果部署不成功(但允许部署)是因为未正确响应健康检查而认为实例不健康,但您应该检查日志以了解更多详细信息。