Tolerantie van MongoDB-cluster valideren in Azure Kubernetes Service (AKS)
Nadat u het MongoDB-cluster op AKS hebt geïmplementeerd met behulp van de Percona-operator voor MongoDB en installeert mongo-express
op uw cluster om te communiceren met MongoDB, test u de tolerantie van het MongoDB-cluster in verschillende scenario's. Deze zelfstudie bouwt voort op de mongoDB-clusterimplementatie en mongoDB-clustervalidatie die in de vorige handleidingen worden behandeld.
Een voorbeeldclienttoepassing bouwen en uitvoeren voor MongoDB
De volgende stappen laten zien hoe u een voorbeeldclienttoepassing voor MongoDB bouwt en de Docker-installatiekopieën van de toepassing pusht naar een Azure Container Registry. De voorbeeldclienttoepassing maakt gebruik van het locust load testing framework om een workload op het MongoDB-cluster te simuleren. Deze toepassing voegt documenten in het MongoDB-cluster in en meet de tijd die nodig is voor elke documentinvoegbewerking. De toepassing maakt gebruik van Faker
bibliotheek voor het genereren van willekeurige namen en afdelingen voor de werknemersdocumenten. U kunt deze klasse uitbreiden om complexere bewerkingen te implementeren.
Maak een nieuwe map met behulp van de volgende opdracht:
mkdir mongodb-locust-client cd mongodb-locust-client
Maak
requirements.txt
een bestand in demongodb-locust-client
map met behulp van de volgende opdracht:cat > requirements.txt <<EOF locust pymongo Faker EOF
Maak
locustfile.py
in demongodb-locust-client
map met behulp van de volgende opdracht:cat > locustfile.py <<EOF import os import random import logging import time import uuid from locust import User, task, constant_throughput, events, tag, between from pymongo import MongoClient from pymongo.errors import ServerSelectionTimeoutError from pymongo.errors import ConnectionFailure from faker import Faker # Set up Faker for generating random names and departments fake = Faker() # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # List of department names for random selection department_keywords = [ "Accounting", "Marketing", "Human Resources", "Sales", "Research and Development", "IT", "Customer Support", "Legal", "Operations", "Finance", "Product Management", "Public Relations", "Engineering", "Data Science", "Business Development" ] class MongoDBLocust(User): # Set constant throughput (requests per second) wait_time = constant_throughput(20) # MongoDB connection details (make sure these are set correctly in your environment) host = "${MY_CLUSTER_NAME}-mongodb-mongos.mongodb.svc.cluster.local" port = "27017" username = os.getenv('MONGODB_USERNAME') password = os.getenv('MONGODB_PASSWORD') def __init__(self, *args, **kwargs): super(MongoDBLocust, self).__init__(*args, **kwargs) self.client = MongoDBClient(self.username, self.password) # Initialize MongoDB client def on_stop(self): """Called when the simulated user stops, to close the MongoDB client.""" self.client.close() @task @tag("insert") def insert_document(self): """Task to insert a document into MongoDB.""" self.client.insert_document("insert_document") class MongoDBClient(object): """MongoDB client for managing database interactions.""" def __init__(self, username, password): # Set MongoDB connection parameters self.host = "${MY_CLUSTER_NAME}-mongodb-mongos.mongodb.svc.cluster.local" self.port = "27017" self.username = username self.password = password self.client = MongoClient(f"mongodb://{self.username}:{self.password}@{self.host}:{self.port}/") self.db = self.client['employeeDB'] self.collection = self.db['employees'] self.document_id = None # Placeholder for the inserted document ID def insert_document(self, task_name, command='INSERT'): """Insert a document into MongoDB and measure the time.""" employee_id = str(uuid.uuid4()) start_time = time.time() logger.info(f"{employee_id} - Start Time -> start_time: {start_time}") try: # Create a new fake employee document new_document = { 'Id': str(uuid.uuid4()), 'EmployeeId': employee_id, 'FirstName': fake.first_name(), 'LastName': fake.last_name(), 'Department': random.choice(department_keywords) } # Insert the document result = self.collection.insert_one(new_document) self.document_id = str(result.inserted_id) # Store the document ID for future reads # Measure the time taken for the MongoDB operation (in milliseconds) total_time = (time.time() - start_time) * 1000 # Convert to ms logger.info(f"{employee_id} - Task - {task_name} -> total_time: {total_time} ms") # Fire the event to report the request events.request.fire( request_type=command, name=task_name, response_time=total_time, response_length=len(str(result)) # Length of the result returned by the operation ) except Exception as e: total_time = (time.time() - start_time) * 1000 # Time taken with error logger.error(f"{employee_id} - Error in {task_name}: {e} -> total_time: {total_time} ms") events.request.fire( request_type=command, name=task_name, response_time=total_time, response_length=0, # No response in case of error exception=e ) logger.info(f"{employee_id} - End Time -> end time: {time.time()}") def close(self): """Close the MongoDB connection.""" self.client.close() EOF
Maak een Dockerfile in de
mongodb-locust-client
map met behulp van de volgende opdracht. Dockerfile maakt een Docker-installatiekopieën voor de voorbeeldclienttoepassing, gebruikt depython:3.10-slim-bullseye
installatiekopieën als basisinstallatiekopieën en installeert de vereiste afhankelijkheden voor de toepassing.cat > Dockerfile <<EOF # Use a slim Python image as the base FROM python:3.10-slim-bullseye # Install wget and gnupg RUN apt-get update && apt-get install -y wget gnupg # Add MongoDB GPG Key and repository RUN wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | tee /etc/apt/trusted.gpg.d/mongodb.asc && \ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list # Update APT sources and install MongoDB Shell (mongosh) RUN apt-get update && apt-get install -y mongodb-mongosh # Copy your application files COPY requirements.txt ./ COPY locustfile.py ./ # Install Python dependencies RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt EOF
Bouw de Docker-installatiekopieën voor de voorbeeldclienttoepassing met behulp van de
az acr build
opdracht. Zorg ervoor dat u vervangt door$MY_ACR_REGISTRY
de naam van uw Azure Container Registry.az acr build --image mongodb-locust-client --registry $MY_ACR_REGISTRY .
Het MongoDB-cluster testen op AKS
MongoDB Locust-clientpod maken
In de volgende sectie maakt u een MongoDB Locust-clientpod in uw AKS-cluster. Deze pod maakt gebruik van de Docker-installatiekopie die u eerder hebt gemaakt om een workload op het MongoDB-cluster te simuleren. In de volgende specificatie wordt gebruikgemaakt van het wachtwoord en de gebruikersnaam van het externe geheim dat u in de vorige zelfstudie hebt gemaakt.
Maak de MongoDB Locust-clientpod met behulp van de
kubectl apply
opdracht.kubectl apply -n mongodb -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-locust-client labels: app: mongodb-locust-client spec: replicas: 1 selector: matchLabels: app: mongodb-locust-client template: metadata: labels: app: mongodb-locust-client spec: nodeSelector: kubernetes.azure.com/agentpool: "systempool" # Ensure pods are scheduled on the system node pool containers: - name: mongodb-locust-client image: $MY_ACR_REGISTRY.azurecr.io/mongodb-locust-client command: ["locust", "-f", "/locustfile.py", "--host=http://${MY_CLUSTER_NAME}-mongodb-mongos.mongodb.svc.cluster.local:27017/"] env: - name: MONGODB_USERNAME valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} # Name of your external secret key: MONGODB_DATABASE_ADMIN_USER # Key for the admin username - name: MONGODB_PASSWORD valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} # Name of your external secret key: MONGODB_DATABASE_ADMIN_PASSWORD # Key for the admin password EOF
Voorbeelduitvoer:
deployment.apps/mongodb-locust-client created
Haal de naam van de MongoDB-clientpod op met behulp van de
kubectl get pods
opdracht.kubectl get pods -n $AKS_MONGODB_NAMESPACE
Voorbeelduitvoer:
NAME READY STATUS RESTARTS AGE ... // Additional pods mongodb-locust-client-564695f8f-q6745 1/1 Running 0 5d8h ... // Additional pods
Noteer de naam van de pod met het
mongodb-locust-client
voorvoegsel. Deze pod maakt verbinding met het MongoDB-cluster om de MongoDB-opdrachten uit te voeren.
Poort doorsturen van de MongoDB Locust-clientpod
Port forward the port 8089 to access the Locust web interface on your local machine using the
kubectl port-forward
command. Zorg ervoor dat u vervangt doormongodb-locust-client-564695f8f-q6745
de naam van de MongoDB-clientpod die u in de vorige sectie hebt gemaakt.kubectl -n $AKS_MONGODB_NAMESPACE port-forward mongodb-locust-client-564695f8f-q6745 8089:8089
Toegang tot de webinterface locust
Open de webinterface locust door in uw webbrowser naar te
http://localhost:8089
navigeren. Met de locust-webinterface kunt u het aantal gebruikers en de berekende snelheid voor de belastingtest configureren. U kunt ook de statistieken van de belastingstest in realtime bekijken.
Verbinding maken met de MongoDB-shell en het primaire lid identificeren
Maak verbinding met de MongoDB-clientpod met behulp van de volgende opdracht. Zorg ervoor dat u vervangt door
mongodb-locust-client-564695f8f-q6745
de naam van de MongoDB-clientpod die u eerder hebt gemaakt.kubectl -n $AKS_MONGODB_NAMESPACE exec -it mongodb-locust-client-564695f8f-q6745 -- /bin/bash
Zodra u verbinding hebt gemaakt met de pod, gebruikt u de volgende opdracht om verbinding te maken met de MongoDB-shell. Zorg ervoor dat u vervangt
${databaseAdmin}
${MY_CLUSTER_NAME}
en${databaseAdminPassword}
door de waarden die u hebt verkregen uit de vorige zelfstudie.mongosh --host ${MY_CLUSTER_NAME}-mongodb-rs0-0.${MY_CLUSTER_NAME}-mongodb-rs0.mongodb.svc.cluster.local --port 27017 -u ${databaseAdmin} -p ${databaseAdminPassword} --authenticationDatabase admin
Nadat u verbinding hebt gemaakt met de MongoDB-shell, gebruikt u de volgende opdracht om de primaire MongoDB-replicaset te identificeren:
rs.status()
Voorbeelduitvoer:
{ set: 'rs0', ... // Additional details members: [ { _id: 0, name: 'cluster-aks-mongodb-rs0-0.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 2, stateStr: 'SECONDARY', uptime: 207037, ... // Additional details for the first member }, { _id: 1, name: 'cluster-aks-mongodb-rs0-1.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 1, stateStr: 'PRIMARY', uptime: 207033, ... // Additional details for the second member }, { _id: 2, name: 'cluster-aks-mongodb-rs0-2.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 2, stateStr: 'SECONDARY', uptime: 207033, ... // Additional details for the third member } ], ... }
Noteer in de uitvoer het lid met de
PRIMARY
staat. In dit voorbeeld is het lid metname: cluster-aks-mongodb-rs0-1
het primaire lid van de MongoDB-replicaset. U verwijdert het primaire lid in de volgende stap om een MongoDB-podfout te simuleren.
Scenario's voor tolerantietests
Terwijl het databasescript nog steeds wordt uitgevoerd in het eerste terminalvenster, kunt u in het tweede terminalvenster de volgende scripts gebruiken om de foutscenario's te simuleren en het gedrag van het MongoDB-cluster te observeren.
Scenario 1: Verwijdering van statefulSet simuleren
Geef alle stateful sets weer met behulp van de
kubectl get
opdracht.kubectl get sts -n $AKS_MONGODB_NAMESPACE
Voorbeelduitvoer:
NAME READY AGE cluster-aks-mongodb-cfg 3/3 5d21h cluster-aks-mongodb-mongos 3/3 5d18h cluster-aks-mongodb-rs0 3/3 3h26m
Verwijder de stateful set met de naam
cluster-aks-mongodb-rs0
met behulp van dekubectl delete
opdracht.kubectl delete sts -n $AKS_MONGODB_NAMESPACE cluster-aks-mongodb-rs0
Zodra de stateful set is verwijderd, controleert u het testdashboard Locust om het gedrag van het MongoDB-cluster te observeren.
Haal de logboeken van de Percona Operator-pod op met behulp van de
kubectl logs
opdracht. Zorg ervoor dat u vervangt door<percona-operator-pod>
de naam van uw Percona Operator-pod.kubectl logs -n $AKS_MONGODB_NAMESPACE <percona-operator-pod>
U ziet dat de Percona-operator de stateful set opnieuw maakt en het MongoDB-cluster weer normaal werkt, zoals wordt weergegeven in de volgende voorbeelduitvoer:
... 2024-11-29T13:48:07.427Z ERROR failed to reconcile cluster {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "2e037504-d213-4bf7-a2b8-5af396b2d16c", "replset": "rs0", "error": "dial: ping mongo: server selection error: context deadline exceeded, current topology: { Type: ReplicaSetNoPrimary, ... ... 2024-11-29T13:48:37.678Z INFO Warning: Reconciler returned both a non-zero result and a non-nil error. The result will always be ignored if the error is non-nil and the non-nil error causes reqeueuing with exponential backoff. For more details, see: https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/reconcile#Reconciler {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "2e037504-d213-4bf7-a2b8-5af396b2d16c"} 2024-11-29T13:48:37.678Z ERROR Reconciler error {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "2e037504-d213-4bf7-a2b8-5af396b2d16c", "error": "create pbm object: create PBM connection to cluster-aks-mongodb-rs0-0. cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017,cluster-aks-mongodb-rs0-1.cluster-aks-mongodb-rs0.mongodb.svc.cluster. local:27017,cluster-aks-mongodb-rs0-2.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017: create mongo connection: ping: server selection error: server selection timeout, ... ... 2024-11-29T13:48:38.210Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "2d970945-86b2-4c10-a610-7f7c42ad9a9f", "replset": "rs0", "size": 3, "pods": 1} 2024-11-29T13:48:38.437Z INFO Cluster state changed {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "2d970945-86b2-4c10-a610-7f7c42ad9a9f", "previous": "error", "current": "initializing"} 2024-11-29T13:48:38.955Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "f2f803cb-d5f4-4851-9a05-71d46d95ca6d", "replset": "rs0", "size": 3, "pods": 1} 2024-11-29T13:48:40.102Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "76accdff-7d7a-4ba8-9914-ff8793226dd5", "replset": "rs0", "size": 3, "pods": 1} 2024-11-29T13:48:43.964Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "c49f50e7-881e-469c-bdf5-aaf925436097", "replset": "rs0", "size": 3, "pods": 1} 2024-11-29T13:48:49.736Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "5b52ce2e-e07e-43e8-8ca0-b6850a4d8823", "replset": "rs0", "size": 3, "pods": 1} 2024-11-29T13:48:55.560Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "95a26aff-b022-4543-a22e-0d50ea292190", "replset": "rs0", "size": 3, "pods": 2} 2024-11-29T13:48:56.466Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "9f64bdb1-e616-44ab-a480-7eaf813db73e", "replset": "rs0", "size": 3, "pods": 2} 2024-11-29T13:49:01.279Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "0281130b-b13e-4ab2-bd68-0b4cb6d01c84", "replset": "rs0", "size": 3, "pods": 2} 2024-11-29T13:49:07.027Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "a3caedd1-ead3-406b-8ce3-056c7cd875dc", "replset": "rs0", "size": 3, "pods": 2} 2024-11-29T13:49:12.783Z INFO Waiting for the pods {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "8a82eb0c-8b26-4542-a4b5-f7e13e030d1e", "replset": "rs0", "size": 3, "pods": 2} 2024-11-29T13:49:28.521Z ERROR failed to reconcile cluster {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "22fc8c4d-30d5-4bf6-b405-720533f1d8d2", "replset": "rs0", "error": "dial: ping mongo: server selection error: context deadline exceeded, current topology: { Type: ReplicaSetNoPrimary, ... ... 2024-11-29T13:49:32.472Z INFO Fixing member tags {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "8ff97dc9-b024-4cd9-b411-c3ffaf225e14", "replset": "rs0"} 2024-11-29T13:49:39.065Z ERROR failed to reconcile cluster {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "28438ddb-77a1-48b0-8390-277c4687a97b", "replset": "rs0", "error": "create system users: failed to get mongo client: ping mongo: connection() error occurred during connection handshake: dial tcp: lookup cluster-aks-mongodb-rs0-1.cluster-aks-mongodb-rs0.mongodb. svc.cluster.local on 10.0.0.10:53: no such host", ... ... 2024-11-29T13:49:40.424Z ERROR failed to reconcile cluster {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "cfec8e33-d0c9-4adf-afe9-bc6dcbf711ba", "replset": "rs0", "error": "dial: ping mongo: connection() error occurred during connection handshake: ... ... 2024-11-29T13:49:45.433Z INFO Cluster state changed {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "0765ea5f-52d8-44e2-a680-c7d082dd88e1", "previous": "initializing", "current": "ready"}
Scenario 2: Een MongoDB-podfout simuleren
Identificeer de primaire MongoDB-replicaset en verwijder deze vervolgens met behulp van de
kubectl delete
opdracht om een MongoDB-podfout te simuleren. Zorg ervoor dat u vervangt doorcluster-aks-mongodb-rs0-1
de naam van het primaire lid uit de uitvoer van ders.status()
opdracht.kubectl delete pod cluster-aks-mongodb-rs0-1 -n $AKS_MONGODB_NAMESPACE
De MongoDB-replicaset moet een nieuw primair lid selecteren om de aanvragen te blijven verwerken. U kunt het nieuwe primaire lid verifiëren door verbinding te maken met de MongoDB-shell en de
rs.status()
opdracht uit te voeren. Maak verbinding met de MongoDB-clientpod met behulp van de volgende opdracht. Zorg ervoor dat u vervangt doormongodb-locust-client-564695f8f-q6745
de podnaam uit de uitvoer van de vorige opdracht.kubectl -n $AKS_MONGODB_NAMESPACE exec -it mongodb-locust-client-564695f8f-q6745 -- /bin/bash
Nadat u verbinding hebt gemaakt met de pod, maakt u verbinding met de MongoDB-shell met behulp van de volgende opdracht. Zorg ervoor dat u vervangt
${MY_CLUSTER_NAME}
${databaseAdmin}
en${databaseAdminPassword}
door de waarden die u in de vorige zelfstudie hebt verkregen.mongosh --host ${MY_CLUSTER_NAME}-mongodb-rs0-0.${MY_CLUSTER_NAME}-mongodb-rs0.mongodb.svc.cluster.local --port 27017 -u ${databaseAdmin} -p ${databaseAdminPassword} --authenticationDatabase admin
Nadat u verbinding hebt gemaakt met de MongoDB-shell, gebruikt u de volgende opdracht om de primaire MongoDB-replicaset te identificeren:
rs.status()
Voorbeelduitvoer:
{ set: 'rs0', ... // Additional details members: [ { _id: 0, name: 'cluster-aks-mongodb-rs0-0.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 2, stateStr: 'PRIMARY', uptime: 207037, ... // Additional details for the first member }, { _id: 1, name: 'cluster-aks-mongodb-rs0-1.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 1, stateStr: 'SECONDARY', uptime: 207033, ... // Additional details for the second member }, { _id: 2, name: 'cluster-aks-mongodb-rs0-2.cluster-aks-mongodb-rs0.mongodb.svc.cluster.local:27017', health: 1, state: 2, stateStr: 'SECONDARY', uptime: 207033, ... // Additional details for the third member } ], ... }
U ziet dat het lid met de
PRIMARY
staat is gewijzigd inSECONDARY
, en een ander lid met deSECONDARY
staat is gewijzigd inPRIMARY
:Haal de logboeken van de Percona Operator-pod op met behulp van de
kubectl logs
opdracht. Zorg ervoor dat u vervangt door<percona-operator-pod>
de naam van uw Percona Operator-pod.kubectl logs -n $AKS_MONGODB_NAMESPACE <percona-operator-pod>
U ziet dat de Percona-operator de stateful set opnieuw maakt en het MongoDB-cluster weer normaal werkt, zoals wordt weergegeven in de volgende voorbeelduitvoer:
... 2024-11-29T14:02:17.151Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:17.189Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:17.405Z INFO Cluster state changed {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2", "previous": "ready", "current": "initializing"} 2024-11-29T14:02:18.448Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "c2c2c2c2-dddd-eeee-ffff-a3a3a3a3a3a3", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:18.489Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "c2c2c2c2-dddd-eeee-ffff-a3a3a3a3a3a3", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:23.359Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:23.402Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:29.341Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:02:29.377Z INFO StatefulSet is not up to date {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5", "sts": "cluster-aks-mongodb-rs0"} 2024-11-29T14:03:01.246Z INFO Cluster state changed {"controller": "psmdb-controller", "object": {"name":"cluster-aks-mongodb","namespace":"mongodb"}, "namespace": "mongodb", "name": "cluster-aks-mongodb", "reconcileID": "f5f5f5f5-aaaa-bbbb-cccc-d6d6d6d6d6d6", "previous": "initializing", "current": "ready"}
Volgende stap
Azure Kubernetes Service