使用gcloud停止当前版本的应用引擎的推荐方法是什么?

时间:2018-02-24 16:12:56

标签: google-app-engine gcloud

我想通过运行bash脚本自动启动/停止我们的应用引擎服务。

我知道运行gcloud app versions start/stop很容易,但我不想手动检查版本号。我想动态地将提供100%流量的版本传递给gcloud并告诉它停止。

另一方面,我也想告诉gcloud启动最近部署的版本。

建议的方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

一种方法是使用gcloud的键和标志:projections--format--filters。要直接从终端阅读更多信息,请使用gcloud topic,例如:

gcloud topic projections

要查看哪些字段/属性可用,请使用--format=flattened,例如:

gcloud app services list --format=flattened

为了简单起见,除了gcloud之外我将不在外面。

for SERVICE in $(gcloud app services list --format='table[no-heading](id)'); do
    echo "for service $SERVICE :"

    RECENT=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE" | tail -n1)

    echo 'y' | gcloud app versions start $RECENT

    VERSIONS=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT" | tr '\n' ' ')

    echo 'y' | gcloud app versions stop $VERSIONS
done

'table[no-heading](service)'输出一个没有标题的表,在括号中设置,以及一个带有服务ID的列,在括号中设置。

--filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT"只会显示正在投放的指定服务的版本,但RECENT指示的版本除外。

此外,如果您想使用日期进行过滤:

gcloud app versions list --format='table(id, version.servingStatus, version.createTime.date(format="%s"))' --filter="service=default" --sort-by="~version.createTime"

version.createTime.date(format="%s")function dateversion.createTime.date转换为自纪元以来的秒数。

%s来自strftime(3),并以Epoch格式返回日期,这更易于理解和比较。

--sort-by="~version.createTime"按创建日期排序,因为~按降序排序。

答案 1 :(得分:0)

一种方法是在使用gcloud app deploy进行部署时使用--stop-previous-version和/或--promote选项(如果我正确解释文档,则应该是默认选项) ,除非您使用--no-stop-previous-version和/或--no-promote):

  

--promote

     

宣传已部署的版本以接收所有流量。覆盖了   此命令的默认app/promote_by_default属性值   调用。使用--no-promote禁用。

     

--stop-previous-version

     

在部署新版本时停止以前运行的版本   接收所有流量。覆盖默认值   此命令的app/stop_previous_version属性值   调用。使用--no-stop-previous-version停用。

但是,如果您正在使用标准环境和动态扩展,您应该知道如果以前的版本处理大量流量,那么切换期间可能会出现服务质量下降/中断(GAE可能需要一段时间) autoscaler确定需要多少个新版本实例来处理该流量,请参阅Use traffic migration or splitting when switching to a new default version。您可以通过编程方式执行这些操作,请参阅不适用于不支持流量分割的Flex环境。

也可能感兴趣:GAE shutdown or restart all the active instances of a service/app

您只能控制默认情况下路由到的流量的部署版本,您无法停止到部署版本的所有流量,始终可以通过{{ 3}}

顺便说一句, gcloud应用版本[targeted routing | start] 命令仅适用于手动扩展服务:

  

只有在您的服务的缩放模块已经使用时才可以使用它   设置为手动。