kubernetes 在无发行版容器镜像中使用k8s exec liveness探针的方法有哪些?

blmhpbnm  于 5个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(66)

我们有一个运行在AKS上的后台处理pod,它不会暴露任何HTTP(或其他)端点。因此我们使用了以下exec liveness探针,它可以按照我们的需要工作:

# For the liveness probe we check if the file exists and was modified in the last minute. Original source: https://medium.com/spire-labs/utilizing-kubernetes-liveness-and-readiness-probes-to-automatically-recover-from-failure-2fe0314f2b2e
livenessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    - '[ $(find /tmp/healthy -mmin -1 | wc -l) -eq 1 ] || false'

字符串
现在我们不得不为我们的容器迁移到一个无发行版的镜像。这显然不再包含任何shell。所以我想知道是否还有任何可能的方法来使用exec liveness探针,或者这对于无发行版的容器基本上是不可能的?

nx7onnlm

nx7onnlm1#

在无发行版容器镜像中使用Kubernetes exec liveness探测器可能具有挑战性,因为无发行版镜像是最小的,并且不包含shell或标准Linux发行版中常见的许多其他工具。
你可以考虑修改你的无发行版镜像,让它包含一个最小的shell或你的liveness探针所需的特定工具。这种方法涉及到自定义无发行版镜像,这可能会稍微增加它的大小,但会给你运行shell命令的灵活性。
这正是GoogleCloudPlatform/cloud-sql-proxy必须做的,如问题119所示:PR1832添加了一个用于连接测试的端点。
它使用自定义构建的可执行文件:您可以创建一个小的自定义可执行文件(用Go、Rust等语言编写),执行与shell脚本相同的检查,而不是依赖于shell命令。该可执行文件可以包含在您的无发行版映像中,并由exec liveness探针调用。
如果修改镜像不可取,请考虑替代的活动探测机制,例如TCP或HTTP探测。这可能需要向应用程序添加一些最小的端点或服务,专门用于健康检查。
或者:在同一个pod中,将sidecar容器与主容器一起部署。sidecar容器可以有shell或必要的工具,可以负责检查主容器的活跃度。

相关问题