Operator deployment on OpenShift via helm

Description:

I am trying to install Percona Operator for MongoDB on a air-gapped OpenShift cluster. I cannot use the OperatorHub installation method unfortunately, so I fallback to installing with the helm chart.

The problem is that the operator Pod fails to start with this warning event:

Warning  Failed          17s               kubelet            Error: container create failed: time="2026-01-19T09:41:41Z" level=error msg="runc create failed: unable to start container process: exec: \\"percona-server-mongodb-operator\\": executable file not found in $PATH"

Further debug with a privileged container shows that in fact the /usr/local/bin directory seems to be empty. For that reason I don’t know whether this is an issue with the operator, OpenShift, or the image itself.

Steps to Reproduce:

helm install psmdb-operator -n psmdb-operator percona/psmdb-operator

Version:

Operator version: 1.21.1
Chart version: 1.21.2

Logs:

No logs other than the warning event above

Expected Result:

The operator installs successfully

Actual Result:

The container fails to start

Can you share kubectl describe pod <operator>? and also more logs from the pod?

There are no logs, as the container fails to start

Name:             psmdb-operator-6f995c5687-8ztzh
Namespace:        fi601-mcx-percona
Priority:         0
Service Account:  psmdb-operator
Node:             appworker0.fi-601.tre.nsn-rdnet.net/100.103.193.28
Start Time:       Mon, 19 Jan 2026 11:49:05 +0100
Labels:           app.kubernetes.io/instance=psmdb-operator
                  app.kubernetes.io/name=psmdb-operator
                  pod-template-hash=6f995c5687
Annotations:      k8s.ovn.org/pod-networks:
                    {"default":{"ip_addresses":["10.128.12.215/23"],"mac_address":"0a:58:0a:80:0c:d7","gateway_ips":["10.128.12.1"],"routes":[{"dest":"10.128....
                  k8s.v1.cni.cncf.io/network-status:
                    [{
                        "name": "ovn-kubernetes",
                        "interface": "eth0",
                        "ips": [
                            "10.128.12.215"
                        ],
                        "mac": "0a:58:0a:80:0c:d7",
                        "default": true,
                        "dns": {}
                    }]
                  openshift.io/scc: anyuid
Status:           Pending
IP:               10.128.12.215
IPs:
  IP:           10.128.12.215
Controlled By:  ReplicaSet/psmdb-operator-6f995c5687
Containers:
  psmdb-operator:
    Container ID:
    Image:         ncd-harbor.fi-601.tre.nsn-rdnet.net/mcx/percona/percona-server-mongodb-operator:1.21.1
    Image ID:
    Ports:         8080/TCP (metrics), 8081/TCP (health)
    Host Ports:    0/TCP (metrics), 0/TCP (health)
    Command:
      percona-server-mongodb-operator
    State:          Waiting
      Reason:       CreateContainerError
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  128Mi
    Requests:
      cpu:      100m
      memory:   128Mi
    Liveness:   http-get http://:health/healthz delay=0s timeout=1s period=10s #success=1 #failure=3
    Readiness:  http-get http://:health/healthz delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:
      LOG_STRUCTURED:             false
      LOG_LEVEL:                  INFO
      WATCH_NAMESPACE:            fi601-mcx-percona
      POD_NAME:                   psmdb-operator-6f995c5687-8ztzh (v1:metadata.name)
      OPERATOR_NAME:              percona-server-mongodb-operator
      RESYNC_PERIOD:              5s
      DISABLE_TELEMETRY:          true
      MAX_CONCURRENT_RECONCILES:  1
      PATH:                       /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-597kn (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True
  Initialized                 True
  Ready                       False
  ContainersReady             False
  PodScheduled                True
Volumes:
  kube-api-access-597kn:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
    ConfigMapName:           openshift-service-ca.crt
    Optional:                false
QoS Class:                   Guaranteed
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 60s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 60s
Events:
  Type     Reason  Age                     From     Message
  ----     ------  ----                    ----     -------
  Warning  Failed  8m20s (x5348 over 20h)  kubelet  (combined from similar events): Error: container create failed: time="2026-01-20T07:24:06Z" level=error msg="runc create failed: unable to start container process: exec: \"percona-server-mongodb-operator\": executable file not found in $PATH"
  Normal   Pulled  3m14s (x5379 over 20h)  kubelet  Container image "ncd-harbor.fi-601.tre.nsn-rdnet.net/mcx/percona/percona-server-mongodb-operator:1.21.1" already present on machine

Manually running the a Pod with the same image and overriding the command with sleep infinity allows me to exec into it, and doing ls /usr/local/bin shows that it is in fact empty. I don’t know how it is possible that the binary goes missing like that.

It turns out that the image got corrupted somehow when it was uploaded into the internal registry. Updating it with the correct one fixed the issue