【发布时间】:2022-01-19 23:12:42
【问题描述】:
部署中定义的容器设置了livenessProbe:根据定义,它调用远程端点并检查响应是否包含有用信息或空响应(这应该会触发 pod 重启)。
整个定义如下(为了更清晰的标记,我删除了进一步的检查):
apiVersion: apps/v1
kind: Deployment
metadata:
name: fc-backend-deployment
labels:
name: fc-backend-deployment
app: fc-test
spec:
replicas: 1
selector:
matchLabels:
name: fc-backend-pod
app: fc-test
template:
metadata:
name: fc-backend-pod
labels:
name: fc-backend-pod
app: fc-test
spec:
containers:
- name: fc-backend
image: localhost:5000/backend:1.3
ports:
- containerPort: 4044
env:
- name: NODE_ENV
value: "dev"
- name: REDIS_HOST
value: "redis"
livenessProbe:
exec:
command:
- curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats | head -c 30 > /app/out.log
initialDelaySeconds: 20
failureThreshold: 12
periodSeconds: 10
我也尝试将命令放入数组中:
command: ["sh", "-c", "curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats", "|", "head", "-c", "30", ">", "/app/out.log"]
并分成单独的行:
- /bin/bash
- -c
- curl
- -X
- GET
- $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats
- |
- head
- -c
- "30"
- >
- /app/out.log
甚至像这样:
command:
- |
curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats | head -c 30 > /app/out.log
所有尝试都在有和没有(/bin/ba)sh -c 的情况下进行 - 结果相同。
但是,当您阅读本文时,您已经知道这些都不起作用。
我通过exec'ing 进入正在运行的容器并试图找到/app/out.log 文件来知道它 - 在我查看目录内容的任何时候它都不存在。看起来这个探针永远不会被执行。
在运行容器中运行的命令运行良好:获取数据并将其写入指定文件。
什么可能导致探测不被执行?
【问题讨论】:
-
请看一下这个(stackoverflow.com/questions/58932210/…)。最有可能的错误是你不能使用 |你使用它的方式。
-
是的,就是这样:将命令重写为:
- sh \ - -c \ - >- \ curl -X GET ...解决了问题!请考虑将其添加为答案。非常感谢! -
太好了!我在下面添加了整个内容作为答案。
标签: kubernetes yaml