配置就绪情况探测
对于为流量提供服务的容器化应用程序,你可能想要验证容器是否已准备好处理传入的请求。 Azure 容器实例支持采用就绪情况探测来包括各种配置,使容器在某些情况下无法访问。 就绪情况探测的行为类似于 Kubernetes 就绪情况探测。 例如,容器应用程序可能需要在启动过程中加载大型数据集,并且你不希望在这段时间内接收请求。
本文介绍了如何部署包含就绪情况探测的容器组,使容器仅在探测成功时才接收流量。
Azure 容器实例还支持运行情况探测,你可以配置该探测来使不正常的容器自动重启。
YAML 配置
例如,使用以下代码片段创建包含就绪情况探测的 readiness-probe.yaml
文件。 此文件定义一个容器组,其中包含运行小型 Web 应用的容器。 此应用是通过公共 mcr.microsoft.com/azuredocs/aci-helloworld
映像部署的。 此容器化应用还在使用 Azure CLI 在 Azure 中部署容器实例和其他快速入门中进行了演示。
apiVersion: 2019-12-01
location: chinaeast2
name: readinesstest
properties:
containers:
- name: mycontainer
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
command:
- "/bin/sh"
- "-c"
- "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
readinessProbe:
exec:
command:
- "cat"
- "/tmp/ready"
periodSeconds: 5
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- protocol: tcp
port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups
“启动”命令
部署包含了 command
属性,该属性定义在容器首次开始运行时运行的启动命令。 该属性接受字符串数组。 此命令模拟当 Web 应用运行但容器未准备就绪时的时间。
首先,它启动一个 shell 会话并运行 node
命令来启动 Web 应用。 它还启动一个命令来休眠 240 秒,经过此时间后,它将在 /tmp
目录中创建一个名为 ready
的文件:
node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait
就绪情况命令
此 YAML 文件定义了一个 readinessProbe
,它支持执行就绪情况检查的 exec
就绪情况命令。 此示例就绪情况命令测试 /tmp
目录中是否存在 ready
文件。
如果 ready
文件不存在,则就绪情况命令将以非零值退出;容器将继续运行,但无法访问。 当命令成功退出且退出代码为 0 时,容器就绪可供访问。
periodSeconds
属性指定就绪情况命令应当每 5 秒执行一次。 就绪情况探测在容器组的生存期内运行。
示例部署
运行以下命令来使用前面的 YAML 配置部署一个容器组:
az container create --resource-group myResourceGroup --file readiness-probe.yaml
查看就绪情况检查
在此示例中,在第一个 240 秒内,就绪情况命令在检查 ready
文件是否存在时失败。 状态代码返回了表明容器未就绪的信号。
可以通过 Azure 门户或 Azure CLI 查看这些事件。 例如,门户显示当就绪情况命令失败时触发了 Unhealthy
类型的事件。
验证容器就绪情况
启动容器后,可以验证它最初是否无法访问。 预配后,获取容器组的 IP 地址:
az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv
在就绪情况探测失败时尝试访问该站点:
wget <ipAddress>
输出表明该站点最初无法访问:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...
240 秒后,就绪情况命令成功,表明容器已准备就绪。 现在,运行 wget
命令时,该命令将成功:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: 'index.html.1'
index.html.1 100%[===============================================================>] 1.62K --.-KB/s in 0s
2019-10-15 16:49:38 (113 MB/s) - 'index.html.1' saved [1663/1663]
在容器准备就绪后,还可以通过使用 Web 浏览器浏览到 IP 地址来访问 Web 应用。
注意
就绪情况探测在容器组的生存期内会继续运行。 如果就绪情况命令稍后失败,则容器将再次变得无法访问。
后续步骤
当涉及包含依赖容器的多容器组时,就绪情况探测可能很有用。 有关多容器方案的详细信息,请参阅 Azure 容器实例中的容器组。