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
-
Si vous n'avez pas encore de IBM Cloud compte, inscrivez-vous ici.
-
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.
-
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-registryPour vérifier leur installation, exécutez
ibmcloud plugin listVous 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 -
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.
-
Connectez-vous à IBM Cloud dans l'outil CLI et suivez les instructions pour vous connecter.
ibmcloud loginSi vous disposez d'un ID fédéré, utilisez la commande
ibmcloud login --ssopour 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.
-
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).
-
La base de données peut être créée à partir de l'interface CLI à l'aide de la
ibmcloud resource service-instance-createcommande. La commande prend un nom d'instance de service, un nom de service, un nom de plan et un emplacement. -
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,, oudatabases-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
-
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.
-
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. -
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> -
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 privateLe 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 commandeibmcloud ks cluster service bind <YOUR_CLUSTER_NAME> default <INSTANCE_NAME_OR_CRN> --key <YOUR-PRIVATE-KEY> -
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=defaultSauvegardez le nom du secret généré lorsque vous avez lié
your_database_nameà votre service Kubernetes. -
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 -
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 dansserver.js. Voir Structure de code et les commentaires de code pour plus d'informations sur les fonctions de l'application. Unpublicré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. -
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 imagesLe 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 -
Mettez à jour le fichier de configuration de déploiement Kubernetes
clouddb-deployment.yaml.Remplacez le nom de l'
imagepar le nom du référentiel que vous avez obtenu à l'étape précédente :image: "<REGION>.icr.io/mynamespace/<container_name>" # Edit meMaintenant, 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 meQuant à la
serviceconfiguration à la fin du fichier,nodePortindique 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
-
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 -
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_1536Vous 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
| 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.