diff --git a/build/configs/patroni.config.yaml b/build/configs/patroni.config.yaml index b20f7386..69274c81 100644 --- a/build/configs/patroni.config.yaml +++ b/build/configs/patroni.config.yaml @@ -51,7 +51,7 @@ kubernetes: app: ${PATRONI_CLUSTER_NAME} role_label: pgtype scope_label: app - pod_ip: ${LISTEN_ADDR} + pod_ip: ${POD_DNS_NAME} postgresql: authentication: replication: @@ -67,17 +67,17 @@ postgresql: on_role_change: /setup_endpoint_callback.py on_start: /setup_endpoint_callback.py on_stop: /setup_endpoint_callback.py - connect_address: ${LISTEN_ADDR}:5432 + connect_address: ${POD_DNS_NAME}:5432 data_dir: /var/lib/pgsql/data/postgresql_${NODE_NAME} - listen: '0.0.0.0, ::0:5432' + listen: '*:5432' parameters: unix_socket_directories: /var/run/postgresql, /tmp pgpass: /tmp/pgpass0 restapi: - connect_address: ${LISTEN_ADDR}:8008 - listen: ${LISTEN_ADDR}:8008 + connect_address: ${POD_DNS_NAME}:8008 + listen: '*:8008' tags: clonefrom: false nofailover: ${DR_MODE} noloadbalance: false - nosync: false \ No newline at end of file + nosync: false diff --git a/charts/patroni-services/values.yaml b/charts/patroni-services/values.yaml index a9752004..3fa4d1b5 100644 --- a/charts/patroni-services/values.yaml +++ b/charts/patroni-services/values.yaml @@ -410,7 +410,7 @@ connectionPooler: '*': "host=pg-patroni-direct port=5432" pgbouncer: listen_port: '6432' - listen_addr: '0.0.0.0' + listen_addr: '*' auth_type: 'md5' auth_file: '/etc/pgbouncer/userlist.txt' auth_user: 'pgbouncer' diff --git a/docs/public/installation.md b/docs/public/installation.md index 97aa5a94..bca4f205 100644 --- a/docs/public/installation.md +++ b/docs/public/installation.md @@ -833,7 +833,7 @@ For more information on how to do the Major Upgrade of PostgreSQL, please, follo ```yaml pgbouncer: listen_port: '6432' - listen_addr: '0.0.0.0' + listen_addr: '*' auth_type: 'md5' auth_file: '/etc/pgbouncer/userlist.txt' auth_user: 'pgbouncer' diff --git a/pkg/deployment/patroni.go b/pkg/deployment/patroni.go index 63a15e6f..99e8e7dc 100644 --- a/pkg/deployment/patroni.go +++ b/pkg/deployment/patroni.go @@ -242,6 +242,23 @@ func NewPatroniStatefulset(cr *patroniv1.PatroniCore, deploymentIdx int, cluster }, }, }, + { + Name: "POD_NAME", + ValueFrom: &corev1.EnvVarSource{ + FieldRef: &corev1.ObjectFieldSelector{ + APIVersion: "v1", + FieldPath: "metadata.name", + }, + }, + }, + { + Name: "HEADLESS_SERVICE", + Value: "patroni-headless", + }, + { + Name: "POD_DNS_NAME", + Value: "$(POD_NAME).$(HEADLESS_SERVICE).$(POD_NAMESPACE).svc.cluster.local", + }, { Name: "PG_RESOURCES_LIMIT_MEM", ValueFrom: &corev1.EnvVarSource{ @@ -309,7 +326,7 @@ func NewPatroniStatefulset(cr *patroniv1.PatroniCore, deploymentIdx int, cluster DNSPolicy: corev1.DNSClusterFirst, }, }, - ServiceName: "backrest-headless", + ServiceName: "patroni-headless", PodManagementPolicy: appsv1.OrderedReadyPodManagement, UpdateStrategy: appsv1.StatefulSetUpdateStrategy{Type: appsv1.RollingUpdateStatefulSetStrategyType}, RevisionHistoryLimit: ptr.To[int32](10), diff --git a/pkg/deployment/pgbackrest.go b/pkg/deployment/pgbackrest.go index ee9a460a..e6dfe0b1 100644 --- a/pkg/deployment/pgbackrest.go +++ b/pkg/deployment/pgbackrest.go @@ -182,6 +182,30 @@ func GetBackrestHeadless() *corev1.Service { } } +func GetPatroniHeadless(clusterName string) *corev1.Service { + labels := map[string]string{"app": clusterName} + ports := []corev1.ServicePort{ + {Name: "postgresql", Port: 5432}, + {Name: "patroni-api", Port: 8008}, + } + return &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Service", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "patroni-headless", + Namespace: util.GetNameSpace(), + }, + + Spec: corev1.ServiceSpec{ + Selector: labels, + Ports: ports, + ClusterIP: "None", + }, + } +} + func getPgBackRestSettings(pgBackrestSpec *v1.PgBackRest, isStandby bool) string { var listSettings []string listSettings = append(listSettings, "[global]") diff --git a/pkg/reconciler/patroni.go b/pkg/reconciler/patroni.go index b47fd1f4..f74d2005 100644 --- a/pkg/reconciler/patroni.go +++ b/pkg/reconciler/patroni.go @@ -473,6 +473,14 @@ func (r *PatroniReconciler) processPatroniServices(cr *v1.PatroniCore, patroniSp } } } + + // Create patroni headless service for DNS-based pod discovery + patroniHeadless := deployment.GetPatroniHeadless(r.cluster.ClusterName) + if err := r.helper.ResourceManager.CreateOrUpdateService(patroniHeadless); err != nil { + logger.Error(fmt.Sprintf("Cannot create service %s", patroniHeadless.Name), zap.Error(err)) + return err + } + return nil }