0

我已经为我的 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 命令可以吗?如果是这样,我该如何验证?

4

2 回答 2

2

试试这个为你的 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: {}

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

于 2021-07-09T14:31:11.270 回答
1

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

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

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

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

请从他们解释的 kubernetes 文档中查看此页面livenessProbereadinessProbe以及startupProbe

于 2021-07-09T09:35:53.313 回答