استقرار یک ژنراتور MongoDB Collection در Kubernetes

Summarize this content to 400 words in Persian Lang
ایجاد یک ابزار برای تولید 100 مجموعه MongoDB، که هر کدام با 1 میلیون سند تصادفی پر شده است، و استقرار آن در Kubernetes شامل چندین مرحله است. این راهنما از طریق راهاندازی یک محیط Kubernetes گرفته تا تولید مجموعهها و استقرار کار در یک فضای نام اختصاصی را طی میکند.
1. تنظیم محیط Kubernetes
مطمئن شوید که یک خوشه Kubernetes (مانند GKE، EKS، AKS یا Minikube) دارید و kubectl را برای اتصال به آن پیکربندی کنید.
2. یک فضای نام اختصاصی ایجاد کنید
برای ایزوله نگه داشتن این استقرار، فضای نامی به نام my-lab ایجاد کنید:
kubectl create namespace my-lab
kubectl get ns my-lab
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
3. MongoDB را در Kubernetes مستقر کنید
ایجاد یک حجم پایدار (PV)
یک فایل mongo-pv.yaml ایجاد کنید تا یک حجم ثابت برای داده های MongoDB تعریف کنید:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
namespace: my-lab
spec:
capacity:
storage: 10Gi
accessModes:
– ReadWriteOnce
hostPath:
path: /data/mongo
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
PV را اعمال کنید:
kubectl apply -f mongo-pv.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ایجاد یک ادعای حجم پایدار (PVC)
یک ادعای حجم دائمی را در mongo-pvc.yaml تعریف کنید:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
namespace: my-lab
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 10Gi
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
PVC را اعمال کنید:
kubectl apply -f mongo-pvc.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
یک استقرار MongoDB ایجاد کنید
استقرار و سرویس MongoDB را در mongo-deployment.yaml تعریف کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
namespace: my-lab
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
– name: mongo
image: mongo:latest
ports:
– containerPort: 27017
env:
– name: MONGO_INITDB_ROOT_USERNAME
value: “root”
– name: MONGO_INITDB_ROOT_PASSWORD
value: “password”
volumeMounts:
– name: mongo-storage
mountPath: /data/db
volumes:
– name: mongo-storage
persistentVolumeClaim:
claimName: mongo-pvc
—
apiVersion: v1
kind: Service
metadata:
name: mongo
namespace: my-lab
spec:
type: ClusterIP
ports:
– port: 27017
targetPort: 27017
selector:
app: mongo
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
استقرار را اعمال کنید:
kubectl apply -f mongo-deployment.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
4. به MongoDB متصل شوید
با اتصال به آن، استقرار MongoDB را تأیید کنید:
kubectl exec -it -n my-lab — mongosh -u root -p password
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
5. بررسی پایداری
برای اطمینان از پایداری داده ها، استقرار MongoDB را کوچک کنید و سپس از آن نسخه پشتیبان تهیه کنید:
kubectl scale deployment mongo –replicas=0 -n my-lab
kubectl scale deployment mongo –replicas=1 -n my-lab
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
6. یک ابزار Python برای Collection Generation ایجاد کنید
با استفاده از پایتون، یک اسکریپت برای ایجاد مجموعه ها و پر کردن آنها با اسناد تصادفی تعریف کنید:
import random
import string
import pymongo
from pymongo import MongoClient
def random_string(length=10):
return ”.join(random.choices(string.ascii_letters + string.digits, k=length))
def create_collections_and_populate(db_name=”mydatabase”, collections_count=100, documents_per_collection=1_000_000):
client = MongoClient(‘mongodb://root:password@mongo:27017/’)
db = client[db_name]
for i in range(collections_count):
collection_name = f’collection_{i+1}’
collection = db[collection_name]
print(f’Creating collection: {collection_name}’)
bulk_data = [{‘name’: random_string(), ‘value’: random.randint(1, 100)} for _ in range(documents_per_collection)]
collection.insert_many(bulk_data)
print(f’Inserted {documents_per_collection} documents into {collection_name}’)
if __name__ == “__main__”:
create_collections_and_populate()
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
7. ابزار Python را Docker کنید
یک Dockerfile برای محفظه کردن اسکریپت پایتون ایجاد کنید:
FROM python:3.9-slim
WORKDIR /app
COPY mongo_populator.py .
RUN pip install pymongo
CMD [“python”, “mongo_populator.py”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تصویر را بسازید و به یک رجیستری کانتینر فشار دهید:
docker build -t /mongo-populator:latest .
docker push /mongo-populator:latest
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
8. یک شغل Kubernetes ایجاد کنید
برای اجرای اسکریپت تولید مجموعه، یک کار در mongo-populator-job.yaml تعریف کنید:
apiVersion: batch/v1
kind: Job
metadata:
name: mongo-populator
namespace: my-lab
spec:
template:
spec:
containers:
– name: mongo-populator
image: /mongo-populator:latest
env:
– name: MONGO_URI
value: “mongodb://root:password@mongo:27017/”
restartPolicy: Never
backoffLimit: 4
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
درخواست شغل:
kubectl apply -f mongo-populator-job.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
9. بررسی نسل مجموعه
پس از اتمام کار، برای بررسی داده ها به MongoDB متصل شوید:
kubectl exec -it -n my-lab — mongosh -u root -p password
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در MongoDB:
use mydatabase
show collections
db.collection_9.find().limit(5).pretty()
db.getCollectionNames().forEach(function(collection) {
var count = db[collection].countDocuments();
print(collection + “: ” + count + ” documents”);
});
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هر مجموعه باید حاوی 1 میلیون سند باشد که تأیید کننده موفقیت آمیز بودن کار تولید داده باشد.
ایجاد یک ابزار برای تولید 100 مجموعه MongoDB، که هر کدام با 1 میلیون سند تصادفی پر شده است، و استقرار آن در Kubernetes شامل چندین مرحله است. این راهنما از طریق راهاندازی یک محیط Kubernetes گرفته تا تولید مجموعهها و استقرار کار در یک فضای نام اختصاصی را طی میکند.
1. تنظیم محیط Kubernetes
مطمئن شوید که یک خوشه Kubernetes (مانند GKE، EKS، AKS یا Minikube) دارید و kubectl را برای اتصال به آن پیکربندی کنید.
2. یک فضای نام اختصاصی ایجاد کنید
برای ایزوله نگه داشتن این استقرار، فضای نامی به نام my-lab ایجاد کنید:
kubectl create namespace my-lab
kubectl get ns my-lab
3. MongoDB را در Kubernetes مستقر کنید
ایجاد یک حجم پایدار (PV)
یک فایل mongo-pv.yaml ایجاد کنید تا یک حجم ثابت برای داده های MongoDB تعریف کنید:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
namespace: my-lab
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/mongo
PV را اعمال کنید:
kubectl apply -f mongo-pv.yaml
ایجاد یک ادعای حجم پایدار (PVC)
یک ادعای حجم دائمی را در mongo-pvc.yaml تعریف کنید:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
namespace: my-lab
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
PVC را اعمال کنید:
kubectl apply -f mongo-pvc.yaml
یک استقرار MongoDB ایجاد کنید
استقرار و سرویس MongoDB را در mongo-deployment.yaml تعریف کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
namespace: my-lab
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo:latest
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: "root"
- name: MONGO_INITDB_ROOT_PASSWORD
value: "password"
volumeMounts:
- name: mongo-storage
mountPath: /data/db
volumes:
- name: mongo-storage
persistentVolumeClaim:
claimName: mongo-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mongo
namespace: my-lab
spec:
type: ClusterIP
ports:
- port: 27017
targetPort: 27017
selector:
app: mongo
استقرار را اعمال کنید:
kubectl apply -f mongo-deployment.yaml
4. به MongoDB متصل شوید
با اتصال به آن، استقرار MongoDB را تأیید کنید:
kubectl exec -it -n my-lab -- mongosh -u root -p password
5. بررسی پایداری
برای اطمینان از پایداری داده ها، استقرار MongoDB را کوچک کنید و سپس از آن نسخه پشتیبان تهیه کنید:
kubectl scale deployment mongo --replicas=0 -n my-lab
kubectl scale deployment mongo --replicas=1 -n my-lab
6. یک ابزار Python برای Collection Generation ایجاد کنید
با استفاده از پایتون، یک اسکریپت برای ایجاد مجموعه ها و پر کردن آنها با اسناد تصادفی تعریف کنید:
import random
import string
import pymongo
from pymongo import MongoClient
def random_string(length=10):
return ''.join(random.choices(string.ascii_letters + string.digits, k=length))
def create_collections_and_populate(db_name="mydatabase", collections_count=100, documents_per_collection=1_000_000):
client = MongoClient('mongodb://root:password@mongo:27017/')
db = client[db_name]
for i in range(collections_count):
collection_name = f'collection_{i+1}'
collection = db[collection_name]
print(f'Creating collection: {collection_name}')
bulk_data = [{'name': random_string(), 'value': random.randint(1, 100)} for _ in range(documents_per_collection)]
collection.insert_many(bulk_data)
print(f'Inserted {documents_per_collection} documents into {collection_name}')
if __name__ == "__main__":
create_collections_and_populate()
7. ابزار Python را Docker کنید
یک Dockerfile برای محفظه کردن اسکریپت پایتون ایجاد کنید:
FROM python:3.9-slim
WORKDIR /app
COPY mongo_populator.py .
RUN pip install pymongo
CMD ["python", "mongo_populator.py"]
تصویر را بسازید و به یک رجیستری کانتینر فشار دهید:
docker build -t /mongo-populator:latest .
docker push /mongo-populator:latest
8. یک شغل Kubernetes ایجاد کنید
برای اجرای اسکریپت تولید مجموعه، یک کار در mongo-populator-job.yaml تعریف کنید:
apiVersion: batch/v1
kind: Job
metadata:
name: mongo-populator
namespace: my-lab
spec:
template:
spec:
containers:
- name: mongo-populator
image: /mongo-populator:latest
env:
- name: MONGO_URI
value: "mongodb://root:password@mongo:27017/"
restartPolicy: Never
backoffLimit: 4
درخواست شغل:
kubectl apply -f mongo-populator-job.yaml
9. بررسی نسل مجموعه
پس از اتمام کار، برای بررسی داده ها به MongoDB متصل شوید:
kubectl exec -it -n my-lab -- mongosh -u root -p password
در MongoDB:
use mydatabase
show collections
db.collection_9.find().limit(5).pretty()
db.getCollectionNames().forEach(function(collection) {
var count = db[collection].countDocuments();
print(collection + ": " + count + " documents");
});
هر مجموعه باید حاوی 1 میلیون سند باشد که تأیید کننده موفقیت آمیز بودن کار تولید داده باشد.