How to deploy MongoDB on Kubernetes?

Opsætning af MongoDB Operator på Kubernetes

15/01/2010

Rating: 4.52 (5975 votes)

MongoDB er en yderst populær NoSQL-database, der er kendt for sin fleksibilitet og skalerbarhed, hvilket gør den velegnet til alt fra små projekter til store dataintensive applikationer. Mens en standard enkeltstående installation af MongoDB er relativt ligetil, opstår der betydelig kompleksitet, når man skal implementere en replikeret eller sharded klynge. Disse udfordringer bliver især udtalte i orkestreringsmiljøer som Kubernetes, hvor dynamisk administration, netværk og storage tilføjer flere lag af kompleksitet.

How to deploy MongoDB on Kubernetes?

Udfordringerne ved at køre MongoDB på Kubernetes er mange. For det første kræver replikerede og sharded klynger yderligere konfigurationer, som skal administreres omhyggeligt. I et replikeret scenarie skal man for eksempel håndtere separate konfigurationer for leder- (primary) og følger- (secondary) noder. Derudover er overvågning og adgangsstyring af MongoDB inde i Kubernetes en vanskelig opgave at håndtere korrekt. Hvem skal administrere denne opsætning og sikre, at den overholder bedste praksis for sikkerhed, overvågning og stabilitet? Svaret ligger i at anvende en Kubernetes Operator, og i denne artikel fokuserer vi på en specifik løsning: MongoDB Operator fra Opstree Solutions.

Indholdsfortegnelse

Hvad er en MongoDB Operator?

En Kubernetes Operator er en metode til at pakke, implementere og administrere en Kubernetes-applikation. En operator bygger på de grundlæggende Kubernetes-ressourcer og controller-koncepter, men inkluderer domænespecifik viden for at automatisere hele livscyklussen for den software, den administrerer.

MongoDB Operator er en specialbygget operator baseret på Custom Resource Definitions (CRD), der er designet til at oprette, administrere og automatisk reparere MongoDB-opsætninger inde i et Kubernetes-miljø. Den fjerner meget af den manuelle byrde og kompleksitet ved at tilbyde en deklarativ måde at definere din databaseklynge på. Operatoren understøtter forskellige typer af MongoDB-opsætninger, herunder:

  • Standalone: En enkelt MongoDB-instans, velegnet til udvikling og test.
  • Replikeret: En klynge med flere noder, der sikrer høj tilgængelighed og dataredundans gennem replikering.
  • Sharded: En distribueret klynge, der skalerer horisontalt ved at fordele data på tværs af flere shards (endnu ikke fuldt implementeret i alle versioner).

Ved at bruge denne operator kan teams fokusere mere på at udvikle applikationer og mindre på den komplekse infrastrukturadministration, der er forbundet med at køre stateful applikationer som MongoDB på Kubernetes.

Nøglefunktioner og Fordele

MongoDB Operator kommer med en række funktioner, der er designet til at gøre livet lettere for udviklere og administratorer. Den sigter mod at levere en produktionsklar oplevelse ud af boksen.

Implementerede Funktioner

  • Automatiseret Opsætning: Opret nemt standalone og replikeret klynger med en simpel YAML-fil.
  • Failover og Genopretning: Operatoren overvåger klyngens helbred og kan automatisk håndtere nodefejl, for eksempel ved at promovere en ny primær node i en replikeret opsætning.
  • Indbygget Overvågning: Den inkluderer indbygget understøttelse for Prometheus via MongoDB Exporter, hvilket gør det nemt at indsamle metrics og overvåge databasens ydeevne.
  • Bedste Praksis for Kubernetes: Operatoren implementerer Kubernetes-anbefalinger som Affinity-regler (for at styre pod-placering), Pod Disruption Budgets (for at sikre tilgængelighed under vedligeholdelse) og korrekt ressourcestyring.
  • Grafana Dashboards: Der medfølger indsigtsfulde og detaljerede overvågningsdashboards til Grafana, som giver et visuelt overblik over klyngens tilstand.
  • Brugerdefineret Konfiguration: Mulighed for at anvende brugerdefinerede MongoDB-konfigurationer for at skræddersy opsætningen til specifikke behov.

Fremtidige og Planlagte Funktioner

Projektet er i aktiv udvikling, og der er mange spændende funktioner i pipelinen. Nedenstående tabel sammenligner nuværende og fremtidige funktioner.

FunktionStatusBeskrivelse
Replikeret KlyngeopsætningImplementeretAutomatiseret opsætning af klynger med høj tilgængelighed.
Automatisk FailoverImplementeretHåndterer automatisk nodefejl for at opretholde klyngens drift.
Prometheus IntegrationImplementeretIndbygget exporter til indsamling af metrics.
Backup og RestorePlanlagtFremtidig understøttelse for planlagt og on-demand backup og gendannelse.
TLS KrypteringPlanlagtSikker kommunikation mellem noder og klienter via TLS.
Bruger- og Rolle-styringPlanlagtAdministrer databasebrugere og deres rettigheder direkte via Kubernetes-manifester.

Installation af MongoDB Operator

Installationen af operatoren er enkel og kan udføres ved hjælp af Helm, som er en pakkehåndtering til Kubernetes. Før du begynder, skal du sikre dig, at du har et Kubernetes-cluster, der kører version 1.16.0 eller nyere.

Trin 1: Tilføj Helm Repository

Først skal du tilføje det Helm-repository, der indeholder operatørens chart. Dette gøres med en enkelt kommando:

helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/

Du bør se en bekræftelse på, at "ot-helm" er blevet tilføjet til dine repositories.

Trin 2: Installer Operatoren

Når repositoriet er tilføjet, kan du installere MongoDB Operator i dit cluster. Det anbefales at installere operatører i et dedikeret namespace, f.eks. `ot-operators`.

helm install mongodb-operator ot-helm/mongodb-operator --namespace ot-operators --create-namespace

Trin 3: Verificer Installationen

Efter et øjeblik kan du verificere, at operatorens pod kører korrekt ved at bruge `kubectl`:

kubectl get pods -n ot-operators -l name=mongodb-operator

Outputtet bør vise en pod med navnet `mongodb-operator-...` med status `Running`.

Oprettelse af et MongoDB Cluster

Med operatoren installeret kan du nu oprette en MongoDB-klynge. Dette gøres ved at definere en `MongoDBCluster`-ressource i en YAML-fil.

Eksempel på Manifest-fil

Her er et eksempel på en simpel YAML-fil, der definerer en replikeret klynge med tre noder:

apiVersion: opstreelabs.in/v1alpha1 kind: MongoDBCluster metadata: name: mongodb-replikeret-klynge namespace: ot-operators spec: clusterSize: 3 kubernetesConfig: image: quay.io/opstree/mongo:v5.0 imagePullPolicy: IfNotPresent securityContext: fsGroup: 1001 storage: accessModes: ["ReadWriteOnce"] storageSize: 1Gi storageClass: standard # Ændr til din storage class mongoDBSecurity: mongoDBAdminUser: admin secretRef: name: mongodb-secret key: password mongoDBMonitoring: enableExporter: true image: bitnami/mongodb-exporter:0.11.2-debian-10-r382 imagePullPolicy: IfNotPresent

I denne fil definerer vi nøgleparametre som antallet af noder (`clusterSize`), Docker-imaget, storage-krav og konfiguration for sikkerhed og overvågning. Bemærk, at du skal oprette en Kubernetes Secret (`mongodb-secret`) med administratoradgangskoden, før du anvender denne fil.

Anvend Manifestet og Verificer

Gem filen som f.eks. `mongodb-klynge.yaml` og anvend den med `kubectl`:

kubectl apply -f mongodb-klynge.yaml

Operatoren vil nu begynde at oprette de nødvendige ressourcer. Du kan følge med i oprettelsen af pods:

kubectl get pods -n ot-operators -l app=mongodb-cluster

Når alle tre pods har status `Running` (2/2, fordi hver pod har en MongoDB-container og en exporter-container), er din klynge klar. Du kan derefter verificere klyngens helbred ved at køre en kommando inde i en af podsene:

kubectl exec -it mongodb-replikeret-klynge-cluster-0 -n ot-operators -- bash mongo -u $MONGO_ROOT_USERNAME -p $MONGO_ROOT_PASSWORD --eval "db.adminCommand({ replSetGetStatus: 1 })"

Dette vil give dig en detaljeret status for replikeringssættet.

Ofte Stillede Spørgsmål (FAQ)

Hvad er en Kubernetes Operator præcist?
En Operator er en softwareudvidelse til Kubernetes, der bruger brugerdefinerede ressourcer (CRDs) til at administrere applikationer og deres komponenter. Den indkapsler operationel viden, som en menneskelig operatør ville have, og automatiserer opgaver som opdateringer, skalering og fejlhåndtering.

Hvilken version af Kubernetes er påkrævet?
MongoDB Operator kræver Kubernetes version 1.16.0 eller nyere. Det anbefales dog altid at bruge en nyere, stabil version af Kubernetes for at få adgang til de seneste funktioner og sikkerhedsopdateringer.

Er denne operator klar til produktionsbrug?
Operatoren er under aktiv udvikling. Selvom den tilbyder robuste funktioner, er det vigtigt at teste den grundigt i et testmiljø, der afspejler din produktionsopsætning, før den tages i brug til kritiske workloads. Følg med i projektets udvikling på GitHub for at se de seneste opdateringer og stabilitetsforbedringer.

Hvordan kan jeg bidrage til projektet?
Da dette er et open source-projekt, er bidrag meget velkomne. Du kan bidrage ved at oprette feature requests, rapportere fejl (bugs) eller indsende Pull Requests med kodeforbedringer på projektets GitHub-side. Al feedback er værdifuld for projektets videre udvikling.

Konklusion

At køre stateful applikationer som MongoDB på Kubernetes har historisk set været en kompleks opgave. Men med fremkomsten af Kubernetes Operators som MongoDB Operator fra Opstree Solutions er processen blevet markant mere automatiseret og håndterbar. Ved at abstrahere den komplekse konfiguration og livscyklusstyring væk, giver operatoren udviklingsteams mulighed for hurtigt og sikkert at implementere skalerbare og robuste MongoDB-klynger.

Selvom operatoren stadig er under udvikling, viser dens nuværende funktionssæt og den aktive udvikling et stort potentiale. Den forenkler ikke kun den indledende opsætning, men også den løbende vedligeholdelse, overvågning og fejlhåndtering, hvilket gør den til et værdifuldt værktøj for enhver, der ønsker at køre MongoDB på Kubernetes.

Hvis du vil læse andre artikler, der ligner Opsætning af MongoDB Operator på Kubernetes, kan du besøge kategorien Teknologi.

Go up