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命令可以吗?如果是这样,我该如何验证?
我认为您混淆了 livenessProbe
和 readinessProbe
。 livenessProbe 告诉 kubernetes 重启你的 pod 如果你的命令 returns 是一个非零的退出代码,这是在 initialDelaySeconds: 20
中指定的时间段之后执行的
而 readinessProbe
决定 pod 是否处于 Ready
状态以接受流量。
readinessProbe:
initialDelaySeconds: 20
periodSeconds: 10
exec:
command:
{{- include "liveness_probe" . | nindent 16 }}
如果需要,它们也可以一起使用。
请查看 kubernetes 文档中的 this page,他们解释了 livenessProbe
、readinessProbe
和 startupProbe
对你的 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: {}
您需要在模板中编辑这些值
我已经为我的 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命令可以吗?如果是这样,我该如何验证?
我认为您混淆了 livenessProbe
和 readinessProbe
。 livenessProbe 告诉 kubernetes 重启你的 pod 如果你的命令 returns 是一个非零的退出代码,这是在 initialDelaySeconds: 20
而 readinessProbe
决定 pod 是否处于 Ready
状态以接受流量。
readinessProbe:
initialDelaySeconds: 20
periodSeconds: 10
exec:
command:
{{- include "liveness_probe" . | nindent 16 }}
如果需要,它们也可以一起使用。
请查看 kubernetes 文档中的 this page,他们解释了 livenessProbe
、readinessProbe
和 startupProbe
对你的 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: {}
您需要在模板中编辑这些值