1
0
mirror of https://github.com/openshift/openshift-docs.git synced 2026-02-05 12:46:18 +01:00

sbo 1.0.1 changes for IBM Z and P

This commit is contained in:
SNiemann15
2022-02-18 15:40:51 +01:00
committed by openshift-cherrypick-robot
parent 031851c470
commit 9b13a3811e
6 changed files with 82 additions and 149 deletions

View File

@@ -7,6 +7,7 @@ include::_attributes/servicebinding-document-attributes.adoc[]
toc::[]
[role="_abstract"]
The {servicebinding-title} manages the data plane for workloads and backing services. This guide provides instructions with examples to help you create a database instance, deploy an application, and use the {servicebinding-title} to create a binding connection between the application and the database service.
// Prerequisites for getting started with Service Binding Operator
@@ -15,7 +16,6 @@ The {servicebinding-title} manages the data plane for workloads and backing serv
* You have access to an {product-title} cluster using an account with `cluster-admin` permissions.
* You have installed the `oc` CLI.
* You have installed PostgreSQL `psql` CLI.
* You have installed the {servicebinding-title} from OperatorHub.
//Deploying PostgreSQL operator
@@ -30,9 +30,8 @@ include::modules/sbo-deploying-the-spring-petclinic-sample-application-power-z.a
//Connecting the Spring PetClinic sample application to the PostgreSQL database service
include::modules/sbo-connecting-spring-petclinic-sample-app-to-postgresql-database-service-power-z.adoc[leveloffset=+1]
[id="additional-resources_getting-started-with-service-binding-ibm-power-ibm-z"]
[role="_additional-resources"]
[id="additional-resources_getting-started-with-service-binding-ibm-power-ibm-z"]
== Additional resources
* xref:../../applications/connecting_applications_to_services/installing-sbo.adoc#installing-sbo[Installing Service Binding Operator]
* xref:../../applications/creating_applications/odc-creating-applications-using-developer-perspective.adoc#odc-creating-applications-using-developer-perspective[Creating applications using the Developer perspective]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

@@ -2,6 +2,7 @@
[id="sbo-connecting-spring-petclinic-sample-app-to-postgresql-database-service-ibm-power-z_{context}"]
= Connecting the Spring PetClinic sample application to the PostgreSQL database service
[role="_abstract"]
To connect the sample application to the database service, you must create a `ServiceBinding` custom resource (CR) that triggers the {servicebinding-title} to project the binding data into the application.
[discrete]
@@ -11,25 +12,23 @@ To connect the sample application to the database service, you must create a `Se
+
[source,terminal]
----
$ oc apply -f - << EOD
$ oc apply -n my-petclinic -f - << EOD
---
apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
name: spring-petclinic-rest
namespace: my-postgresql
name: spring-petclinic-pgcluster
spec:
services: <1>
services: <1>
- group: postgresql.dev4devs.com
version: v1beta1
kind: Database <2>
name: sampledatabase
version: v1alpha1
application: <3>
name: spring-petclinic-rest
group: apps
version: v1
resource: deployments
application: <3>
name: spring-petclinic
group: apps
version: v1
resource: deployments
EOD
----
<1> Specifies a list of service resources.
@@ -41,77 +40,45 @@ The output verifies that the `ServiceBinding` CR is created to project the bindi
.Example output
[source,terminal]
----
servicebinding.binding.operators.coreos.com/spring-petclinic-rest created
servicebinding.binding.operators.coreos.com/spring-petclinic created
----
. To verify that the binding is successful, check the status conditions of the binding resource:
. Verify that the request for service binding is successful:
+
[source,terminal]
----
$ oc get servicebindings spring-petclinic-rest -n my-postgresql -o jsonpath-as-json='{.status.conditions}'
$ oc get servicebindings -n my-petclinic
----
+
.Example output
[source,terminal]
----
[
[
{
"lastTransitionTime": "2021-09-06T13:42:28Z",
"message": "",
"reason": "DataCollected",
"status": "True",
"type": "CollectionReady",
},
{
"lastTransitionTime": "2021-09-06T13:42:28Z",
"message": "",
"reason": "ApplicationUpdated",
"status": "True",
"type": "InjectionReady",
},
{
"lastTransitionTime": "2021-09-06T13:42:28Z",
"message": "",
"reason": "ApplicationsBound",
"status": "True",
"type": "Ready",
},
],
]
NAME READY REASON AGE
spring-petclinic-postgresql True ApplicationsBound 47m
----
+
By default, the values from the binding data of the database service are projected as files into the workload container that runs the sample application.
By default, the values from the binding data of the database service are projected as files into the workload container that runs the sample application. For example, all the values from the Secret resource are projected into the `bindings/spring-petclinic-pgcluster` directory.
. Once this is created, you can go to the topology to see the visual connection.
+
.Connecting spring-petclinic-rest to sampledatabase
.Connecting spring-petclinic to a sample database
image::img_power.png[]
. Set up the port forwarding from the application port to access the sample application from your local environment:
+
[source,terminal]
----
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic-rest 9966:80 -n my-postgresql
----
. Access link:http://localhost:9966/petclinic[http://localhost:9966/petclinic].
+
You can now remotely access the Spring PetClinic sample application at localhost:9966.
. To verify that the application is now connected to the database service, access the list of all pets:
+
[source,terminal]
----
$ curl -X GET "http://localhost:9966/petclinic/api/pets" -H "accept: application/json"
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
----
+
.Example output
[source,terminal]
----
[{"id":1,"name":"Leo","birthDate":"2000/09/07","type":{"id":1,"name":"cat"},
"owner":{"id":1,"firstName":"George","lastName":"Franklin","address":"110...
Forwarding from 0.0.0.0:8080 -> 8080
Handling connection for 8080
----
+
The previous output shows the initially configured sample data and verifies that the application is now connected to the database service.
. Access link:http://localhost:8080[http://localhost:8080].
+
You can now remotely access the Spring PetClinic sample application at localhost:8080 and see that the application is now connected to the database service.

View File

@@ -2,11 +2,12 @@
[id="sbo-creating-a-postgresql-database-instance-power-z_{context}"]
= Creating a PostgreSQL database instance
[role="_abstract"]
To create a PostgreSQL database instance, you must create a `Database` custom resource (CR) and configure the database.
.Procedure
. Create the `Database` CR and the `my-postgresql` namespace by running the following command in shell:
. Create the `Database` CR in the `my-petclinic` namespace by running the following command in shell:
+
[source,terminal]
----
@@ -15,7 +16,7 @@ apiVersion: postgresql.dev4devs.com/v1alpha1
kind: Database
metadata:
name: sampledatabase
namespace: my-postgresql
namespace: my-petclinic
annotations:
host: sampledatabase
type: postgresql
@@ -38,7 +39,7 @@ spec:
databaseStorageRequest: 1Gi
databaseUser: "sampleuser"
databaseUserKeyEnvVar: POSTGRESQL_USER
image: registry.redhat.io/rhel8/postgresql-96:latest
image: registry.redhat.io/rhel8/postgresql-13:latest
databaseStorageClassName: nfs-storage-provisioner
size: 1
EOD
@@ -54,14 +55,14 @@ The output verifies that the database instance is created:
database.postgresql.dev4devs.com/sampledatabase created
----
. After you have created the database instance, ensure that all the pods in the `my-postgresql` namespace are running (it will take a few minutes):
. After you have created the database instance, ensure that all the pods in the `my-petclinic` namespace are running:
+
[source,terminal]
----
$ oc get pods -n my-postgresql
$ oc get pods -n my-petclinic
----
+
The output verifies that the database is created:
The output, which takes a few minutes to display, verifies that the database is created and configured:
+
.Example output
[source,terminal]
@@ -69,29 +70,5 @@ The output verifies that the database is created:
NAME READY STATUS RESTARTS AGE
sampledatabase-cbc655488-74kss 0/1 Running 0 32s
----
+
The new database is empty at this stage. You can set its schema and project a sample data set to interact with the sample application.
. Initialize the database with the schema and sample data. To do so, use the following custom shell script by copying the code into the shell and running it:
+
[source,terminal]
----
$ cat << EOD | bash
#!/bin/bash
export pgo_cluster_name=sampledb
export cluster_namespace=my-postgresql
export pgo_cluster_username=sampleuser
nohup oc -n "\${cluster_namespace}" port-forward svc/sampledatabase 5432:5432 &
sleep 5
curl -LO https://raw.githubusercontent.com/spring-petclinic/spring-petclinic-rest/master/src/main/resources/db/postgresql/initDB.sql
psql -h localhost -U "\${pgo_cluster_username}" "\${pgo_cluster_name}" -f initDB.sql
curl -LO https://raw.githubusercontent.com/spring-petclinic/spring-petclinic-rest/master/src/main/resources/db/postgresql/populateDB.sql
psql -h localhost -U "\${pgo_cluster_username}" "\${pgo_cluster_name}" -f populateDB.sql
EOD
----
The output in the terminal shows you that the database is being configured for the application.
After the database is configured, you can deploy the sample application and connect it to the database service.

View File

@@ -1,7 +1,10 @@
:_content-type: PROCEDURE
[id="sbo-deploying-a-postgresql-operator-instance-power-z_{context}"]
= Deploying a PostgreSQL Operator
* To deploy the Dev4Devs PostgreSQL Operator in the `my-postgresql` namespace run the following command in shell:
.Procedure
. To deploy the Dev4Devs PostgreSQL Operator in the `my-petclinic` namespace run the following command in shell:
[source,terminal]
----
@@ -10,13 +13,13 @@ $ oc apply -f - << EOD
apiVersion: v1
kind: Namespace
metadata:
name: my-postgresql
name: my-petclinic
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: postgres-operator-group
namespace: my-postgresql
namespace: my-petclinic
---
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
@@ -64,11 +67,15 @@ EOD
* For IBM Power: `quay.io/ibm/operator-registry-ppc64le:release-4.9`
* For IBM Z and LinuxONE: `quay.io/ibm/operator-registry-s390x:release-4.8`
After the operator is installed, list the operator subscriptions in `openshift-operators` namespace:
.Verification
. After the operator is installed, list the operator subscriptions in the `openshift-operators` namespace:
+
[source,terminal]
----
$ oc get subs -n openshift-operators
----
+
.Example output
[source,terminal]
----

View File

@@ -2,58 +2,61 @@
[id="sbo-deploying-the-spring-petclinic-sample-application-ibm-power-z_{context}"]
= Deploying the Spring PetClinic sample application
[role="_abstract"]
To deploy the Spring PetClinic sample application on an {product-title} cluster, you must use a deployment configuration and configure your local environment to be able to test the application.
[discrete]
.Procedure
. Deploy the `spring-petclinic-rest` application with the `PostgresCluster` custom resource (CR) by running the following command in shell:
. Deploy the `spring-petclinic` application with the `PostgresCluster` custom resource (CR) by running the following command in shell:
+
[source,terminal]
----
$ oc apply -f - << EOD
$ oc apply -n my-petclinic -f - << EOD
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-petclinic-rest
namespace: my-postgresql
name: spring-petclinic
labels:
app: spring-petclinic-rest
app: spring-petclinic
spec:
replicas: 1
selector:
matchLabels:
app: spring-petclinic-rest
app: spring-petclinic
template:
metadata:
labels:
app: spring-petclinic-rest
app: spring-petclinic
spec:
containers:
- name: application
image: quay.io/service-binding/spring-petclinic-rest:latest
- name: app
image: quay.io/service-binding/spring-petclinic:latest
imagePullPolicy: Always
env:
- name: SPRING_PROFILES_ACTIVE
value: postgresql,spring-data-jpa
value: postgres
- name: org.springframework.cloud.bindings.boot.enable
value: "true"
ports:
- name: http
containerPort: 9966
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: spring-petclinic-rest
namespace: my-postgresql
labels:
app: spring-petclinic
name: spring-petclinic
spec:
type: NodePort
ports:
- port: 80
targetPort: 9966
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: spring-petclinic-rest
---
app: spring-petclinic
EOD
----
+
@@ -62,55 +65,35 @@ The output verifies that the Spring PetClinic sample application is created and
.Example output
[source,terminal]
----
deployment.apps/spring-petclinic-rest created
service/spring-petclinic-rest created
deployment.apps/spring-petclinic created
service/spring-petclinic created
----
+
[source,terminal]
----
$ oc get pods -n my-postgresql
----
+
The output verifies that the database is created:
+
.Example output
[source,terminal]
----
NAME READY STATUS RESTARTS AGE
sampledatabase-cbc655488-6n25f 0/1 Running 0 1m
spring-petclinic-rest-7659d5b774-zkjpg 2/2 Running 0 2m
----
+
. Set up port forwarding from the application port to access the sample application from your local environment:
+
[source,terminal]
----
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic-rest 9966:80 -n my-postgresql
----
. Access link:http://localhost:9966/petclinic[http://localhost:9966/petclinic].
+
You can now remotely access the Spring PetClinic sample application at localhost:9966.
+
[NOTE]
====
The application is not yet connected to the database service. If you try to interact with the application, it will return errors.
If you are deploying the application using *Container images* in the *Developer* perspective of the web console, you must enter the following environment variables under the *Deployment* section of the *Advanced options*:
* Name: SPRING_PROFILES_ACTIVE
* Value: postgres
====
. Verify that the application is not yet connected to the database service by running the following command:
+
For example, if you try to access the list of all pets using `curl`, you can see an error message similar to the following sample message:
[source,terminal]
----
$ oc get pods -n my-petclinic
----
+
[source,text]
----
$ curl -X GET "http://localhost:9966/petclinic/api/pets" -H "accept: application/json"
----
It takes take a few minutes until the `CrashLoopBackOff` status is displayed:
+
.Example output
[source,text]
[source,terminal]
----
{"className":"org.springframework.transaction.CannotCreateTransactionException","exMessage":"Could
not open JPA EntityManager for transaction; nested exception is
org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC
Connection"}
NAME READY STATUS RESTARTS AGE
spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
----
+
At this stage, the pod fails to start. If you try to interact with the application, it returns errors.
You can now use the {servicebinding-title} to connect the application to the database service.