【问题标题】:livenessProbe seems not to be executedlivenessProbe 似乎没有被执行
【发布时间】: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


【解决方案1】:

当使用exec 类型的探针时,Kubernetes 将运行 shell 来处理命令,它会直接运行命令。这意味着您只能使用一个命令,并且| 字符被视为您的curl 的另一个参数。

要解决这个问题,你需要使用sh -c来执行shell代码,如下所示:

    livenessProbe:
      exec:
        command:
          - sh
          - -c
          - >-
              curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats |
              head -c 30 > /app/out.log

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多