谷歌云运行的准备情况检查 - 如何?

问题描述 投票:0回答:4

我在 https://cloud.google.com/run/docs/how-to 的文档中进行了相当广泛的搜索。我还在 console.cloud.google.com 中找到了 YAML,但无法编辑它。有没有办法使用我可能错过的命令来设置它?

编辑: 我在 https://cloud.google.com/sdk/gcloud/reference/beta/container/clusters/create 中也找不到任何有关它的内容。

编辑2:

我正在寻找一种方法,让 Google 云运行对容器中的应用程序进行就绪检查。与 kubernetes 的做法相同 - 示例如下:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/。问题是,当容器中的应用程序仍在运行时,我不想让我的服务停机 30-60 秒。当我推送新版本时,Google 会立即重定向流量,导致用户等待很长时间。

编辑3: 这是我部署新版本后发出第一个初始请求所需的时间。 Postman request

编辑4: 我尝试启动的应用程序是用 Python 编写的。这是一个提供张量流模型的 Flask 应用程序。我需要将几个文件加载到内存中。这在我的计算机上只需要 5-10 秒,但在云运行上需要更长的时间。

google-cloud-run
4个回答
8
投票

Cloud Run 除了确认您的服务正在侦听指定端口外,没有其他准备情况检查。完成此操作后,流量开始路由到新版本,并且之前的服务版本在处理正在进行的请求时会按比例缩小。

如果您的目标是确保服务在部署后尽快准备就绪,您可能会创建一个较重的入口点来处理更多的设置任务。

像这样的“较重”入口点将有助于提高部署后响应能力,但代价是冷启动速度较慢。

您可以在入口点中预先加载的内容示例(无论是在 BASH 脚本中还是在打开 HTTP 服务器之前在您的服务中):

  • 执行所有必要的设置任务,例如将文件加载到内存中。
  • 在全局状态中建立并保存任何客户端或与支持服务的连接。
  • 通过您的服务代码执行支持服务和资源可用的任何运行状况检查。
  • 预热容器内缓存以最大程度地减少首次响应。

这再次通过惩罚所有冷启动来优化部署后响应。

https://cloud.google.com/run/docs/tips#optimizing_performance


6
投票

注意:最近进行了更新,情况有所改善。

https://cloud.google.com/run/docs/configuring/healthchecks
“您可以为新的和现有的 Cloud Run 服务配置 HTTP 和 TCP 启动运行状况检查探针以及 HTTP 活动探针。”

奇怪的是,Cloud Run 仍然不允许进行就绪性探测。
但启动和活跃度探测是允许的。

启动探测器充当初始启动的就绪探测器与持续就绪探测器。话虽如此,在大多数情况下,启动+活性探测可能就足够了,如果它的活性探测失败,它仍然会从负载平衡中删除。启动探针为替换设备提供了足够的时间在接收流量之前完成启动。


注意,我喜欢验证事物,CloudRun 使验证启动探针的initialDelaySeconds 是否按预期工作变得困难且不直观,而且它们的 API 在自动化友好方面受到令人烦恼的限制。

话虽这么说,这会让您了解它是如何工作的:

# Edit Vars
export CR_SERVICE_NAME=startup-probe-test
export PROJECT=chrism-playground
export REGION=us-central1

# Set defaults
gcloud config set project $PROJECT
gcloud config set run/region $REGION

# Deploy a Hello World App for testing purposes
gcloud run deploy $CR_SERVICE_NAME \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--allow-unauthenticated \
--max-instances=1

# Hacky Automation to workaround CloudRun's lack of good automation
gcloud run services describe $CR_SERVICE_NAME --format export > example.yaml
export TOP=$(cat example.yaml | grep "        ports:" -B 1000 | grep -v "        ports:")
export BOTTOM=$(cat example.yaml | grep "        ports:" -A 1000)
export MIDDLE=$(echo """
        startupProbe:
          initialDelaySeconds: 60
          timeoutSeconds: 2
          periodSeconds: 10
          failureThreshold: 3
          httpGet:
            path: /healthy
""" | sed '1d')
export REPLACE_NAME=$(echo "$TOP" | grep       "name: $CR_SERVICE_NAME-")
export NEW_TOP=$(echo $TOP | sed s/$REPLACE_NAME/"      name: $CR_SERVICE_NAME-new"/)
echo "$NEW_TOP\n$MIDDLE\n$BOTTOM" | tee updated-example1.yaml

export NEW_TOP=$(echo $TOP | sed s/$REPLACE_NAME/"      name: $CR_SERVICE_NAME-newest"/)
echo "$NEW_TOP\n$MIDDLE\n$BOTTOM" | tee updated-example2.yaml

# Run these (should take about 3 mins for both to finish)
gcloud beta run services replace updated-example1.yaml
gcloud beta run services replace updated-example2.yaml

复制粘贴该 bash 后,您应该看到如下内容:
Screen Snip of GUI

单击图像中 1 附近的符号,然后选中复选框以查看修订 URL 和操作,然后按确定。

创建修订版 URL 原始 URL 和启动探针,如图所示,然后单击每个 URL 进行测试。

what test looks like

当我点击原始标记链接时,网站立即加载
https://原文---startup-probe-test-pxehf3xjcq-uc.a.run.app/

当我点击启动探针标记的链接时,该网站有一个加载循环 60 秒,然后它按预期工作,这证明启动探针按预期工作
https://startup-probe---startup-probe-test-pxehf3xjcq-uc.a.run.app/


0
投票

他们最近还使用 beta 提供程序在 terraform 中添加了对活性和就绪探针的支持。

参见 https://cloud.google.com/run/docs/configuring/healthchecks#terraform_3


0
投票

就像 @neoakris 所写的那样,您可以通过定义云运行启动探针来实现您的目标。 从 gcloud cli 版本 501.0.0 开始,您现在可以(目前仅在测试版轨道上)定义启动探针,而无需直接使用

gcloud beta run deploy
命令操作 service.yml,例如:

gcloud beta run deploy my-service --startup-probe=httpGet.port=8080,httpGet.path=/ready,initialDelaySeconds=10,periodSeconds=20,timeoutSeconds=20

请参阅 https://cloud.google.com/sdk/gcloud/reference/beta/run/deploy?hl=en#--startup-probe

© www.soinside.com 2019 - 2024. All rights reserved.