Mencipta utiliti untuk menjana 100 koleksi MongoDB, setiap satu diisi dengan 1 juta dokumen rawak, dan menggunakannya pada Kubernetes melibatkan beberapa langkah. Panduan ini berjalan melalui proses, daripada menyediakan persekitaran Kubernetes kepada menjana koleksi dan mengatur kerja dalam ruang nama khusus.
Pastikan anda mempunyai gugusan Kubernetes (seperti GKE, EKS, AKS atau Minikube) dan konfigurasikan kubectl untuk menyambung kepadanya.
Untuk memastikan penggunaan ini terpencil, buat ruang nama yang dipanggil my-lab:
kubectl create namespace my-lab kubectl get ns my-lab
Buat fail mongo-pv.yaml untuk menentukan volum berterusan untuk data MongoDB:
apiVersion: v1 kind: PersistentVolume metadata: name: mongo-pv namespace: my-lab spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /data/mongo
Gunakan PV:
kubectl apply -f mongo-pv.yaml
Tentukan tuntutan volum berterusan dalam mongo-pvc.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongo-pvc namespace: my-lab spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
Gunakan PVC:
kubectl apply -f mongo-pvc.yaml
Tentukan penggunaan dan perkhidmatan MongoDB dalam 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
Gunakan penggunaan:
kubectl apply -f mongo-deployment.yaml
Sahkan pengerahan MongoDB dengan menyambung kepadanya:
kubectl exec -it <mongo-pod-name> -n my-lab -- mongosh -u root -p password
Skalakan ke bawah dan kemudian sandarkan penggunaan MongoDB untuk memastikan data berterusan:
kubectl scale deployment mongo --replicas=0 -n my-lab kubectl scale deployment mongo --replicas=1 -n my-lab
Menggunakan Python, tentukan skrip untuk mencipta koleksi dan isikannya dengan dokumen rawak:
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()
Buat fail Docker untuk menyimpan skrip Python:
FROM python:3.9-slim WORKDIR /app COPY mongo_populator.py . RUN pip install pymongo CMD ["python", "mongo_populator.py"]
Bina dan tolak imej ke daftar kontena:
docker build -t <your-docker-repo>/mongo-populator:latest . docker push <your-docker-repo>/mongo-populator:latest
Tentukan kerja dalam mongo-populator-job.yaml untuk menjalankan skrip penjanaan koleksi:
apiVersion: batch/v1 kind: Job metadata: name: mongo-populator namespace: my-lab spec: template: spec: containers: - name: mongo-populator image: <your-docker-repo>/mongo-populator:latest env: - name: MONGO_URI value: "mongodb://root:password@mongo:27017/" restartPolicy: Never backoffLimit: 4
Mohon kerja:
kubectl apply -f mongo-populator-job.yaml
Selepas kerja selesai, sambung ke MongoDB untuk memeriksa data:
kubectl exec -it <mongo-pod-name> -n my-lab -- mongosh -u root -p password
Dalam 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"); });
Setiap koleksi harus mengandungi 1 juta dokumen, mengesahkan bahawa kerja penjanaan data berjaya.
Atas ialah kandungan terperinci Menggunakan Penjana Koleksi MongoDB pada Kubernetes. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!