【问题标题】:Incorrect liveness probe for Redis not failingRedis 的不正确活性探测未失败
【发布时间】:2021-09-19 01:50:31
【问题描述】:

我已经为我的 Redis 实例配置了一个活跃度探测,以确保 Redis 能够检索密钥,使其能够被称为“活跃”。

  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"
- "'$1 != \"SUCCESS\" {exit 1}'"
{{- end }}

进行更改后,吊舱可以启动。但是,我想确保探针按预期工作。为此,我只是在 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"
- "'$1 != \"SUCCESS\" {exit 1}'"
{{- end }}

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

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

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

【问题讨论】:

    标签: kubernetes redis livenessprobe


    【解决方案1】:

    为您的 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: {}
    
    

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

    【讨论】:

      【解决方案2】:

      我认为您将 livenessProbereadinessProbe 混淆了。如果您的命令返回非零退出代码,livenessProbe 告诉 kubernetes 重新启动您的 pod,这将在 initialDelaySeconds: 20 中指定的时间段后执行

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

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

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

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

      【讨论】:

      • 但是在我的配置中,liveness probe不应该失败导致pod重启吗?
      • 它应该在 20 秒后,如果您的命令返回非零退出代码。我建议你在 pod 中运行 kubectl exec 并尝试从那里运行命令以确保它是非 0 返回。
      • 是的,我已经验证过了。它确实在 pod 内返回 1。
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2019-11-20
      相关资源
      最近更新 更多