skip to Main Content

I am learning about k8s and I am trying to make a deployment out of mongo db.
This are my yamls

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  labels:
    app: mongodb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef: 
              name: mongodb-secret
              key: mongo-root-username
        - name: MONGO_INITIDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef: 
              name: mongodb-secret
              key: mongo-root-password

Secrets

apiVersion: v1
kind: Secret
metadata:
  name: mongodb-secret
type: 0paque
data:
  mongo-root-username: dXNlcm5hbWU=
  mongo-root-password: cGFzc3dvcmQ=

As you can see the pod is in the CrashLoopBackOff state

kubectl get all
NAME                                     READY   STATUS             RESTARTS      AGE  
pod/mongodb-deployment-6ddd5fb89-h9rjz   0/1     ImagePullBackOff   0             7m25s
pod/mongodb-deployment-6ddd5fb89-wvz6p   0/1     ImagePullBackOff   0             7m25s
pod/mongodb-deployment-f7df49f67-2gp4x   0/1     CrashLoopBackOff   5 (43s ago)   3m54s
pod/nginx-deployment-78cc6468fb-22wz5    1/1     Running            0             49m
pod/nginx-deployment-78cc6468fb-6hxq8    1/1     Running            0             49m

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP   68m
service/nginx-service   ClusterIP   10.110.136.45   <none>        80/TCP    34m

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mongodb-deployment   0/2     1            0           7m25s
deployment.apps/nginx-deployment     2/2     2            2           49m

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/mongodb-deployment-6ddd5fb89   2         2         0       7m25s
replicaset.apps/mongodb-deployment-f7df49f67   1         1         0       3m54s
replicaset.apps/nginx-deployment-78cc6468fb    2         2         2       49m

And if I check the pod, it only it backed off. Not sure what is going on in there, surely it is a config issue, but yet again, I am new to k8s.

kubectl describe pod/mongodb-deployment-f7df49f67-2gp4x           
Name:         mongodb-deployment-f7df49f67-2gp4x
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
Start Time:   Thu, 06 Oct 2022 13:10:09 -0500
Labels:       app=mongodb
              pod-template-hash=f7df49f67
Annotations:  <none>
Status:       Running
IP:           172.17.0.7
IPs:
  IP:           172.17.0.7
Controlled By:  ReplicaSet/mongodb-deployment-f7df49f67
Containers:
  mongodb:
    Container ID:   docker://73f6707f1fc2b5ae690cf3518e35ab05d258a3f209b106c014310b0e38c05f00
    Image:          mongo
    Image ID:       docker-pullable://mongo@sha256:2ca8fb22c9522b49fd1f5490dee3e7026a4331b9f904d5acf10a9638c1d1539d
    Port:           27017/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Thu, 06 Oct 2022 13:11:47 -0500
      Finished:     Thu, 06 Oct 2022 13:11:47 -0500
    Ready:          False
    Restart Count:  4
    Environment:
      MONGO_INITDB_ROOT_USERNAME:   <set to the key 'mongo-root-username' in secret 'mongodb-secret'>  Optional: false
      MONGO_INITIDB_ROOT_PASSWORD:  <set to the key 'mongo-root-password' in secret 'mongodb-secret'>  Optional: false
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gpmw4 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  2m17s                default-scheduler  Successfully assigned default/mongodb-deployment-f7df49f67-2gp4x to minikube
  Normal   Pulled     2m13s                kubelet            Successfully pulled image "mongo" in 2.4540099s
  Normal   Pulled     2m11s                kubelet            Successfully pulled image "mongo" in 2.0397836s
  Normal   Pulled     113s                 kubelet            Successfully pulled image "mongo" in 2.5676941s
  Normal   Created    84s (x4 over 2m13s)  kubelet            Created container mongodb
  Normal   Started    84s (x4 over 2m13s)  kubelet            Started container mongodb
  Normal   Pulled     84s                  kubelet            Successfully pulled image "mongo" in 2.2913276s
  Warning  BackOff    53s (x7 over 2m10s)  kubelet            Back-off restarting failed container
  Normal   Pulling    42s (x5 over 2m16s)  kubelet            Pulling image "mongo"
  Normal   Pulled     39s                  kubelet            Successfully pulled image "mongo" in 2.3732048s

2

Answers


  1. If you look at the logs for the failing pod, you will see:

    $ k logs deploy/mongodb-deployment
    
    error: missing 'MONGO_INITDB_ROOT_USERNAME' or 'MONGO_INITDB_ROOT_PASSWORD'
           both must be specified for a user to be created
    

    This gives us an idea where we should look for the source of the problem. Taking a closer look at your manifests, we see that you have a typo in your Deployment.

    You have:

    - name: MONGO_INITIDB_ROOT_PASSWORD
        valueFrom:
            secretKeyRef: 
                name: mongodb-secret
                key: mongo-root-password
    

    There is an erroneous I in the variable name. You want:

    - name: MONGO_INITDB_ROOT_PASSWORD
        valueFrom:
            secretKeyRef: 
                name: mongodb-secret
                key: mongo-root-password
    
    Login or Signup to reply.
  2. adding in to the previous answer. It seems one more typo in the following:

    type: 0paque -> It should be capital O
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search