Full Secure YAML – Stateful set

आपल्याला  जर MongoDB साठी Secret + Volume (init script) एकत्र वापरून full secure YAML बनवायच आहे किंवा यांना Stateful Set मध्ये लागू करायचं आहे तर खालील प्रमाणे करू शकता.

📦 Full Secure MongoDB Setup using StatefulSet + Secret + Init Script

Secrets — credentials सुरक्षित ठेवण्यासाठी
Init script — database/collection initialize करण्यासाठी
Volumes + PVC — persistent storage साठी
StatefulSet — ReplicaSet किंवा stable pod identity साठी

या सर्वांना एकत्र YAML मध्ये configure करणार आहोत.

🔐 1. Secret for Credentials

apiVersion: v1

kind: Secret

metadata:

  name: mongodb-secret

type: Opaque

data:

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

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

📄 2. ConfigMap for Init Script

apiVersion: v1

kind: ConfigMap

metadata:

  name: mongodb-init-script

data:

  init.js: |

    db = db.getSiblingDB(‘appdb’);

    db.createCollection(‘users’);

    db.users.insert({ username: “admin”, email: “admin@example.com” });

📂 3. Headless Service (StatefulSet साठी आवश्यक)

apiVersion: v1

kind: Service

metadata:

  name: mongodb

spec:

  ports:

    – port: 27017

  clusterIP: None

  selector:

    app: mongodb

🧱 4. StatefulSet with VolumeMounts + Secret + Init Script

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: mongodb

spec:

  selector:

    matchLabels:

      app: mongodb

  serviceName: “mongodb”

  replicas: 1

  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: mongo-persistent-storage

          mountPath: /data/db

        – name: mongo-init-script

          mountPath: /docker-entrypoint-initdb.d

volumes:

      – name: mongo-init-script

        configMap:

          name: mongodb-init-script

  volumeClaimTemplates:

  – metadata:

      name: mongo-persistent-storage

    spec:

      accessModes: [“ReadWriteOnce”]

      resources:

        requests:

          storage: 1Gi

5. Optional NodePort Service (External Access साठी)

apiVersion: v1

kind: Service

metadata:

  name: mongodb-external

spec:

  type: NodePort

  selector:

    app: mongodb

  ports:

    – port: 27017

      targetPort: 27017

      nodePort: 30017

✅ तांत्रिक फायदे:

  • StatefulSet: प्रत्येक MongoDB pod ला unique identity आणि stable storage.
  • Secrets: credentials Git-safe.
  • ConfigMap (init.js): Collection initialization.
  • Headless service: DNS द्वारे pod-to-pod communication.
  • NodePort (optional): क्लस्टरच्या बाहेरून MongoDB access करण्यासाठी.

🧪 वापरण्याची पद्धत:

kubectl apply -f mongodb-secret.yaml

kubectl apply -f mongodb-init-configmap.yaml

kubectl apply -f mongodb-statefulset.yaml

kubectl apply -f mongodb-nodeport.yaml  # Optional