【问题标题】:Restart pod depend on health check重启 pod 依赖于健康检查
【发布时间】:2022-01-18 22:55:22
【问题描述】:

我正在使用 Azure Kubernetes 服务,我发现有时我无法对 SQL Server 进行健康检查,然后我的 API 正在响应代码 400 的任何请求。

在这种情况下,简单的 pod 重启通常会有所帮助;我认为在这种情况下,liveness / readyness 探针可以解决这个问题,但事实并非如此。

如果再次发生这种情况,我可以如何自动重启 Pod?

【问题讨论】:

  • 可能取决于您用于活性探测的端点是什么。 healthz 端点也返回 400?
  • @JacopoBernasconi 我使用这个 pod 作为 api 从外部端点收集数据,然后将其推送到数据库,从数据库返回状态不健康的健康检查和我收集的数据不在那里(很明显由于数据库不健康),在这种情况下有助于重新启动我的 pod,但我想自动启动它。我想知道当来自数据库的健康检查处于不健康状态时是否有可能重新启动这个 pod
  • 我明白了,我的问题是,当您的数据库连接丢失时,您的 healthz 端点(状态)会返回“错误”代码吗?像500?因为活性检查不检查 HTML,只检查 HTTP 代码。

标签: sql azure azure-aks


【解决方案1】:

监控并重新启动不健康的 docker 容器。建议将此功能包含在添加的 HEALTHCHECK 中,但没有成功。在原生支持 --exit-on-unhealthy https://github.com/docker/docker/pull/22719

之前,此容器是一个替代容器

示例撰写文件是:

docker run -d \
    --name autoheal \
    --restart=always \
    -e AUTOHEAL_CONTAINER_LABEL=all \
    -v /var/run/docker.sock:/var/run/docker.sock \
    willfarrell/autoheal

只需在此执行docker-compose up -d

a) 将标签 autoheal=true 应用于您的容器以对其进行监视。

b) 设置 ENV AUTOHEAL_CONTAINER_LABEL=all 以监视所有正在运行的容器。

c) 将 ENV AUTOHEAL_CONTAINER_LABEL 设置为值为 true 的现有标签名称。

更多详情请参考官方文档https://hub.docker.com/r/willfarrell/autoheal/

【讨论】:

  • OP 询问 Kubernetes,而不是纯粹的 docker。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2014-10-02
  • 2021-09-13
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多