Gyakorlat – A MongoDB üzembe helyezése

Befejeződött

A Fruit Smoothies értékelési webhelye több összetevőből áll. A szolgáltatás tartalmaz egy webes elő felületet, egy rögzített adatokat tároló dokumentum-adatbázist, valamint egy RESTful API-t, amely lehetővé teszi, hogy a webes előlap kommunikáljon az adatbázissal. A fejlesztői csapat a MongoDB-t választotta az értékelési webhely dokumentumtároló adatbázisának.

Ebben a gyakorlatban a Helm segítségével helyezi üzembe a MongoDB-t az Azure Kubernetes Service- (AKS-) fürtön. Azt is megtudhatja, hogyan használhat egy Kubernetes-beli titkos kódot a MongoDB-kapcsolat felhasználónevének és jelszavának tárolására.

Ez a mintaarchitektúra üzembe helyezi a MongoDB-t a fürtön, hogy az alkalmazás adatokat tárolhasson. Ez elfogadható tesztelési és fejlesztési környezetben, azonban éles környezetben nem ajánlott. Éles környezetben célszerű egy méretezhető adattároló platformot, például a CosmosDB-t használni az alkalmazásállapot és -adatok tárolásához.

Ebben a gyakorlatban a következőket fogja végrehajtani:

  • A stabil Helm-adattár konfigurálása
  • A MongoDB-diagram telepítése
  • Kubernetes-beli titkos kód létrehozása az adatbázis hitelesítő adatainak tárolásához

Az Azure Kubernetes Service-fürtön üzembe helyezett erőforrásokat megjelenítő diagram.

A Helm bitnami-adattár hozzáadása

A Helm a Kubernetes-hez készült alkalmazáscsomag-kezelő. Lehetővé teszi az alkalmazások és szolgáltatások egyszerű üzembe helyezését diagramok segítségével.

A Helm-ügyfél már telepítve van a Azure Cloud Shell, és az paranccsal helm futtatható. A Helm standard diagramadattárat biztosít számos különböző szoftvercsomaghoz. A MongoDB Helm-diagramja a Helm hivatalos bitnami diagramadattárának része.

  1. Konfigurálja a Helm-ügyfelet a stabil adattár használatára az alábbi parancs helm repo add futtatásával.

    helm repo add bitnami https://charts.bitnami.com/bitnami
    
  2. A helm search repo parancs futtatásával listázhatja a telepítendő diagramokat. Figyelje meg, hogy az alábbi parancsban a stabil csatornáról származó összes diagramot listába lehet sorolni.

    helm search repo bitnami
    

    Ekkor megjelenik az elérhető diagramok listája, az alábbi példához hasonlóan.

    NAME                           CHART VERSION   APP VERSION   DESCRIPTION
    bitnami/bitnami-common                  0.0.8           0.0.8                   Chart with custom templates used in Bitnami cha...
    bitnami/airflow                         6.1.8           1.10.10                 Apache Airflow is a platform to programmaticall...
    bitnami/apache                          7.3.15          2.4.43                  Chart for Apache HTTP Server
    bitnami/cassandra                       5.3.3           3.11.6                  Apache Cassandra is a free and open-source dist...
    ...
    

Helm-diagram telepítése

A Helm-diagramok a Kubernetes-erőforrások kapcsolódó készletét leíró fájlok gyűjteményei. Egyetlen diagram segítségével üzembe helyezhet egyszerű eszközöket, például egy Memcached-podot, de akár olyan összetett megoldásokat is, mint egy HTTP-kiszolgálókkal, adatbázisokkal és gyorsítótárakkal ellátott teljes webalkalmazás-verem.

A Helm-diagramokat a Helm-diagramtárak tárolják. A hivatalos diagramadattár kezelése a GitHubon történik. A Helm Hub segítségével fellelhető és megtekinthető az efféle diagramok dokumentációja.

Most már készen áll a MonogoDB-példány telepítésére. Emlékezhet, hogy a fürtöt egy ratingsapp névtérrel konfigurálta. A névteret a helm install parancs részeként adja meg, az adatbázis-kiadás nevével együtt. A kiadás neve ratings, és a ratingsapp névtérbe kerül.

  1. Futtassa a következő helm install parancsot. A <username> és <password> elemeket a megfelelő értékekkel helyettesítse sajátjaival, majd ezeket jegyezze fel.

    Ne feledje, hogy a MongoDB kapcsolati sztringje egy URI. Amikor speciális karaktereket ad meg a felhasználónévben vagy jelszóban, egy szabványos URI-feloldó mechanizmussal kell feloldania ezeket a karaktereket.

    helm install ratings bitnami/mongodb \
        --namespace ratingsapp \
        --set auth.username=<username>,auth.password=<password>,auth.database=ratingsdb
    

    A paramétereket a --set kapcsolóval és a key=value párok vesszővel elválasztott listájával kell megadnia. Figyelje meg a auth.username, a auth.password és a auth.database paramétereket, valamint a hozzájuk tartozó értékeket, amelyek a felhasználónevet, a jelszót és az adatbázis nevét adják meg. Az alkalmazás arra számít, hogy az adatbázis a ratingsdb nevet kapja. A helm install egy számos képességgel rendelkező hatékony parancs.

  2. A telepítés befejezése után az alábbihoz hasonló kimenetnek kell megjelennie. Jegyezze fel a MongoDB-gazdagép nevét, amely ugyanazon paraméterek használata esetén ratings-mongodb.ratingsapp.svc.cluster.local.

    NAME: ratings
    LAST DEPLOYED: Thu Apr 30 14:15:58 2020
    NAMESPACE: ratingsapp
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    ** Please be patient while the chart is being deployed **
    
    MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:
    ratings-mongodb.ratingsapp
    
    To get the root password run:
    
    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace ratingsapp ratings-mongodb -o jsonpath="{.data.mongodb-root-password}" |  base64 --decode)
    
    To get the password for "aksclusteradmin" run:
    
    export MONGODB_PASSWORD=$(kubectl get secret --namespace ratingsapp ratings-mongodb -o jsonpath="{.data.mongodb-password}" | base64 --decode)
    
    To connect to your database run the following command:
    
    kubectl run --namespace ratingsapp ratings-mongodb-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mongodb:4.2.6-debian-10-r13 --command -- mongo admin --host ratings-mongodb --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
    
    To connect to your database from outside the cluster execute the following commands:
    
    kubectl port-forward --namespace ratingsapp svc/ratings-mongodb 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
    

    A Helm-kiadásokat könnyen eltávolíthatja a helm uninstall paranccsal. A teljes parancs a következő: helm uninstall ratings --namespace ratingsapp. Ebben a gyakorlatban diagram eltávolítására csak akkor van szükség, ha hibát vétett egy nem feloldott felhasználónév vagy jelszó megadásakor.

Kubernetes-beli titkos kód létrehozása a MongoDB-adatok tárolásához

Az előző lépésben a Helm használatával telepítette a MongoDB-t, amelyhez egy adott felhasználónév, jelszó és adatbázisnév tartozik. Most az adatokat egy Kubernetes-beli titkos kódban tárolja. Ezzel a lépéssel gondoskodhat arról, hogy ne szivárogtasa ki a titkos kódokat a konfigurációs fájlokba.

A Kubernetes egyik alapfogalma a titkos kód. A titkos kódok lehetővé teszik az olyan bizalmas információk tárolását és kezelését, mint a jelszavak. Ezt az információt biztonságosabb és rugalmasabb titkos kódba helyezni, mint egy poddefinícióban vagy tárolórendszerképben.

A ratings API arra számít, hogy a MongoDB-adatbázis kapcsolati adatait mongodb://<username>:<password>@<endpoint>:27017/ratingsdb formátumban találja meg. Cserélje le a <username>, <password> és <endpoint> értékeket az adatbázis létrehozásakor használtakra, például a következőre: mongodb://ratingsuser:ratingspassword@ratings-mongodb.ratingsapp:27017/ratingsdb.

  1. A kubectl create secret generic parancs használatával hozzon létre egy mongosecret nevű titkos kulcsot a ratingsapp névtérben. A Kubernetes titkos kód több elemet is tárolhat, és egy kulcs indexeli. Ebben az esetben a titkos kód csak egyetlen MONGOCONNECTION nevű kulcsot tartalmaz. Az érték az előző lépésben megadott kapcsolati sztring. Cserélje le a <username> és a <password> értékeket az adatbázis létrehozásakor használtakra.

    kubectl create secret generic mongosecret \
        --namespace ratingsapp \
        --from-literal=MONGOCONNECTION="mongodb://<username>:<password>@ratings-mongodb.ratingsapp:27017/ratingsdb"
    
  2. A titkos kód ellenőrzéséhez futtassa a kubectl describe secret parancsot.

    kubectl describe secret mongosecret --namespace ratingsapp
    

    A parancs kimenete az alábbihoz hasonlóan néz ki.

    Name:         mongosecret
    Namespace:    ratingsapp
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    MONGOCONNECTION:  98 bytes
    

Most már rendelkezik egy ratingsapp nevű névtérben konfigurált, MongoDB-adatbázissal rendelkező AK-fürttel. Ebben a névtérben a következő erőforrások találhatók:

  • Üzemelő példány/ratings-mongodb: Az üzemelő példány egy vagy több azonos podot jelöl, amelyet a Kubernetes-telepítésvezérlő kezel. Ez az üzemelő példány határozza meg a MongoDB számára létrehozandó replikák (podok) számát. A Kubernetes-ütemező biztosítja, hogy ha a podok vagy a csomópontok problémákba ütköznek, további podok legyenek ütemezve a megfelelő állapotú csomópontokon.

  • Pod/ratings-mongodb-{véletlenszerű sztring}: A Kubernetes podok használatával futtatja a MongoDB egy példányát.

  • Szolgáltatás/ratings-mongodb: A hálózati konfiguráció egyszerűsítése érdekében a Kubernetes szolgáltatások segítségével foglalja csoportba a podokat és biztosítja logikai alapon a hálózati kapcsolatot. A MongoDB-adatbázissal való kapcsolat ezen a szolgáltatáson keresztül érhető el a ratings-mongodb.ratingsapp.svc.cluster.local DNS-név használatával.

  • Titkos kód/mongosecret: A Kubernetes titkos kóddal bizalmas adatokat, például hitelesítő adatokat vagy kulcsokat vihet át a podokba. Ez a titkos kód tárolja a MongoDB kapcsolati adatait. A következő leckében ezt a kódot fogja használni az API konfigurálásához a MongoDB-vel való kapcsolattartáshoz.

Összefoglalás

Ebben a gyakorlatban konfigurálta a stabil Helm-adattárat, majd egy Helm-diagrammal üzembe helyezte a MongoDB-t a fürtön. Ezután létrehozott egy Kubernetes-beli titkos kódot az adatbázis hitelesítő adatainak tárolásához.

A következőkben üzembe helyezi a Fruit Smoothies ratings-api-t az AKS-fürtön.