Description:
I could find some code inside psmdb-operator that seems to be designed to handle PSA configurations, but trying to spin up a PSA cluster always fails with:
message: 'Error: failed to update config members: set votes: write mongo config:
replSetReconfig: (NewReplicaSetConfigurationIncompatible) Rejecting reconfig
where the new config has a PSA topology and the secondary is electable, but
the old config contains only one writable node. Refer to https://docs.mongodb.com/manual/reference/method/rs.reconfigForPSASet/
for next steps on reconfiguring a PSA set.'
Steps to Reproduce:
Apply this test config:
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDB
metadata:
name: percongo
spec:
crVersion: 1.21.1
image: percona/percona-server-mongodb:8.0.12-4
sharding:
enabled: false
unsafeFlags:
replsetSize: true
replsets:
- name: rs0
size: 2
arbiter:
enabled: true
size: 1
configuration: |
security:
enableEncryption: false
volumeSpec:
persistentVolumeClaim:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 32Gi
affinity:
antiAffinityTopologyKey: none
storage:
wiredTiger:
collectionConfig:
blockCompressor: zstd
resources:
requests:
memory: 1024Mi
cpu: 250m
limits:
memory: 1024Mi
Version:
psmdb-operator: 1.21.1
percona-server-mongodb: 8.0.12-4
Logs:
2025-12-03T13:12:07.835Z ERROR Reconciler error {"controller": "psmdb-controller", "controllerGroup": "psmdb.percona.com", "controllerKind": "PerconaServerMongoDB", "PerconaServerMongoDB": {"name":"percongo","namespace":"default"}, "namespace": "default", "name": "percongo", "reconcileID": "3a3926be-561a-4061-b8c3-77cf21bd441d", "error": "reconcile statefulsets: failed to update config members: set votes: write mongo config: replSetReconfig: (NewReplicaSetConfigurationIncompatible) Rejecting reconfig where the new config has a PSA topology and the secondary is electable, but the old config contains only one writable node. Refer to
for next steps on reconfiguring a PSA set.", "errorVerbose": "failed to update config members: set votes: write mongo config: replSetReconfig: (NewReplicaSetConfigurationIncompatible) Rejecting reconfig where the new config has a PSA topology and the secondary is electable, but the old config contains only one writable node. Refer to
for next steps on reconfiguring a PSA set.\nreconcile statefulsets\ngithub.com/percona/percona-server-mongodb-operator/pkg/controller/perconaservermongodb.(*ReconcilePerconaServerMongoDB).Reconcile\n\t/go/src/github.com/percona/percona-server-mongodb-operator/pkg/controller/perconaservermongodb/psmdb_controller.go:425\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:216\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:461\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:421\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func1.1\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:296\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1693"}
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:474
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:421
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func1.1
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.22.1/pkg/internal/controller/controller.go:296
Expected Result:
Either a clear error and psmdb-operator refuses to do PSA.
Or spin up a PSA configuration properly.
Actual Result:
Pods are set up, but configuration might or might not be fine, operator stuck in reconciliation loop
Additional Information:
I did not try to manually reconfig the replicaSet - I wasn’t sure which change the operator intended to do in the failed reconciliation step.