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
