Mangodb Different Expose

तुम्ही MongoDB क्लस्टर प्रोडक्शनसारख्या सेटअपमध्ये वापरणार असाल, तर खालील गोष्टींचा विचार करणे अत्यंत उपयुक्त ठरते:

विचारलेल्या गोष्टींचं स्पष्टीकरण:

1. MongoDB वेगळ्या प्रकारे एक्स्पोज करणे:

NodePort:

Kubernetes Node च्या IP व NodePort द्वारे MongoDB access करता येईल.

Ingress:

Ingress सामान्यतः HTTP/HTTPS traffic साठी वापरला जातो, MongoDB साठी योग्य नाही.

External IP (LoadBalancer):

Cloud environment (जसे GKE, EKS, AKS) मध्ये type: LoadBalancer वापरून बाहेरून MongoDB access करता येतो.

2. ReplicaSet:

Production-grade MongoDB setup मध्ये ReplicaSet खूप महत्त्वाचा आहे. यामध्ये:

  • Primary node (write operations साठी)
  • Secondary nodes (read replicas किंवा failover साठी)
    हे तीन pods मध्ये सेटअप करता येते.

3. Authentication:

Secure MongoDB साठी MONGO_INITDB_ROOT_USERNAME आणि MONGO_INITDB_ROOT_PASSWORD वापरले जातात. हे Secrets स्वरूपात साठवले जाणे चांगला security practice आहे.

4. Init script:

MongoDB कंटेनर स्टार्ट होताना एक predefined JS स्क्रिप्ट चालवायची असल्यास, initdb.d फोल्डरमध्ये .js किंवा .sh फाईल ठेवून ती रन केली जाऊ शकते.

✅ उदाहरण: MongoDB with NodePort, Secrets, आणि Init Script

🔐 1. Secret तयार करा

apiVersion: v1

kind: Secret

metadata:

  name: mongodb-secret

type: Opaque

data:

  mongo-root-username: bW9uZ29hZG1pbg==   # base64 encoded ‘mongoadmin’

  mongo-root-password: bW9uZ29wYXNz       # base64 encoded ‘mongopass’

📄 2. ConfigMap (Init JS Script – collection create करतो)

apiVersion: v1

kind: ConfigMap

metadata:

  name: mongodb-init-script

data:

  init.js: |

    db = db.getSiblingDB(‘testdb’);

    db.createCollection(‘testcollection’);

    db.testcollection.insert({ name: “Hello, MongoDB!” });

🧱 3. Deployment with Volume for Init Script

apiVersion: apps/v1

kind: Deployment

metadata:

  name: mongodb

spec:

  replicas: 1

  selector:

    matchLabels:

      app: mongodb

  template:

    metadata:

      labels:

        app: mongodb

    spec:

      containers:

      – name: mongodb

        image: mongo:5.0

        ports:

        – containerPort: 27017

        env:

        – name: MONGO_INITDB_ROOT_USERNAME

          valueFrom:

            secretKeyRef:

              name: mongodb-secret

              key: mongo-root-username

        – name: MONGO_INITDB_ROOT_PASSWORD

          valueFrom:

            secretKeyRef:

              name: mongodb-secret

              key: mongo-root-password

        volumeMounts:

        – name: init-script

          mountPath: /docker-entrypoint-initdb.d

        – name: mongo-data

          mountPath: /data/db

      volumes:

      – name: init-script

        configMap:

          name: mongodb-init-script

      – name: mongo-data

        persistentVolumeClaim:

          claimName: mongodb-pvc

🌐 4. NodePort Service

apiVersion: v1

kind: Service

metadata:

  name: mongodb

spec:

  selector:

    app: mongodb

  ports:

    – protocol: TCP

      port: 27017

      targetPort: 27017

      nodePort: 30017

  type: NodePort

📦 5. PVC

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mongodb-pvc

spec:

  accessModes:

    – ReadWriteOnce

  resources:

    requests:

      storage: 1Gi

🧪 Access Test:

kubectl get svc mongodb

Browser किंवा mongo client वापरून:

mongo <NodeIP>:30017 -u mongoadmin -p mongopass –authenticationDatabase admin