Redis 的不正确活性探测没有失败

Incorrect liveness probe for Redis not failing

我已经为我的 Redis 实例配置了一个 liveness 探测器,以确保 Redis 能够检索密钥以便它能够被调用 'alive'。

  livenessProbe:
    initialDelaySeconds: 20
    periodSeconds: 10
    exec:
      command:
        {{- include "liveness_probe" . | nindent 16 }}

_liveness.tpl

{{/* Liveness probe script. */}}
{{- define "liveness_probe" -}}

- "redis-cli"
- "set"
- "liveness_test_key"
- "\"SUCCESS\""
- "&&"
- "redis-cli"
- "get"
- "liveness_test_key"
- "|"
- "awk"
- "' != \"SUCCESS\" {exit 1}'"
{{- end }}

pod 可以在进行更改后启动。但是,我想确保探测器按预期工作。为此,我只是在 get 命令之前添加了一个删除命令。

{{/* Liveness probe script. */}}
{{- define "liveness_probe" -}}

- "redis-cli"
- "set"
- "liveness_test_key"
- "\"SUCCESS\""
- "&&"
- "redis-cli"
- "del"
- "liveness_test_key"
- "&&"
- "redis-cli"
- "get"
- "liveness_test_key"
- "|"
- "awk"
- "' != \"SUCCESS\" {exit 1}'"
{{- end }}

当我直接在命令提示符下执行此命令时,我得到了预期的退出代码。

但问题是我的 pod 仍然能够启动。

我用的liveness probe命令可以吗?如果是这样,我该如何验证?

我认为您混淆了 livenessProbereadinessProbe。 livenessProbe 告诉 kubernetes 重启你的 pod 如果你的命令 returns 是一个非零的退出代码,这是在 initialDelaySeconds: 20

中指定的时间段之后执行的

readinessProbe 决定 pod 是否处于 Ready 状态以接受流量。

  readinessProbe:
    initialDelaySeconds: 20
    periodSeconds: 10
    exec:
      command:
        {{- include "liveness_probe" . | nindent 16 }}

如果需要,它们也可以一起使用。

请查看 kubernetes 文档中的 this page,他们解释了 livenessProbereadinessProbestartupProbe

对你的 liveness probe 试试这个它工作正常,你可以在 readinessProbe 中尝试同样的方法:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: redis
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: redis
    spec:
      containers:
      - image: redis
        name: redis
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - |            
                #!/usr/bin/env bash -e
                #export REDISCLI_AUTH="$REDIS_PASSWORD"

                set_response=$(
                  redis-cli set liveness_test_key "SUCCESS"
                )

                del_response=$(
                    redis-cli del liveness_test_key
                )

                response=$(
                  redis-cli get liveness_test_key
                )

                if [ "$response" != "SUCCESS" ] ; then
                  echo "Unable to get keys, something is wrong"
                  exit 1
                fi               

          initialDelaySeconds: 5
          periodSeconds: 5
          
status: {}

您需要在模板中编辑这些值