问题描述
我有以下情况:
应用程序使用 S3 在 Amazon 中存储数据。应用程序在 kubernetes 中部署为 pod。有时,一些开发人员会弄乱 S3 的访问数据(例如用户/密码),并且应用程序无法连接到 S3 - 但 pod 正常启动并杀死之前工作正常的 pod 版本(因为所有就绪和活动探测都正常)。我想将 S3 探针添加到就绪状态 - 为了在 S3 上执行 HeadBucketRequest
,如果此操作成功,它就能够连接到 S3。这里的问题是这些请求需要花钱,而我真的只在 pod 启动时才需要它们。
是否有与此相关的最佳实践?
解决方法
如果您(引用)“...真的只在 pod 开始时才需要它们 [探针]”,那么请考虑添加一个 startup probe。
除了启动探测器的帮助 - 需要较长时间启动的 Pod - 启动探测器还可以仅在 Pod 启动时验证条件。
,Readiness 和 liveness 证明在运行时检查 POD 或容器的健康状况。您的场景非常复杂,但使用就绪和活跃度探测器将无法正常工作,因为它会在内部触发并且需要花钱。
在这种情况下,您可以使用 lifecycle 钩子:
containers:
- image: MAGE_NAME
lifecycle:
postStart:
exec:
command: ["/bin/sh","-c","script.sh"]
这将在容器启动时运行钩子,您可以将 shell 文件保存在 POD 或图像中。
如果200响应移动头和容器启动,你可以在shell文件中正确逻辑。
https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/