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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用gcloud停止当前版本的应用引擎的推荐方法是什么?相关的知识,希望对你有一定的参考价值。

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

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

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

建议的方法是什么?

谢谢!

答案

一种方法是使用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 '
' ' ')

    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"sorts按创建日期和因~降序排列。

另一答案

一种方法是在使用--stop-previous-version部署时使用--promote和/或gcloud app deploy选项(如果我正确解释文档,它们应该是默认值,除非你使用--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自动定标器可能需要一段时间才能确定有多少新版本实例需要启动以处理该流量,请参阅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

您只能控制默认情况下路由到的流量的部署版本,您无法真正停止部署版本的所有流量,始终可以通过targeted routing访问。

顺便说一下,gcloud app版本[start | stop]命令仅适用于手动扩展服务:

仅当您的服务的缩放模块已设置为手动时,才可以使用它。

以上是关于使用gcloud停止当前版本的应用引擎的推荐方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

Gcloud 部署特定文件

gcloud app deploy 不会删除以前的版本

Docker CE 安装卸载及启动停止

Xcode 更新破坏了 gcloud 和 gsutil

错误:(gcloud.compute.ssh)无法获取资源:-权限不足

如何在 gcloud 中省略用户交互