cybozu-go / moco

MySQL operator on Kubernetes using GTID-based semi-synchronous replication.

Home Page:https://cybozu-go.github.io/moco/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unable to update Primary/Replica services when updating Ports section.

donch opened this issue · comments

Describe the bug
Hi, I'm trying to customize the Primary/Replica services with custom NodePort. For the serviceType, all is fine, but when i'm customising the Ports section, i'm getting this error :

{"level":"error","ts":"2024-07-18T13:44:29Z","msg":"Reconciler error","controller":"mysqlcluster","controllerGroup":"moco.cybozu.com","controllerKind":"MySQLCluster","MySQLCluster":{"name":"moco","namespace":"enix"},"namespace":"enix","name":"moco","reconcileID":"5b23fa63-bc2e-4311-b649-81705e00a3dc","error":"failed to reconcile moco-moco-primary service: failed to create typed patch object (enix/moco-moco-primary; /v1, Kind=Service): errors:\n .spec.ports: duplicate entries for key [port=3306,protocol=\"TCP\"]\n .spec.ports: duplicate entries for key [port=33060,protocol=\"TCP\"]","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.15.3/pkg/internal/controller/controller.go:324\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.15.3/pkg/internal/controller/controller.go:265\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.15.3/pkg/internal/controller/controller.go:226"}

It seems the merge can't be done since the Ports section is a List

Environments

  • Version: Chart moco-0.10.2
  • OS: Kubernetes 1.29.3

To Reproduce
Steps to reproduce the behavior:
Create a simple cluster with the following customisation:

  primaryServiceTemplate:
    spec:
      ports:
      - name: mysql
        nodePort: 31500
        port: 3306
        protocol: TCP
        targetPort: mysql
      type: NodePort

Expected behavior
I want to be able to customize my services NodePorts

Thanks !

@donch
Thanks for reporing the issue.

This behavior is by design. MOCO does not allow users to customize the ports fields.
However, the nodePort may not affect MOCO's operation, so it may be a good idea to allow customization of the nodePort.

https://cybozu-go.github.io/moco/reconcile.html#service

The following fields in Service spec may not be customized, though.
clusterIP
ports
selector

@donch
I updated. Please wait for the next release.