Skip to content

Commit

Permalink
Probe use built-in, discarded healthcheck.sh
Browse files Browse the repository at this point in the history
Signed-off-by: muicoder <[email protected]>
https://github.com/redis/redis/blob/unstable/TLS.md
The probe uses env mode to load the TLS certificate.
  • Loading branch information
muicoder committed Jan 10, 2024
1 parent ef99c4d commit 9387285
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 7 deletions.
41 changes: 34 additions & 7 deletions k8sutils/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,8 +367,8 @@ func generateContainerDef(name string, containerParams containerParameters, clus
containerParams.Port,
clusterVersion,
),
ReadinessProbe: getProbeInfo(containerParams.ReadinessProbe),
LivenessProbe: getProbeInfo(containerParams.LivenessProbe),
ReadinessProbe: getProbeInfo(containerParams, "R"),
LivenessProbe: getProbeInfo(containerParams, "L"),
VolumeMounts: getVolumeMount(name, containerParams.PersistenceEnabled, clusterMode, nodeConfVolume, externalConfig, mountpath, containerParams.TLSConfig, containerParams.ACLConfig),
},
}
Expand Down Expand Up @@ -595,7 +595,33 @@ func getVolumeMount(name string, persistenceEnabled *bool, clusterMode bool, nod
}

// getProbeInfo generate probe for Redis StatefulSet
func getProbeInfo(probe *commonapi.Probe) *corev1.Probe {
func getProbeInfo(params containerParameters, probeType string) *corev1.Probe {
probePort := redisPort
if params.Role == "sentinel" {
probePort = sentinelPort
}

probeCommand := []string{
"redis-cli", "-p", strconv.Itoa(probePort),
}

if params.TLSConfig != nil {
probeCommand = append(probeCommand, "--tls")
probeCommand = append(probeCommand, "--cacert", "$(REDIS_TLS_CA_KEY)")
probeCommand = append(probeCommand, "--cert", "$(REDIS_TLS_CERT)", "--key", "$(REDIS_TLS_CERT_KEY)")
}
probeCommand = append(probeCommand, "ping")

var probe *commonapi.Probe
switch probeType {
case "R":
probe = params.ReadinessProbe
case "L":
probe = params.LivenessProbe
default:
probe = params.LivenessProbe
}

return &corev1.Probe{
InitialDelaySeconds: probe.InitialDelaySeconds,
PeriodSeconds: probe.PeriodSeconds,
Expand All @@ -604,10 +630,7 @@ func getProbeInfo(probe *commonapi.Probe) *corev1.Probe {
SuccessThreshold: probe.SuccessThreshold,
ProbeHandler: corev1.ProbeHandler{
Exec: &corev1.ExecAction{
Command: []string{
"bash",
"/usr/bin/healthcheck.sh",
},
Command: probeCommand,
},
},
}
Expand Down Expand Up @@ -674,6 +697,10 @@ func getEnvironmentVariables(role string, enabledPassword *bool, secretName *str
},
},
})
envVars = append(envVars, corev1.EnvVar{
Name: "REDISCLI_AUTH",
ValueFrom: envVars[len(envVars)-1].ValueFrom,
})
}
if persistenceEnabled != nil && *persistenceEnabled {
envVars = append(envVars, corev1.EnvVar{Name: "PERSISTENCE_ENABLED", Value: "true"})
Expand Down
16 changes: 16 additions & 0 deletions k8sutils/statefulset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,14 @@ func TestGetEnvironmentVariables(t *testing.T) {
Key: "test-key",
},
}},
{Name: "REDISCLI_AUTH", ValueFrom: &corev1.EnvVarSource{
SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "test-secret",
},
Key: "test-key",
},
}},
{Name: "SERVER_MODE", Value: "sentinel"},
{Name: "SETUP_MODE", Value: "sentinel"},
{Name: "TEST_ENV", Value: "test-value"},
Expand Down Expand Up @@ -340,6 +348,14 @@ func TestGetEnvironmentVariables(t *testing.T) {
Key: "test-key",
},
}},
{Name: "REDISCLI_AUTH", ValueFrom: &corev1.EnvVarSource{
SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "test-secret",
},
Key: "test-key",
},
}},
{Name: "SERVER_MODE", Value: "cluster"},
{Name: "SETUP_MODE", Value: "cluster"},
{Name: "TEST_ENV", Value: "test-value"},
Expand Down

0 comments on commit 9387285

Please sign in to comment.