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

Menggunakan Penjana Koleksi MongoDB pada Kubernetes

Patricia Arquette
Lepaskan: 2024-11-03 03:54:02
asal
449 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

Gunakan PV:

kubectl apply -f mongo-pv.yaml
Salin selepas log masuk

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
Salin selepas log masuk

Gunakan PVC:

kubectl apply -f mongo-pvc.yaml
Salin selepas log masuk

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
Salin selepas log masuk

Gunakan penggunaan:

kubectl apply -f mongo-deployment.yaml
Salin selepas log masuk

4. Sambung ke MongoDB

Sahkan pengerahan MongoDB dengan menyambung kepadanya:

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

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
Salin selepas log masuk

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()
Salin selepas log masuk

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"]
Salin selepas log masuk

Bina dan tolak imej ke daftar kontena:

docker build -t <your-docker-repo>/mongo-populator:latest .
docker push <your-docker-repo>/mongo-populator:latest
Salin selepas log masuk

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
Salin selepas log masuk

Mohon kerja:

kubectl apply -f mongo-populator-job.yaml
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

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");
 });

Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan