Rumah >pembangunan bahagian belakang >Tutorial Python >Menggunakan Penjana Koleksi MongoDB pada Kubernetes

Menggunakan Penjana Koleksi MongoDB pada Kubernetes

Patricia Arquette
Patricia Arquetteasal
2024-11-03 03:54:02431semak imbas

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.

Deploying a MongoDB Collection Generator on Kubernetes

1. Sediakan Persekitaran Kubernetes Anda

Pastikan anda mempunyai gugusan Kubernetes (seperti GKE, EKS, AKS atau Minikube) dan konfigurasikan kubectl untuk menyambung kepadanya.

2. Cipta Ruang Nama Terdedikasi

Untuk memastikan penggunaan ini terpencil, buat ruang nama yang dipanggil my-lab:

kubectl create namespace my-lab
kubectl get ns my-lab

3. Sebarkan MongoDB pada Kubernetes

Cipta Kelantangan Berterusan (PV)

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

Buat Tuntutan Kelantangan Berterusan (PVC)

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

Buat Penyerahan MongoDB

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

4. Sambung ke MongoDB

Sahkan pengerahan MongoDB dengan menyambung kepadanya:

kubectl exec -it <mongo-pod-name> -n my-lab -- mongosh -u root -p password

5. Sahkan Kegigihan

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

6. Cipta Utiliti Python untuk Penjanaan Koleksi

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()

7. Dockerize Utiliti Python

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

8. Buat Kerja Kubernetes

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

9. Sahkan Penjanaan Koleksi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn