Skip to content

Commit 54b01d2

Browse files
committed
add readinessprobe to exporter and optimize generateExporterSidecar
1 parent d9bc339 commit 54b01d2

File tree

5 files changed

+74
-40
lines changed

5 files changed

+74
-40
lines changed

pkg/apis/cpo.opensource.cybertec.at/v1/postgresql_type.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ type Sidecar struct {
221221
DockerImage string `json:"image,omitempty"`
222222
Ports []v1.ContainerPort `json:"ports,omitempty"`
223223
Env []v1.EnvVar `json:"env,omitempty"`
224+
ReadinessProbe *v1.Probe `json:"readinessProbe,omitempty"`
224225
SecurityContext *v1.SecurityContext `json:"securityContext,omitempty"`
225226
VolumeMounts []v1.VolumeMount `json:"volumeMounts,omitempty"`
226227
}

pkg/apis/cpo.opensource.cybertec.at/v1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/cluster/k8sres.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,6 +1283,7 @@ func getSidecarContainer(sidecar cpov1.Sidecar, index int, resources *v1.Resourc
12831283
Resources: *resources,
12841284
Env: sidecar.Env,
12851285
Ports: sidecar.Ports,
1286+
ReadinessProbe: sidecar.ReadinessProbe,
12861287
SecurityContext: sidecar.SecurityContext,
12871288
VolumeMounts: sidecar.VolumeMounts,
12881289
}
@@ -1317,7 +1318,7 @@ func extractPgVersionFromBinPath(binPath string, template string) (string, error
13171318
return fmt.Sprintf("%v", pgVersion), nil
13181319
}
13191320

1320-
func generateSpiloReadinessProbe() *v1.Probe {
1321+
func generatePatroniReadinessProbe() *v1.Probe {
13211322
return &v1.Probe{
13221323
FailureThreshold: 3,
13231324
ProbeHandler: v1.ProbeHandler{
@@ -1334,6 +1335,23 @@ func generateSpiloReadinessProbe() *v1.Probe {
13341335
}
13351336
}
13361337

1338+
func generateExporterReadinessProbe() *v1.Probe {
1339+
return &v1.Probe{
1340+
FailureThreshold: 3,
1341+
ProbeHandler: v1.ProbeHandler{
1342+
HTTPGet: &v1.HTTPGetAction{
1343+
Path: "/",
1344+
Port: intstr.IntOrString{IntVal: 9187},
1345+
Scheme: v1.URISchemeHTTP,
1346+
},
1347+
},
1348+
InitialDelaySeconds: 6,
1349+
PeriodSeconds: 10,
1350+
SuccessThreshold: 1,
1351+
TimeoutSeconds: 5,
1352+
}
1353+
}
1354+
13371355
func generatePatroniLivenessProbe() *v1.Probe {
13381356
return &v1.Probe{
13391357
FailureThreshold: 6,
@@ -1521,7 +1539,7 @@ func (c *Cluster) generateStatefulSet(spec *cpov1.PostgresSpec) (*appsv1.Statefu
15211539

15221540
// Patroni responds 200 to probe only if it either owns the leader lock or postgres is running and DCS is accessible
15231541
if c.OpConfig.EnableReadinessProbe {
1524-
spiloContainer.ReadinessProbe = generateSpiloReadinessProbe()
1542+
spiloContainer.ReadinessProbe = generatePatroniReadinessProbe()
15251543
}
15261544
//
15271545
if c.OpConfig.EnableLivenessProbe {

pkg/cluster/resources.go

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,42 @@ func (c *Cluster) listResources() error {
6868
return nil
6969
}
7070

71+
func hasSidecar(sidecars []cpov1.Sidecar, name string) bool {
72+
for _, s := range sidecars {
73+
if s.Name == name {
74+
return true
75+
}
76+
}
77+
return false
78+
}
79+
80+
func (c *Cluster) generateExporterSidecar() *cpov1.Sidecar {
81+
monitor := c.Spec.Monitoring
82+
sidecar := &cpov1.Sidecar{
83+
Name: "postgres-exporter",
84+
DockerImage: monitor.Image,
85+
Ports: []v1.ContainerPort{
86+
{
87+
ContainerPort: monitorPort,
88+
Protocol: v1.ProtocolTCP,
89+
},
90+
},
91+
Env: c.generateMonitoringEnvVars(),
92+
SecurityContext: &v1.SecurityContext{
93+
AllowPrivilegeEscalation: c.OpConfig.Resources.SpiloAllowPrivilegeEscalation,
94+
Privileged: &c.OpConfig.Resources.SpiloPrivileged,
95+
ReadOnlyRootFilesystem: util.True(),
96+
Capabilities: generateCapabilities(c.OpConfig.AdditionalPodCapabilities),
97+
},
98+
}
99+
100+
if c.OpConfig.EnableReadinessProbe {
101+
sidecar.ReadinessProbe = generateExporterReadinessProbe()
102+
}
103+
104+
return sidecar
105+
}
106+
71107
func (c *Cluster) createStatefulSet() (*appsv1.StatefulSet, error) {
72108
c.setProcessName("creating statefulset")
73109
// check if it's allowed that spec contains initContainers
@@ -82,25 +118,11 @@ func (c *Cluster) createStatefulSet() (*appsv1.StatefulSet, error) {
82118
}
83119

84120
if c.Spec.Monitoring != nil {
85-
monitor := c.Spec.Monitoring
86-
sidecar := &cpov1.Sidecar{
87-
Name: "postgres-exporter",
88-
DockerImage: monitor.Image,
89-
Ports: []v1.ContainerPort{
90-
{
91-
ContainerPort: monitorPort,
92-
Protocol: v1.ProtocolTCP,
93-
},
94-
},
95-
Env: c.generateMonitoringEnvVars(),
96-
SecurityContext: &v1.SecurityContext{
97-
AllowPrivilegeEscalation: c.OpConfig.Resources.SpiloAllowPrivilegeEscalation,
98-
Privileged: &c.OpConfig.Resources.SpiloPrivileged,
99-
ReadOnlyRootFilesystem: util.True(),
100-
Capabilities: generateCapabilities(c.OpConfig.AdditionalPodCapabilities),
101-
},
121+
if exporterSidecar := c.generateExporterSidecar(); exporterSidecar != nil {
122+
if !hasSidecar(c.Spec.Sidecars, "postgres-exporter") {
123+
c.Spec.Sidecars = append(c.Spec.Sidecars, *exporterSidecar)
124+
}
102125
}
103-
c.Spec.Sidecars = append(c.Spec.Sidecars, *sidecar) //populate the sidecar spec so that the sidecar is automatically created
104126
}
105127

106128
statefulSetSpec, err := c.generateStatefulSet(&c.Spec)

pkg/cluster/sync.go

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -502,27 +502,15 @@ func (c *Cluster) syncStatefulSet() error {
502502
if err != nil {
503503
c.logger.Warnf("could not list pods of the statefulset: %v", err)
504504
}
505-
if c.Spec.Monitoring != nil { // XXX: Why are we generating a sidecar in the sync code?
506-
monitor := c.Spec.Monitoring
507-
sidecar := &cpov1.Sidecar{
508-
Name: "postgres-exporter",
509-
DockerImage: monitor.Image,
510-
Ports: []v1.ContainerPort{
511-
{
512-
ContainerPort: monitorPort,
513-
Protocol: v1.ProtocolTCP,
514-
},
515-
},
516-
Env: c.generateMonitoringEnvVars(),
517-
SecurityContext: &v1.SecurityContext{
518-
AllowPrivilegeEscalation: c.OpConfig.Resources.SpiloAllowPrivilegeEscalation,
519-
Privileged: &c.OpConfig.Resources.SpiloPrivileged,
520-
ReadOnlyRootFilesystem: util.True(),
521-
Capabilities: generateCapabilities(c.OpConfig.AdditionalPodCapabilities),
522-
},
523-
}
524-
c.Spec.Sidecars = append(c.Spec.Sidecars, *sidecar) //populate the sidecar spec so that the sidecar is automatically created
505+
506+
if c.Spec.Monitoring != nil {
507+
if exporterSidecar := c.generateExporterSidecar(); exporterSidecar != nil {
508+
if !hasSidecar(c.Spec.Sidecars, "postgres-exporter") {
509+
c.Spec.Sidecars = append(c.Spec.Sidecars, *exporterSidecar)
510+
}
511+
}
525512
}
513+
526514
// NB: Be careful to consider the codepath that acts on podsRollingUpdateRequired before returning early.
527515
sset, err := c.KubeClient.StatefulSets(c.Namespace).Get(context.TODO(), c.statefulSetName(), metav1.GetOptions{})
528516
if err != nil {

0 commit comments

Comments
 (0)