Skip to content

For help, click the link below to get free database assistance or contact our experts for personalized support.

Changing MongoDB options

When you deploy a new Percona Server for MongoDB cluster, the Operator spins it up with the set of defaults that ensure its correct operation. However, your application may need additional configuration of MongoDB. You can define this configuration using the mongod.conf configuration file options. You can configure mongod Pods, mongos Pods and config server replica set Pods separately, based on your requirements.
Then you pass these options to MongoDB instances in the cluster in one of the following ways:

Note that you can’t change options that may break the behavior of the Operator. For example, TLS/SSL options. If you try changing such options, your changes will be ignored.

Edit the deploy/cr.yaml file

You can add MongoDB configuration options to the following keys of the deploy/cr.yaml:

Example

This example shows how to enable rate limit for database profiler and define the default verbosity level for system log:

spec:
  ...
  replsets:
    - name: rs0
      size: 3
      configuration: |
        operationProfiling:
          mode: slowOp
        systemLog:
          verbosity: 1
      ...

Find the complete list of options in the official manual . Also refer to these pages in Percona Server for MongoDB documentation:

Use a ConfigMap

You can use a ConfigMap and the cluster restart to reset configuration options. A ConfigMap allows Kubernetes to pass or update configuration data inside a containerized application.

You should give the ConfigMap a specific name, which is composed of your cluster name and a specific suffix:

  • my-cluster-name-rs0-mongod for the Replica Set (mongod) Pods,
  • my-cluster-name-cfg-mongod for the Config Server Pods,
  • my-cluster-name-mongos for the mongos Pods,

Note

To find the cluster name, you can use the following command:

$ kubectl get psmdb

For example, let’s define a mongod.conf configuration file and put there several MongoDB options we used in the previous example:

operationProfiling:
  mode: slowOp
systemLog:
  verbosity: 1

You can create a ConfigMap from the mongod.conf file with the kubectl create configmap command. It has the following syntax:

$ kubectl create configmap <configmap-name> <resource-type=resource-name>

The following example defines my-cluster-name-rs0-mongod as the ConfigMap name and the mongod.conf file as the data source:

$ kubectl create configmap my-cluster-name-rs0-mongod --from-file=mongod.conf=mongod.conf

To view the created ConfigMap, use the following command:

$ kubectl describe configmaps my-cluster-name-rs0-mongod

Note

Do not forget to restart Percona Server for MongoDB to ensure the cluster has updated the configuration (see details on how to connect in the Install Percona Server for MongoDB on Kubernetes page).

Use a Secret Object

The Operator can also store configuration options in Kubernetes Secrets . This can be useful if you need additional protection for some sensitive data.

You should create a Secret object with a specific name, composed of your cluster name and a specific suffix:

  • my-cluster-name-rs0-mongod for the Replica Set Pods,
  • my-cluster-name-cfg-mongod for the Config Server Pods,
  • my-cluster-name-mongos for the mongos Pods,

Note

To find the cluster name, you can use the following command:

$ kubectl get psmdb

Configuration options should be put inside a specific key:

  • data.mongod key for Replica Set (mongod) and Config Server Pods,
  • data.mongos key for mongos Pods.

Actual options should be encoded with Base64 .

For example, let’s define a mongod.conf configuration file and put there several MongoDB options we used in the previous example:

operationProfiling:
  mode: slowOp
systemLog:
  verbosity: 1

You can get a Base64 encoded string from your options via the command line as follows:

$ cat mongod.conf | base64 --wrap=0
$ cat mongod.conf | base64

Note

Similarly, you can read the list of options from a Base64 encoded string:

$ echo "ICAgICAgb3BlcmF0aW9uUHJvZmlsaW5nOgogICAgICAgIG1vZGU6IHNsb3dPc\
AogICAgICBzeXN0ZW1Mb2c6CiAgICAgICAgdmVyYm9zaXR5OiAxCg==" | base64 --decode

Finally, use a yaml file to create the Secret object. For example, you can create a deploy/my-mongod-secret.yaml file with the following contents:

apiVersion: v1
kind: Secret
metadata:
  name: my-cluster-name-rs0-mongod
data:
  mongod.conf: "ICAgICAgb3BlcmF0aW9uUHJvZmlsaW5nOgogICAgICAgIG1vZGU6IHNsb3dPc\
   AogICAgICBzeXN0ZW1Mb2c6CiAgICAgICAgdmVyYm9zaXR5OiAxCg=="

When ready, apply it with the following command:

$ kubectl create -f deploy/my-mongod-secret.yaml

Note

Do not forget to restart Percona Server for MongoDB to ensure the cluster has updated the configuration (see details on how to connect in the Install Percona Server for MongoDB on Kubernetes page).


Last update: 2025-06-04