Hoe voer je een MongoDB Kubernetes-installatie uit

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.
  • 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.

kubectl create ns mongodb

Voer nu de onderstaande kubectl get-opdracht uit om de lijst met namespaces op uw Kubernetes-cluster te controleren.

kubectl get ns

U ziet een nieuwe namespace met de naam mongodb beschikbaar op uw cluster, zoals hieronder weergegeven.

Creating and Verifying the mongodb Namespace

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.

git clone <https://github.com/mongodb/mongodb-kubernetes-operator.git>

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.

# Wijzig de werkdirectory naar mongodb-kubernetes-operator
cd mongodb-kubernetes-operator/

# Toon bestanden en mappen
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.

Downloading mongodb-kubernetes-operator Source Code

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.

kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
Creating New Kubernetes CRD MongoDB Kubernetes Deployment

2. Voer vervolgens het volgende kubectl get commando uit om de lijst met beschikbare crd in je Kubernetes te verifiëren.

kubectl get crd/mongodbcommunity.mongodbcommunity.mongodb.com

Hieronder zie je de CRD met de naam mongodbcommunity.mongodbcommunity.mongodb.org.

Checking List of CRDs

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.

kubectl apply -k config/rbac/ -n mongodb
Deploying RBAC for MongoDB Deployment

4. Voer nu elk kubectl-commando hieronder uit om de rol, rolbinding en serviceaccount voor de MongoDB-operator te controleren.

# Controleren van de lijst met rollen
kubectl get role mongodb-kubernetes-operator -n mongodb

# Controleren van de lijst met rolbindingen
kubectl get rolebinding mongodb-kubernetes-operator -n mongodb

# Controleren van de serviceaccount
kubectl get serviceaccount mongodb-kubernetes-operator -n mongodb

De onderstaande uitvoer toont aan dat de rol, rolbinding en serviceaccount mongodb-kubernetes-operator zijn aangemaakt in de mongodb-namespace.

Checking role, rolebinding, and serviceaccount on Kubernetes

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.

kubectl create -f config/manager/manager.yaml -n mongodb

Hieronder kunt u zien dat de implementatie van de MongoDB-operator is aangemaakt, maar de pod is nog steeds aan het initialiseren.

Deploying MongoDB Operator to the mongodb Namespace

6. Voer tot slot de volgende commando’s uit om de implementatie en pods in de mongodb-namespace te controleren.

# Controleren van de implementatie in de mongodb-namespace
kubectl get deployment.apps -n mongodb

# Controleren van de pods in de mongodb-namespace
kubectl get pods -n mongodb

Zoals u hieronder kunt zien, wordt de pod van de MongoDB-operator uitgevoerd.

Verifying MongoDB Operator Deployment and Pod

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.

spec:
  members: 2 # Aantal replica sets om te creëren
  security:
    authentication:
      modes:
      - SCRAM
  statefulSet:

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.

---
apiVersion: v1
kind: Secret
metadata:
  name: my-user-password
type: Opaque
stringData:
  password: <your-password-here> # Stel wachtwoord in voor MongoDB-beheerder

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.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Deploying MongoDB Replica Sets

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.

# Controleer de mongodbcommunity crd
kubectl get mongodbcommunity -n mongodb

# Controleer pods in de mongodb-namespace
kubectl get pods -n mongodb

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.
Verifying MongoDB ReplicaSet Deployment and Pods

4. Voer tot slot een ander kubectl-commando uit om de pv en pvc in de mongodb-namespace te verifiëren.

kubectl get pv,pvc -n mongodb

De onderstaande output toont enkele pv’s en pvc’s die worden gebruikt door de MongoDB ReplicaSet-pods.

Checking PV and PVC on the mongodb Namespace

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.

---
apiVersion: v1
kind: Secret
metadata:
  name: myappdata # naam van het geheime meta.data
type: Opaque
stringData:
  password: myapppassword # wachtwoord voor de nieuwe gebruiker

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.

kubectl apply -f new-user.yaml -n mongodb
Creating Secret to Kubernetes Cluster

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.

    - name: appuser # Nieuwe gebruiker appuser
      db: admin # Maakt authenticatie mogelijk voor database admin
      passwordSecretRef:
        name: myappdata # Het Kubernetes-geheim
      roles:
        - name: dbAdmin # Stelt rol dbAdmin in
          db: appdb1 # naar de appdb1
      scramCredentialsSecretName: scram-secret-myapp

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.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Creating New MongoDB User and Database on Kubernetes

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
# Haal de details en verbindingen voor admin-authenticatie op
kubectl get secrets mdb0-admin-mongoadmin -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

# Haal de details en verbindingen voor appuser-authenticatie op
kubectl get secrets mdb0-admin-appuser -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

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.

Retrieving Details of MongoDB User and Password, and Connections

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 geten (-n).

kubectl get svc -n mongodb

Hieronder zie je de service genaamd mdb0-svc, die poort 27017 exposeert (standaard poort van MongoDB).

Listing Services on the mongodb Namespace

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.

kubectl port-forward service/mdb0-svc -n mongodb 27017:27017
Setting up Port-forward

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.

# Verbinden als mongoadmin
mongodb://mongoadmin:secretpassword@localhost:27017/admin?ssl=false

# Verbinden als appuser
mongodb://appuser:myapppassword@localhost:27017/admin?ssl=false
Connecting as mongoadmin user to MongoDB
Connecting as appuser to MongoDB

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

Verifying Connection to the MongoDB mongoadmin

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

Verifying Connection to the MongoDB as appuser

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.

Source:
https://adamtheautomator.com/mongodb-kubernetes/