Applicatiedeploys in Kubernetes kunnen uitdagend zijn, vooral voor stateful-toepassingen zoals MongoDB naar een Kubernetes-cluster. Hoe vergemakkelijk je de implementatie? Laat de MongoDB Kubernetes Operator automatisch stateful toepassingen implementeren en beheren binnen je Kubernetes-cluster.
In deze handleiding leer je hoe je MongoDB implementeert in Kubernetes met behulp van de MongoDB Kubernetes Operator.
Lees verder en begin met het automatiseren van je Kubernetes-implementaties!
Vereisten
Deze handleiding zal een praktische demonstratie zijn. Zorg ervoor dat je aan de volgende vereisten voldoet om mee te kunnen doen:
- A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
- Kubectl geïnstalleerd op de lokale machine.
- MongoDB Compass geïnstalleerd op de lokale machine.
- Git geïnstalleerd op je machine.
- jq JSON-parser geïnstalleerd op de lokale machine.
Het creëren van een Namespace voor MongoDB
Bij het implementeren van toepassingen op Kubernetes wordt het altijd aanbevolen om een specifieke namespace voor uw projecten te maken.
Namespaces maken het beheer van Kubernetes-resources eenvoudiger voor beheerders en voorkomen naamconflicten. Tegelijkertijd voorkomt het maken van namespaces onjuist gebruik van resources in de Kubernetes-omgeving.
Open uw terminal en voer de onderstaande kubectl create
-opdracht uit om een nieuwe namespace (ns
) te maken met de naam mongodb
op uw Kubernetes-cluster.
Voer nu de onderstaande kubectl get
-opdracht uit om de lijst met namespaces op uw Kubernetes-cluster te controleren.
U ziet een nieuwe namespace met de naam mongodb beschikbaar op uw cluster, zoals hieronder weergegeven.

Het downloaden van de MongoDB Kubernetes Operator
Na het creëren van een namespace is het tijd om de MongoDB Kubernetes Operator te downloaden. De MongoDB Kubernetes Operator is een set van Kubernetes-operators. Deze Kubernetes-operators bieden automatische implementatie, configuratie en beheer van MongoDB Community in de Kubernetes-omgeving.
Voer de onderstaande git
-opdracht uit om het MongoDB Kubernetes Operator-project naar je lokale machine te clonen
.
Voer nu elke opdracht hieronder uit om je huidige werkdirectory te wijzigen naar mongodb-kubernetes-operator
en alle beschikbare bestanden en mappen weer te geven met ls
.
Je ziet een subdirectory met de naam ‘config’ binnen het ~/mongodb-kubernetes-operator-projectdirectory, zoals hieronder weergegeven. De config-subdirectory bevat voorbeelden van YAML-bestanden voor het implementeren van MongoDB naar Kubernetes.

Het implementeren van de MongoDB Operator
Nu je aangepaste namespace en MongoDB Kubernetes Operator zijn geconfigureerd, ben je klaar om de MongoDB Operator naar je Kubernetes-cluster te implementeren. Hoe? Je zult de configuratie binnen de config-directory gebruiken.
De MongoDB Operator beheert de levenscyclus van je MongoDB-implementatie op het Kubernetes-cluster. De operator zal automatisch de staat van je MongoDB-implementatie creëren, beheren en schalen.
Om de MongoDB-operator te implementeren, moet je een Kubernetes Custom Resources Definition (CRD) en de controller maken. De Kubernetes CRD is uitbreidbaar naar de Kubernetes API, waardoor je aangepaste resources kunt maken in Kubernetes.
1. Voer het kubectl apply
commando hieronder uit om een nieuwe Kubernetes CRD voor MongoDB-implementatie te maken.
Het Kubernetes-operator vervangt alle menselijke interactie om een applicatie op Kubernetes te implementeren. De operator is een pod-controller die automatisch je stateful applicatie implementeert en beheert op Kubernetes.

2. Voer vervolgens het volgende kubectl get
commando uit om de lijst met beschikbare crd
in je Kubernetes te verifiëren.
Hieronder zie je de CRD met de naam mongodbcommunity.mongodbcommunity.mongodb.org.

3. Voer het onderstaande commando uit om een nieuwe aangepaste Role-Based Access Control (RBAC) te maken voor de MongoDB Operator, en specificeer de RBAC-implementatie naar de namespace mongodb.
Deze opdracht maakt een nieuwe rol, rolbinding en serviceaccount aan voor de MongoDB-operator, die aangepaste machtigingen heeft op uw Kubernetes-cluster. Deze aangepaste machtigingen zijn vereist voor het automatisch implementeren en beheren van MongoDB.

4. Voer nu elk kubectl
-commando hieronder uit om de rol, rolbinding en serviceaccount voor de MongoDB-operator te controleren.
De onderstaande uitvoer toont aan dat de rol, rolbinding en serviceaccount mongodb-kubernetes-operator zijn aangemaakt in de mongodb-namespace.

5. Zodra de controle is voltooid, voer het onderstaande kubectl
-commando uit om de MongoDB-operator in de mongodb-namespace te implementeren.
Deze opdracht maakt een nieuwe pod (mongodb-kubernetes-operator) aan met de basis-Docker-image (quay.io/mongodb/mongodb-kubernetes-operator). Deze pod fungeert als controller voor het automatisch implementeren van MongoDB ReplicaSets op het Kubernetes-cluster.
Hieronder kunt u zien dat de implementatie van de MongoDB-operator is aangemaakt, maar de pod is nog steeds aan het initialiseren.

6. Voer tot slot de volgende commando’s uit om de implementatie en pods in de mongodb-namespace te controleren.
Zoals u hieronder kunt zien, wordt de pod van de MongoDB-operator uitgevoerd.

Het implementeren van een MongoDB ReplicaSet op Kubernetes
Na implementatie van MongoDB, zul je een ReplicaSet implementeren op je Kubernetes om hoge beschikbaarheid en redundantie te bieden voor je MongoDB-implementatie. Je wilt geen downtime hebben voor je implementatie.
De implementatie van MongoDB ReplicaSets met behulp van de MongoDB Kubernetes Operator is standaard beveiligd met gebruik van SCRAM-authenticatie voor gebruikers. Tegelijkertijd kun je een veilige TLS-verbinding gebruiken voor gebruikers- en applicatieverbindingen en Prometheus-metrics blootstellen voor het monitoren van resources.
Gerelateerd: Aan de slag met Grafana & Prometheus voor het monitoren van Kubernetes-clusters
In de map config/samples/ vind je meerdere voorbeelden van YAML-bestanden voor de implementatie van de ReplicaSet. Elk bestand kan worden gebruikt in verschillende implementatiescenario’s, maar het standaardbestand voor de implementatie van ReplicaSet is mongodb.com_v1_mongodbcommunity_cr.yaml.
1. Bewerk het YAML-bestand voor je implementatie met je voorkeurseditor. In deze demo wordt het /mongodb.com_v1_hostpath.yaml-bestand gebruikt voor lokale implementatie. Dit YAML-bestand bevindt zich in de map config/samples/arbitrary_statefulset_configuration/.
Als je de MongoDB Kubernetes Operator implementeert op cloudservices zoals GKE en AKS, gebruik dan het YAML-bestand mongodb.com_v1_mongodbcommunity_cr.yaml. Maar als je lokaal implementeert binnen Kind of Minikube, kun je het aangepaste YAML-bestand (arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml) gebruiken, dat automatisch aangepaste PV en PVC aanmaakt voor MongoDB ReplicaSet-pods.
Onderstaand, wijzig het aantal ReplicaSets dat je wilt implementeren, afhankelijk van je omgeving, maar de standaard is 3. Voor deze tutorial is het aantal ReplicaSets ingesteld op 2.
Vervang <your-password-here> door je sterke wachtwoord. Je zult dit wachtwoord gebruiken om in te loggen op de MongoDB-database, en standaard gebruik je de SCRAM-authenticatie.
Sla de wijzigingen op en sluit de editor af zodra je tevreden bent met het wachtwoord.
2. Voer vervolgens de kubectl
-opdracht hieronder uit om de MongoDB ReplicaSet te implementeren (apply
) met behulp van het bestand mongodb.com_v1_hostpath.yaml
in de mongodb-namespace.
Deze opdracht maakt het volgende aan:
- A new custom resource (MongoDBCommunity) with the name mdb0 under the
mongodbcommunity.mongodb.com/v1
CRD
- Kubernetes-geheimen voor het opslaan van MongoDB-gebruikerswachtwoorden. Tegelijkertijd enkele PV’s en PVC’s met het type
hostPath
voor de MongoDB Replica Set.
De implementatie zal enige tijd in beslag nemen, afhankelijk van de grootte van de ReplicaSets die moeten worden aangemaakt en het Kubernetes-cluster zelf.

3. Na de implementatie voert u elk van de onderstaande commando’s uit om de aangepaste resources en pods in de namespace mongodb
te verifiëren.
De onderstaande output toont het volgende:
- De aangepaste resource MongoDBCommunity met de naam mdb0 wordt uitgevoerd met MongoDB v4.4.0.
- De twee MongoDB ReplicaSet-pods worden uitgevoerd met de namen mdb0-0 en mdb0-1. Elke pod bevat twee verschillende containers, de mongod, en de mongodb-agent container.

4. Voer tot slot een ander kubectl
-commando uit om de pv
en pvc
in de mongodb
-namespace te verifiëren.
De onderstaande output toont enkele pv’s en pvc’s die worden gebruikt door de MongoDB ReplicaSet-pods.

Het aanmaken van een nieuwe gebruiker en database voor de MongoDB-implementatie
Op dit punt heeft u de implementatie van de MongoDB-operator en ReplicaSets op uw Kubernetes-cluster voltooid. De volgende stap is het aanmaken van een nieuwe MongoDB-database en gebruiker voor uw toepassing.
U zult een nieuwe Kubernetes-secret aanmaken voor de nieuwe gebruiker, de aangepaste resource van de ReplicaSet-implementatie bewerken en de ReplicaSet bijwerken in uw cluster.
1. Maak een nieuw YAML-bestand aan met behulp van je favoriete editor en vul de volgende Kubernetes-geheim in. Je kunt het YAML-bestand een naam geven zoals je wilt, maar het bestand wordt in deze tutorial genoemd new-user.yaml.
Dit YAML-bestand maakt een nieuw Kubernetes-geheim met de naam als myappdata en het wachtwoord als myapppassword.
2. Voer vervolgens het kubectl
-commando hieronder uit om de new-user.yaml
-configuratie uit te voeren.
Dit commando maakt en past (apply) een nieuw Kubernetes-geheim toe op je cluster en past dit geheim toe op de mongodb-namespace.

3. Bewerk het YAML-bestand van je ReplicaSet CRD-configuratie (mongodb.com_v1_hostpath.yaml) in de config/samples/arbitrary_statefulset_configuration map
Voeg de volgende configuratie toe aan het mongodb.com_v1_hostpath.yaml-bestand, dat de database en gebruiker voor MongoDB creëert.
Zorg ervoor dat je scram-secret-myapp vervangt door je eigen scram referenties, sla de wijzigingen op in het bestand en sluit de editor.
4. Voer nu de onderstaande opdracht uit om de nieuwe wijzigingen die je hebt aangebracht in het bestand mongodb.com_v1_hostpath.yaml
in stap drie toe te passen.

5. Ten slotte, voer elke opdracht hieronder uit om de gedetailleerde MongoDB-verbindingen voor je toepassing te genereren. Deze opdrachten genereren de gedetailleerde MongoDB-verbindingen voor je toepassingen in JSON-uitvoer en parseren de uitvoer met de jq
-opdrachtregel.
Vervang mdb0-admin-mongoadmin door jouw omgevingsgegevens zoals hieronder:
mdb0
– De metagegevensnaam van de MongoDB-bronnen.
admin
– De database om te authenticeren.
mongoadmin
– De gebruiker die je zult gebruiken om te authenticeren
De uitvoer hieronder laat zien dat je verbinding kunt maken met MongoDB via de standaard en standaardSrv-verbindingen. Je ziet ook de gebruikersnaam en het wachtwoord van je MongoDB-implementatie.

Verbinding maken met de MongoDB-implementatie
Je hebt MongoDB succesvol geïmplementeerd op de Kubernetes-cluster met behulp van de MongoDB Kubernetes-operator. Maar hoe weet je dat de implementatie werkt? Je zult de verbinding van je lokale machine met de database en de gebruikersverbinding met MongoDB binnen de Kubernetes-cluster verifiëren.
Om de verbinding met je MongoDB-implementatie te verifiëren, maak je gebruik van port-forwarding. Port-forwarding in Kubernetes stelt je in staat om een doorstuurpoort te creëren vanaf elke Kubernetes-service naar je lokale poort.
1. Voer de kubectl
-opdracht hieronder uit om de lijst met services (svc
) in de namespace mongodb
te get
en (-n
).
Hieronder zie je de service genaamd mdb0-svc, die poort 27017 exposeert (standaard poort van MongoDB).

2. Voer vervolgens de onderstaande opdracht uit om doorsturen van poorten naar de Kubernetes-cluster te maken.
Deze opdracht maakt een nieuwe poortdoorsturing op de Kubernetes-service (mdb0-svc) en stuurt de lokale poort 27017 door naar de poort 27017 van de Kubernetes-service.

3. Open tot slot de MongoDB Compass-applicatie op je lokale machine, voeg een nieuwe verbinding toe met het volgende formaat en klik op Verbinden om verbinding te maken met MongoDB.
Wijzig het gebruikersnaam- en wachtwoordveld met je MongoDB-gebruikersnaam en wachtwoord.


Als de verbinding succesvol is, krijg je het volgende venster dat bevestigt dat de MongoDB-implementatie naar Kubernetes correct werkt.
Voor de gebruiker mongoadmin zie je standaarddatabases (local, config en admin).

Voor de appuser zie je alleen een privilegesdatabase met de naam appdb1.

Conclusie
Gedurende deze tutorial heb je geleerd hoe je MongoDB kunt implementeren naar de Kubernetes-cluster met behulp van de MongoDB Kubernetes-operator. Je hebt ook de basisfunctionaliteit van de Kubernetes-operator besproken. En tegenwoordig heb je al een goede kennis over het automatisch implementeren en beheren van applicaties naar Kubernetes.
Waarom stel je geen TLS-verbinding in op je MongoDB-implementatie om voort te bouwen op deze nieuw verworven kennis? Een TLS-verbinding beveiligt de verbindingen tussen replica sets en beveiligt client- of app-verbindingen met MongoDB.