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
