Skip to content

ServiceAccount mongodb-kubernetes-appdb missing when deploying MongoDBCommunity #489

@bitfisher

Description

@bitfisher

What did you do to encounter the bug?
Steps to reproduce the behavior:

  1. Install operator
  2. Deploy MongoDBCommunity with
apiVersion: mongodbcommunity.mongodb.com/v1
kind: MongoDBCommunity
metadata:
  name: sample-mongodb
  namespace: mas-test
  annotations:
    mongodb.com/v1.architecture: "static"
spec:
  type: ReplicaSet
  members: 1
  arbiters: 0
  version: "7.0.24"
  featureCompatibilityVersion: "7.0"
  statefulSet:
    spec:
      template:
        spec:
          containers:
          - name: mongod
            resources:
              requests:
                cpu: 100m
                memory: 256Mi
              limits:
                cpu: 1000m
                memory: 512Mi
          - name: mongodb-agent
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 1000m
                memory: 512Mi
          initContainers:
          - name: mongodb-agent-readinessprobe
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 1000m
                memory: 512Mi
          - name: mongod-posthook
            resources:
              requests:
                cpu: 100m
                memory: 256Mi
              limits:
                cpu: 1000m
                memory: 512Mi
      volumeClaimTemplates:
      - metadata:
          name: data-volume
        spec:
          resources:
            requests:
              storage: 1Gi
      - metadata:
          name: logs-volume
        spec:
          resources:
            requests:
              storage: 0Mi
  security:
    authentication:
      modes: ["SCRAM"]
  users:
    - name: sample
      db: SampleDB
      scramCredentialsSecretName: sample
      passwordSecretRef:
        name: sample-mongodb
      roles:
        - name: dbOwner
          db: SampleDB
  agent:
    logFile: /dev/stdout
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: sample-mongodb
  namespace: mas-test
data:
  password: c2FtcGxl

No pod is created due to missing ServiceAccount mongodb-kubernetes-appdb.

What did you expect?
ServiceAccount mongodb-kubernetes-appdb created and Pod starting up.

What happened instead?
StatefulSet keeps in progressing state and is never starting up.

Screenshots
kubectl describe sts sample-mongodb:

Name:               sample-mongodb
Namespace:          mas-test
CreationTimestamp:  Thu, 02 Oct 2025 08:27:09 +0200
Selector:           app=sample-mongodb-svc
Labels:             <none>
Annotations:        <none>
Replicas:           1 desired | 0 total
Update Strategy:    RollingUpdate
Pods Status:        0 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:           app=sample-mongodb-svc
  Service Account:  mongodb-kubernetes-appdb
  Init Containers:
   mongod-posthook:
    Image:      quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.9
    Port:       <none>
    Host Port:  <none>
    Command:
      cp
      version-upgrade-hook
      /hooks/version-upgrade
    Limits:
      cpu:     1
      memory:  512Mi
    Requests:
      cpu:        100m
      memory:     256Mi
    Environment:  <none>
    Mounts:
      /hooks from hooks (rw)
   mongodb-agent-readinessprobe:
    Image:      quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.22
    Port:       <none>
    Host Port:  <none>
    Command:
      cp
      /probes/readinessprobe
      /opt/scripts/readinessprobe
    Limits:
      cpu:     1
      memory:  512Mi
    Requests:
      cpu:        100m
      memory:     128Mi
    Environment:  <none>
    Mounts:
      /opt/scripts from agent-scripts (rw)
  Containers:
   mongod:
    Image:      quay.io/mongodb/mongodb-community-server:7.0.24-ubi9
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/sh
      -c
      
      if [ -e "/hooks/version-upgrade" ]; then
        #run post-start hook to handle version changes (if exists)
          /hooks/version-upgrade
      fi
      
      # wait for config and keyfile to be created by the agent
      echo "Waiting for config and keyfile files to be created by the agent..."
      while ! [ -f /data/automation-mongod.conf -a -f /var/lib/mongodb-mms-automation/authentication/keyfile ]; do
        sleep 3;
        echo "Waiting..."
      done
      
      # sleep is important after agent issues shutdown command
      # k8s restarts the mongod container too quickly for the agent to realize mongod is down
      echo "Sleeping for 15s..."
      sleep 15
      
      # start mongod with this configuration
      echo "Starting mongod..."
      exec mongod -f /data/automation-mongod.conf
      
    Args:
      
    Limits:
      cpu:     1
      memory:  512Mi
    Requests:
      cpu:     100m
      memory:  256Mi
    Environment:
      AGENT_STATUS_FILEPATH:  /healthstatus/agent-health-status.json
    Mounts:
      /data from data-volume (rw)
      /healthstatus from healthstatus (rw)
      /hooks from hooks (rw)
      /tmp from tmp (rw)
      /var/lib/mongodb-mms-automation/authentication from sample-mongodb-keyfile (rw)
      /var/log/mongodb-mms-automation from logs-volume (rw)
   mongodb-agent:
    Image:      quay.io/mongodb/mongodb-agent:108.0.2.8729-1
    Port:       <none>
    Host Port:  <none>
    Command:
      /bin/bash
      -c
      current_uid=$(id -u)
      declare -r current_uid
      if ! grep -q "${current_uid}" /etc/passwd ; then
      sed -e "s/^mongodb:/builder:/" /etc/passwd > /tmp/passwd
      echo "mongodb:x:$(id -u):$(id -g):,,,:/:/bin/bash" >> /tmp/passwd
      export NSS_WRAPPER_PASSWD=/tmp/passwd
      export LD_PRELOAD=libnss_wrapper.so
      export NSS_WRAPPER_GROUP=/etc/group
      fi
      agent/mongodb-agent -healthCheckFilePath=/var/log/mongodb-mms-automation/healthstatus/agent-health-status.json -serveStatusPort=5000 -cluster=/var/lib/automation/config/cluster-config.json -skipMongoStart -noDaemonize -useLocalMongoDbTools -logLevel INFO
    Limits:
      cpu:     1
      memory:  512Mi
    Requests:
      cpu:      100m
      memory:   128Mi
    Readiness:  exec [/opt/scripts/readinessprobe] delay=5s timeout=1s period=10s #success=1 #failure=40
    Environment:
      AGENT_STATUS_FILEPATH:  /var/log/mongodb-mms-automation/healthstatus/agent-health-status.json
      AUTOMATION_CONFIG_MAP:  sample-mongodb-config
      HEADLESS_AGENT:         true
      POD_NAMESPACE:           (v1:metadata.namespace)
    Mounts:
      /data from data-volume (rw)
      /opt/scripts from agent-scripts (rw)
      /tmp from tmp (rw)
      /var/lib/automation/config from automation-config (ro)
      /var/lib/mongodb-mms-automation/authentication from sample-mongodb-keyfile (rw)
      /var/log/mongodb-mms-automation from logs-volume (rw)
      /var/log/mongodb-mms-automation/healthstatus from healthstatus (rw)
  Volumes:
   agent-scripts:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   automation-config:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  sample-mongodb-config
    Optional:    false
   healthstatus:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   hooks:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   sample-mongodb-keyfile:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
   tmp:
    Type:          EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:        
    SizeLimit:     <unset>
  Node-Selectors:  <none>
  Tolerations:     <none>
Volume Claims:
  Name:          data-volume
  StorageClass:  
  Labels:        <none>
  Annotations:   <none>
  Capacity:      1Gi
  Access Modes:  [ReadWriteOnce]
  Name:          logs-volume
  StorageClass:  
  Labels:        <none>
  Annotations:   <none>
  Capacity:      0
  Access Modes:  [ReadWriteOnce]
Events:
  Type     Reason        Age                  From                    Message
  ----     ------        ----                 ----                    -------
  Warning  FailedCreate  22s (x15 over 104s)  statefulset-controller  create Pod sample-mongodb-0 in StatefulSet sample-mongodb failed error: pods "sample-mongodb-0" is forbidden: error looking up service account mas-test/mongodb-kubernetes-appdb: serviceaccount "mongodb-kubernetes-appdb" not found

Operator Information

  • Operator Version: 1.4.0
  • MongoDB Image used: quay.io/mongodb/mongodb-community-server:7.0.24-ubi9 (same with -ubi8)

Kubernetes Cluster Information

  • Distribution: RKE2
  • Version: 1.32.9
  • Image Registry location (quay, or an internal registry): quay

Additional context
Operator was deployed with Helm Chart mongodb/mongodb-kubernetes using following values:

operator:
  replicas: 1
  mdbDefaultArchitecture: static
  managedSecurityContext: false
  watchNamespace: "*"

  vaultSecretBackend:
    enabled: false

  telemetry:
    enabled: false
    collection:
      frequency: 720h
    send:
      frequency: 720h

registry:
  pullPolicy: IfNotPresent

community:
  mongodb:
    imageType: ubi9
  resource:
    tls:
      enabled: false

Due to enforced restricted security policy i had to patch the operator with

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-kubernetes-operator
  namespace: mongodb-operator
spec:
  template:
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 2000
        runAsGroup: 2000
        fsGroup: 2000
        fsGroupChangePolicy: "OnRootMismatch"
        seccompProfile:
          type: "RuntimeDefault"
      volumes:
      - name: tmp
        emptyDir:
          medium: Memory
      containers:
        - name: mongodb-kubernetes-operator
          securityContext:
            privileged: false
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop:
              - ALL
          volumeMounts:
          - name: tmp
            mountPath: /tmp

If possible, please include:

  • The operator logs

operator.log

  • Below we assume that your replicaset database pods are named mongo-<>. For instance:
❯ k get pods
NAME      READY   STATUS    RESTARTS   AGE
                                                                                     
❯ k get mdbc
NAME    PHASE     VERSION
NAMESPACE   NAME             PHASE     VERSION
mas-test    sample-mongodb   Pending   

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions