我在 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 会立即重定向流量,导致用户等待很长时间。
编辑4: 我尝试启动的应用程序是用 Python 编写的。这是一个提供张量流模型的 Flask 应用程序。我需要将几个文件加载到内存中。这在我的计算机上只需要 5-10 秒,但在云运行上需要更长的时间。
Cloud Run 除了确认您的服务正在侦听指定端口外,没有其他准备情况检查。完成此操作后,流量开始路由到新版本,并且之前的服务版本在处理正在进行的请求时会按比例缩小。
如果您的目标是确保服务在部署后尽快准备就绪,您可能会创建一个较重的入口点来处理更多的设置任务。
像这样的“较重”入口点将有助于提高部署后响应能力,但代价是冷启动速度较慢。
您可以在入口点中预先加载的内容示例(无论是在 BASH 脚本中还是在打开 HTTP 服务器之前在您的服务中):
这再次通过惩罚所有冷启动来优化部署后响应。
https://cloud.google.com/run/docs/tips#optimizing_performance
注意:最近进行了更新,情况有所改善。
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
单击图像中 1 附近的符号,然后选中复选框以查看修订 URL 和操作,然后按确定。
创建修订版 URL 原始 URL 和启动探针,如图所示,然后单击每个 URL 进行测试。
当我点击原始标记链接时,网站立即加载
https://原文---startup-probe-test-pxehf3xjcq-uc.a.run.app/
当我点击启动探针标记的链接时,该网站有一个加载循环 60 秒,然后它按预期工作,这证明启动探针按预期工作
https://startup-probe---startup-probe-test-pxehf3xjcq-uc.a.run.app/
他们最近还使用 beta 提供程序在 terraform 中添加了对活性和就绪探针的支持。
参见 https://cloud.google.com/run/docs/configuring/healthchecks#terraform_3
就像 @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