6.4. Premiers pas avec la liaison de service
Le Service Binding Operator gère le plan de données pour les charges de travail et les services d'appui. Ce guide fournit des instructions et des exemples pour vous aider à créer une instance de base de données, à déployer une application et à utiliser l'opérateur de liaison de services pour créer une connexion de liaison entre l'application et le service de base de données.
Conditions préalables
-
Vous avez accès à un cluster OpenShift Container Platform en utilisant un compte avec des permissions
cluster-admin
. -
Vous avez installé le CLI
oc
. - Vous avez installé Service Binding Operator depuis OperatorHub.
Vous avez installé la version 5.1.2 de l'Opérateur Crunchy Postgres pour Kubernetes depuis OperatorHub en utilisant le canal v5 Update. L'opérateur installé est disponible dans un espace de noms approprié, tel que l'espace de noms
my-petclinic
.NoteVous pouvez créer l'espace de noms à l'aide de la commande
oc create namespace my-petclinic
.
6.4.1. Création d'une instance de base de données PostgreSQL
Pour créer une instance de base de données PostgreSQL, vous devez créer une ressource personnalisée (CR) PostgresCluster
et configurer la base de données.
Procédure
Créez le CR
PostgresCluster
dans l'espace de nomsmy-petclinic
en exécutant la commande suivante dans l'interpréteur de commandes :$ oc apply -n my-petclinic -f - << EOD --- apiVersion: postgres-operator.crunchydata.com/v1beta1 kind: PostgresCluster metadata: name: hippo spec: image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-14.4-0 postgresVersion: 14 instances: - name: instance1 dataVolumeClaimSpec: accessModes: - "ReadWriteOnce" resources: requests: storage: 1Gi backups: pgbackrest: image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi8-2.38-0 repos: - name: repo1 volume: volumeClaimSpec: accessModes: - "ReadWriteOnce" resources: requests: storage: 1Gi EOD
Les annotations ajoutées dans cette CR
PostgresCluster
activent la connexion de liaison de service et déclenchent le rapprochement de l'opérateur.La sortie vérifie que l'instance de la base de données est créée :
Exemple de sortie
postgrescluster.postgres-operator.crunchydata.com/hippo created
Après avoir créé l'instance de la base de données, assurez-vous que tous les pods de l'espace de noms
my-petclinic
sont en cours d'exécution :$ oc get pods -n my-petclinic
La sortie, qui prend quelques minutes à s'afficher, vérifie que la base de données est créée et configurée :
Exemple de sortie
NAME READY STATUS RESTARTS AGE hippo-backup-9rxm-88rzq 0/1 Completed 0 2m2s hippo-instance1-6psd-0 4/4 Running 0 3m28s hippo-repo-host-0 2/2 Running 0 3m28s
Une fois la base de données configurée, vous pouvez déployer l'application d'exemple et la connecter au service de base de données.
6.4.2. Déploiement de l'exemple d'application Spring PetClinic
Pour déployer l'application d'exemple Spring PetClinic sur un cluster OpenShift Container Platform, vous devez utiliser une configuration de déploiement et configurer votre environnement local pour pouvoir tester l'application.
Procédure
Déployez l'application
spring-petclinic
avec la ressource personnalisée (CR)PostgresCluster
en exécutant la commande suivante dans le shell :$ oc apply -n my-petclinic -f - << EOD --- apiVersion: apps/v1 kind: Deployment metadata: name: spring-petclinic labels: app: spring-petclinic spec: replicas: 1 selector: matchLabels: app: spring-petclinic template: metadata: labels: app: spring-petclinic spec: containers: - name: app image: quay.io/service-binding/spring-petclinic:latest imagePullPolicy: Always env: - name: SPRING_PROFILES_ACTIVE value: postgres ports: - name: http containerPort: 8080 --- apiVersion: v1 kind: Service metadata: labels: app: spring-petclinic name: spring-petclinic spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: spring-petclinic EOD
La sortie vérifie que l'exemple d'application Spring PetClinic est créé et déployé :
Exemple de sortie
deployment.apps/spring-petclinic created service/spring-petclinic created
NoteSi vous déployez l'application à l'aide de Container images dans la perspective Developer de la console web, vous devez entrer les variables d'environnement suivantes dans la section Deployment de la page Advanced options:
- Nom : SPRING_PROFILES_ACTIVE
- Valeur : postgres
Vérifiez que l'application n'est pas encore connectée au service de base de données en exécutant la commande suivante :
$ oc get pods -n my-petclinic
La sortie prend quelques minutes pour afficher l'état de
CrashLoopBackOff
:Exemple de sortie
NAME READY STATUS RESTARTS AGE spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
À ce stade, le pod ne démarre pas. Si vous essayez d'interagir avec l'application, elle renvoie des erreurs.
Exposez le service pour créer une route pour votre application :
$ oc expose service spring-petclinic -n my-petclinic
La sortie vérifie que le service
spring-petclinic
est exposé et qu'une route pour l'exemple d'application Spring PetClinic est créée :Exemple de sortie
route.route.openshift.io/spring-petclinic exposed
Vous pouvez maintenant utiliser l'opérateur de liaison de service pour connecter l'application au service de base de données.
6.4.3. Connexion de l'application d'exemple Spring PetClinic au service de base de données PostgreSQL
Pour connecter l'exemple d'application au service de base de données, vous devez créer une ressource personnalisée (CR) ServiceBinding
qui déclenche le Service Binding Operator pour projeter les données de liaison dans l'application.
Procédure
Créez un CR
ServiceBinding
pour projeter les données de la reliure :$ oc apply -n my-petclinic -f - << EOD --- apiVersion: binding.operators.coreos.com/v1alpha1 kind: ServiceBinding metadata: name: spring-petclinic-pgcluster spec: services: 1 - group: postgres-operator.crunchydata.com version: v1beta1 kind: PostgresCluster 2 name: hippo application: 3 name: spring-petclinic group: apps version: v1 resource: deployments EOD
La sortie vérifie que le CR
ServiceBinding
est créé pour projeter les données de reliure dans l'exemple d'application.Exemple de sortie
servicebinding.binding.operators.coreos.com/spring-petclinic created
Vérifier que la demande de liaison de service a abouti :
$ oc get servicebindings -n my-petclinic
Exemple de sortie
NAME READY REASON AGE spring-petclinic-pgcluster True ApplicationsBound 7s
Par défaut, les valeurs des données de liaison du service de base de données sont projetées sous forme de fichiers dans le conteneur de charge de travail qui exécute l'exemple d'application. Par exemple, toutes les valeurs de la ressource Secret sont projetées dans le répertoire
bindings/spring-petclinic-pgcluster
.NoteEn option, vous pouvez également vérifier que les fichiers de l'application contiennent les données de reliure projetées, en imprimant le contenu du répertoire :
$ for i in username password host port type; do oc exec -it deploy/spring-petclinic -n my-petclinic -- /bin/bash -c 'cd /tmp; find /bindings/*/'$i' -exec echo -n {}:" " \; -exec cat {} \;'; echo; done
Exemple de résultat : Avec toutes les valeurs de la ressource secrète
/bindings/spring-petclinic-pgcluster/username: hippo /bindings/spring-petclinic-pgcluster/password: KXKF{nAI,I-J6zLt:W+FKnze /bindings/spring-petclinic-pgcluster/host: hippo-primary.my-petclinic.svc /bindings/spring-petclinic-pgcluster/port: 5432 /bindings/spring-petclinic-pgcluster/type: postgresql
Configurez le transfert de port à partir du port d'application pour accéder à l'exemple d'application à partir de votre environnement local :
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
Exemple de sortie
Forwarding from 0.0.0.0:8080 -> 8080 Handling connection for 8080
Accès http://localhost:8080/petclinic.
Vous pouvez maintenant accéder à distance à l'application d'exemple Spring PetClinic sur localhost:8080 et constater que l'application est désormais connectée au service de base de données.