From 30fa3140236a1428a013f9740112a600e3257427 Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Fri, 4 Jul 2025 13:10:24 +0300 Subject: [PATCH 1/2] K8SPG-718 patroni metrics to pmm --- .../tests/monitoring-pmm3/03-create-cluster.yaml | 1 + e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml | 1 + percona/pmm/pmm.go | 14 ++++++++++---- percona/pmm/pmm_test.go | 8 ++++---- .../v1beta1/patroni_types.go | 12 ++++++++++++ 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml b/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml index 1b090182b..3695d0fe3 100644 --- a/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml +++ b/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml @@ -10,5 +10,6 @@ commands: get_cr \ | yq eval '.spec.pmm.enabled=true' - \ + | yq eval '.spec.crVersion="2.8.0"' - \ | yq eval ".spec.pmm.image=\"${IMAGE_PMM3_CLIENT}\"" - \ | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml b/e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml index 0c8b6568f..197f82f2f 100644 --- a/e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml +++ b/e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml @@ -11,5 +11,6 @@ commands: instance=$(kubectl get -n "${NAMESPACE}" pod -l postgres-operator.crunchydata.com/instance-set=instance1 -o 'jsonpath={.items[].metadata.name}') get_metric_values node_boot_time_seconds ${NAMESPACE}-${instance} ${token} + get_metric_values patroni_postgres_running ${NAMESPACE}-${instance} ${token} get_qan20_values_pmm3 ${NAMESPACE}-${instance} ${token} timeout: 240 diff --git a/percona/pmm/pmm.go b/percona/pmm/pmm.go index 7308ce98e..154ca509a 100644 --- a/percona/pmm/pmm.go +++ b/percona/pmm/pmm.go @@ -224,7 +224,7 @@ func sidecarContainerV2(pgc *v2.PerconaPGCluster) corev1.Container { }, { Name: "PMM_AGENT_PRERUN_SCRIPT", - Value: agentPrerunScript(pgc.Spec.PMM.QuerySource, pgc), + Value: agentPrerunScript(pgc, false), }, { Name: "PMM_AGENT_PATHS_TEMPDIR", @@ -407,7 +407,7 @@ func sidecarContainerV3(pgc *v2.PerconaPGCluster) corev1.Container { }, { Name: "PMM_AGENT_PRERUN_SCRIPT", - Value: agentPrerunScript(pgc.Spec.PMM.QuerySource, pgc), + Value: agentPrerunScript(pgc, true), }, { Name: "PMM_AGENT_PATHS_TEMPDIR", @@ -419,7 +419,7 @@ func sidecarContainerV3(pgc *v2.PerconaPGCluster) corev1.Container { return container } -func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster) string { +func agentPrerunScript(pgc *v2.PerconaPGCluster, isPMM3 bool) string { wait := "pmm-admin status --wait=10s" annotate := "pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'" @@ -435,7 +435,7 @@ func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster) "--skip-connection-check", "--metrics-mode=push", "--service-name=$(PMM_AGENT_SETUP_NODE_NAME)", - fmt.Sprintf("--query-source=%s", querySource), + fmt.Sprintf("--query-source=%s", pgc.Spec.PMM.QuerySource), } if pgc.CompareVersion("2.7.0") >= 0 { @@ -449,5 +449,11 @@ func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster) } addService := fmt.Sprintf("pmm-admin add postgresql %s", strings.Join(addServiceArgs, " ")) + if pgc.CompareVersion("2.8.0") >= 0 && isPMM3 { + addPatroniMetrics := fmt.Sprintf( + "pmm-admin add external --scheme=https --listen-port=%d --tls-skip-verify --service-name=$(PMM_AGENT_SETUP_NODE_NAME)-patroni-external", pgc.Spec.Patroni.GetPort()) + return fmt.Sprintf("%s; %s; %s; %s", wait, addService, addPatroniMetrics, annotate) + } + return wait + "; " + addService + "; " + annotate } diff --git a/percona/pmm/pmm_test.go b/percona/pmm/pmm_test.go index 482dfa4f5..4adf05d5c 100644 --- a/percona/pmm/pmm_test.go +++ b/percona/pmm/pmm_test.go @@ -26,7 +26,7 @@ func TestContainer(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.6.0", + CRVersion: "2.8.0", // TODO use version.Version() PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{ @@ -152,7 +152,7 @@ func TestSidecarContainerV2(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.7.0", + CRVersion: "2.8.0", // TODO use version.Version() PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{ @@ -264,7 +264,7 @@ func TestSidecarContainerV3(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.7.0", + CRVersion: "2.8.0", PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{ @@ -320,7 +320,7 @@ func TestSidecarContainerV3(t *testing.T) { "DB_TYPE": "postgresql", "DB_USER": v2.UserMonitoring, "DB_PASS": "", // secret reference is asserted separately - "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=test-cluster --environment=dev-postgres; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", + "PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=test-cluster --environment=dev-postgres; pmm-admin add external --scheme=https --listen-port=8008 --tls-skip-verify --service-name=$(PMM_AGENT_SETUP_NODE_NAME)-patroni-external; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'", "PMM_AGENT_PATHS_TEMPDIR": "/tmp", } diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/patroni_types.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/patroni_types.go index 63b77b43e..ccc43f656 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/patroni_types.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/patroni_types.go @@ -83,6 +83,9 @@ type PatroniSwitchover struct { const ( PatroniSwitchoverTypeFailover = "Failover" PatroniSwitchoverTypeSwitchover = "Switchover" + + // K8SPG-718 + patroniDefaultPort = int32(8008) ) // Default sets the default values for certain Patroni configuration attributes, @@ -105,6 +108,15 @@ func (s *PatroniSpec) Default() { } } +// GetPort returns the patroni port. Added as part of K8SPG-718. +func (s *PatroniSpec) GetPort() int32 { + patroniPort := patroniDefaultPort + if s != nil && s.Port != nil { + patroniPort = *s.Port + } + return patroniPort +} + type PatroniStatus struct { // - "database_system_identifier" of https://github.com/zalando/patroni/blob/v2.0.1/docs/rest_api.rst#monitoring-endpoint From 74c085144e510284b06e5312673f563dedbbba2e Mon Sep 17 00:00:00 2001 From: George Kechagias Date: Tue, 8 Jul 2025 17:17:07 +0300 Subject: [PATCH 2/2] remove hardcoded versions, the tests will fail but they will pass again once we bump the version officially to 2.8 --- e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml | 1 - percona/pmm/pmm_test.go | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml b/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml index 3695d0fe3..1b090182b 100644 --- a/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml +++ b/e2e-tests/tests/monitoring-pmm3/03-create-cluster.yaml @@ -10,6 +10,5 @@ commands: get_cr \ | yq eval '.spec.pmm.enabled=true' - \ - | yq eval '.spec.crVersion="2.8.0"' - \ | yq eval ".spec.pmm.image=\"${IMAGE_PMM3_CLIENT}\"" - \ | kubectl -n "${NAMESPACE}" apply -f - diff --git a/percona/pmm/pmm_test.go b/percona/pmm/pmm_test.go index 4adf05d5c..4c229f3ad 100644 --- a/percona/pmm/pmm_test.go +++ b/percona/pmm/pmm_test.go @@ -10,6 +10,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/percona/percona-postgresql-operator/percona/version" v2 "github.com/percona/percona-postgresql-operator/pkg/apis/pgv2.percona.com/v2" ) @@ -26,7 +27,7 @@ func TestContainer(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.8.0", // TODO use version.Version() + CRVersion: version.Version(), PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{ @@ -152,7 +153,7 @@ func TestSidecarContainerV2(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.8.0", // TODO use version.Version() + CRVersion: version.Version(), PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{ @@ -264,7 +265,7 @@ func TestSidecarContainerV3(t *testing.T) { pgc := &v2.PerconaPGCluster{ Spec: v2.PerconaPGClusterSpec{ - CRVersion: "2.8.0", + CRVersion: version.Version(), PMM: pmmSpec, }, ObjectMeta: metav1.ObjectMeta{