Connecter un déploiement Cloud Databases à une application IBM Cloud Kubernetes Service

Le dépôt d'exemples Cloud Databases "Hello World" Kubernetes examples repository contient des exemples d'applications IBM Cloud®, écrites dans différents langages de programmation, qui expliquent comment connecter un déploiement Cloud Databases à une application IBM Cloud Kubernetes Service

Chaque Git branche du référentiel d'exemples correspond à des exemples dans un langage de programmation particulier, soit JavaScript qui utilise Node.js, soit python. Les fichiers dans chaque dossier correspondent soit à une base de données, soit à une file d'attente de messages.

Essai des exemples d'applications

Clonez le repo respectif que vous souhaitez utiliser. Par exemple, vous pouvez cloner le référentiel Node en sélectionnant la branche Node. Cliquez ensuite sur Clone or download pour obtenir l'URL dont vous avez besoin pour cloner à l'aide de SSH ou HTTPS. Cette commande se présente comme suit :

git clone -b node git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

Ou encore, cloner en utilisant HTTPS:

git clone -b node https://github.com/IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git

Une fois la branche clonée, sélectionnez le répertoire approprié pour la base de données que vous souhaitez essayer. Chaque base de données possède sa propre copie de ces instructions sur la manière de mettre à disposition et de déployer une base de données ou une file d'attente de messages et une application sur IBM Cloud Kubernetes Service.

Exécution sous IBM Cloud

  1. Si vous n'avez pas encore de IBM Cloud compte, inscrivez-vous ici.

  2. Téléchargez et installez IBM Cloud CLI. L'outil IBM Cloud CLI vous permet de communiquer avec IBM Cloud depuis votre console ou votre CLI.

  3. Installez le plug-in de la CLI Kubernetes Service et le plug-in de la CLI de Container Registry

    ibmcloud plugin install container-service
    ibmcloud plugin install container-registry
    

    Pour vérifier leur installation, exécutez

    ibmcloud plugin list
    

    Vous recevez une réponse comme celle-ci :

    Listing installed plug-ins...
    
    Plugin Name                            Version   Status
    container-registry                     0.1.382
    container-service/kubernetes-service   0.3.34
    
  4. Téléchargez et installez l'interface Kubernetes CLI.

    Suivez les instructions pour télécharger et installer l'interface Kubernetes CLI pour la plateforme que vous utilisez.

  5. Connectez-vous à IBM Cloud dans l'outil CLI et suivez les instructions pour vous connecter.

    ibmcloud login
    

    Si vous disposez d'un ID fédéré, utilisez la commande ibmcloud login --sso pour vous connecter avec un ID de connexion unique.

Création de votre base de données

Ce processus crée une instance de base de données standard dans le service que vous spécifiez et qui peut entraîner des frais supplémentaires dans le plan que vous avez choisi.

  1. Vous devez cibler un groupe de ressources en utilisant la commande suivante :

    ibmcloud target -g <RESOURCE_GROUP>
    

Pour plus d'informations, consultez la section Utilisation des ressources et des groupes de ressources(ressource ibmcloud).

  1. La base de données peut être créée à partir de l'interface CLI à l'aide de la ibmcloud resource service-instance-create commande. La commande prend un nom d'instance de service, un nom de service, un nom de plan et un emplacement.

  2. Le nom du service est l'un des Cloud Databases services suivants databases-for-elasticsearch: databases-for-mongodb, databases-for-postgresql, databases-for-redis, messages-for-rabbitmq,, ou databases-for-mysql.

    ibmcloud resource service-instance-create <INSTANCE_NAME> <SERVICE_NAME> standard <REGION>
    

Mémorisez le nom de l'instance de base de données. Recherchez votre identificateur de région ici.

L'exemple précédent prévoit une instance Shared Compute. Pour plus d'informations, voir la présentation des modèles d'hébergement.

Configuration de l'application Kubernetes

  1. Créer un Kubernetes Service Choisissez l'emplacement et le groupe de ressources dans lequel vous souhaitez configurer votre cluster. Sélectionnez le type de cluster que vous souhaitez utiliser. Cet exemple ne nécessite que le plan Lite, qui comprend un nœud de travail. Une fois le cluster provisionné, vous obtenez une liste d'étapes à suivre pour accéder à votre cluster et définir les variables d'environnement sous l'onglet Accès. Vous pouvez également vérifier que votre déploiement est mis à disposition et s'exécute normalement.

  2. Veillez à cibler le groupe de ressources IBM Cloud approprié de votre Kubernetes Service.

    Si votre groupe de ressources porte un nom autre que default, utilisez la commande suivante pour cibler le groupe de ressources de votre cluster :

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    

    Cet exemple utilise le groupe de ressources default.

  3. Créez votre propre référentiel d'images privé dans Container Registry pour stocker l'image Docker de votre application. Puisque nous voulons que les images soient privées, nous devons créer un espace de nom, ce qui crée une URL unique pour votre référentiel d'images.

    ibmcloud cr namespace-add <YOUR_NAMESPACE>
    
  4. Ajoutez le déploiement Cloud Databases à votre cluster.

    ibmcloud ks cluster service bind --cluster <YOUR_CLUSTER_NAME> --namespace default    --service <INSTANCE_NAME_OR_CRN>
    

    L'espace de noms « par défaut » fait référence à Kubernetes l'instance et non à l'espace de noms du magasin d'images créé par l'utilisateur. De même, si votre base de données utilise des noeuds finaux publics et privés, votre noeud final public est utilisé par défaut. Par conséquent, si vous souhaitez sélectionner le noeud final privé, vous devez d'abord créer une clé de service pour votre base de données afin que Kubernetes puisse l'utiliser lors de la liaison à la base de données. Vous configurez une clé de service à l'aide de la commande :

    ibmcloud resource service-key-create <YOUR-PRIVATE-KEY> --instance-name    <INSTANCE_NAME_OR_CRN> --service-endpoint private  
    

    Le noeud final de service privé est sélectionné avec --service-endpoint private. Ensuite, vous liez la base de données au Kubernetes cluster via le point de terminaison privé à l'aide de la commande

    ibmcloud ks cluster service bind <YOUR_CLUSTER_NAME> default    <INSTANCE_NAME_OR_CRN> --key <YOUR-PRIVATE-KEY>
    
  5. Vérifiez que le secret Kubernetes a bien été créé dans votre espace de noms de cluster. Kubernetes utilise des secrets pour stocker des informations confidentielles telles que la clé de l'API d'IBM Cloud Identity and Access Management (IAM) et l'URL utilisée par le conteneur pour y accéder. Pour définir le cluster comme contexte de cette session et obtenir la clé API permettant d'accéder à l'instance de votre déploiement, exécutez les commandes suivantes

    ibmcloud ks cluster config --cluster <CLUSTER_NAME_OR_ID>
    

    Procédure

    kubectl get secrets --namespace=default
    

    Sauvegardez le nom du secret généré lorsque vous avez lié your_database_name à votre service Kubernetes.

  6. Si vous ne l'avez pas déjà fait, clonez l'application dans l'une des langues disponibles dans votre environnement local à partir de votre console à l'aide de la commande suivante

    git clone -b <LANGUAGE> git@github.com:IBM-Cloud/clouddatabases-helloworld-kubernetes-examples.git
    
  7. Accédez (cd) à ce nouveau répertoire, et accédez (cd) au dossier de base de données. Le code de connexion au service, ainsi que la lecture et la mise à jour de la base de données se trouvent dans server.js. Voir Structure de code et les commentaires de code pour plus d'informations sur les fonctions de l'application. Un public répertoire contient le code HTML, les feuilles de style et les fichiers JavaScript pour l'application web. Cependant, pour que l'application fonctionne, nous devons d'abord transférer Docker l'image de cette application vers notre Container Registry.

  8. Générez et insérez l'image Docker de l'application dans votre registre Container Registry. Indiquez la région appropriée et donnez un nom au conteneur.

    ibmcloud cr build -t <REGION>.icr.io/<NAMESPACE>/<CONTAINER_NAME> .
    

    Vous pouvez afficher l'image dans le registre de conteneurs à l'aide de

    ibmcloud cr images
    

    Le résultat se présente comme suit

    REPOSITORY                                TAG      DIGEST        NAMESPACE   CREATED       SIZE    SECURITY STATUS
    <region>.icr.io/mynamespace/container_name latest   81c3959ea657  mynamespace 4 hours ago   28 MB   No Issues
    
  9. Mettez à jour le fichier de configuration de déploiement Kubernetes clouddb-deployment.yaml.

    Remplacez le nom de l'image par le nom du référentiel que vous avez obtenu à l'étape précédente :

    image: "<REGION>.icr.io/mynamespace/<container_name>" # Edit me
    

    Maintenant, sous secretKeyRef, modifiez le nom de <db-secret-name> pour qu'il corresponde au nom du secret qui a été créé lorsque vous avez lié le déploiement de votre base de données à votre Kubernetes cluster.

    secretKeyRef:
       name: <DB-SECRET-NAME> # Edit me
    

    Quant à la service configuration à la fin du fichier, nodePort indique le port à partir duquel l'application est accessible. Il existe des ports dans la plage 30000 à 32767 que vous pouvez utiliser, mais nous avons choisi 30081. Le port TCP est défini sur 8080, qui est le port sur lequel Node.js l'application s'exécute dans le conteneur.

Déploiement de l'application Kubernetes

  1. Déployez l'application dans Kubernetes Service. Lorsque vous déployez l'application, elle est automatiquement liée à votre cluster Kubernetes.

    kubectl apply -f clouddb-deployment.yaml
    
  2. Récupérez l'adresse IP de l'application.

    ibmcloud ks workers -c <CLUSTER_NAME>
    

    Le résultat se présente comme suit :

    ID                                                 Public IP        PrivateIP      Machine Type   State    Status   Zone    Version
    kube-hou02-pa1a59e9fd92f44af9b4147a27a31db5c4-w1   199.199.99.999   10.76202.188   free           normal   Ready    hou02   1.10.11_1536
    

    Vous pouvez maintenant accéder à l'application à partir de l'adresse IP publique sur le port 30082.

    L'application clouddatabases-helloworld affiche le contenu d'une base de données d'exemples. Pour démontrer que l'application est connectée à votre service, ajoutez des mots à la base de données. Les mots sont affichés au fur et à mesure que vous les ajoutez, avec les mots les plus récents affichés en premier.

Structure du code

Structure du code
Fichier Description
server.js Établit une connexion à la base de données à l'aide des informations d'identification de BINDING (le nom que nous avons créé dans le Kubernetes fichier de déploiement pour afficher les informations d'identification) et gère les opérations de création et de lecture dans la base de données.
main.js Gère l'entrée utilisateur pour une commande PUT et analyse les résultats d'une commande GET pour générer le contenu de la base de données.

L'application utilise une opération PUT et une opération GET :

  • PUT

    • Prend l'entrée utilisateur à partir du fichier main.js.
    • Ajoute l'entrée utilisateur à la base de données.
  • GET

    • Extrait le contenu de la base de données.
    • Renvoie la réponse de la commande de base de données à main.js.