6.5. 在 IBM Power、IBM Z 和 IBM (R) Linux 上使用服务绑定
Service Binding Operator 管理工作负载和后备服务的数据平面。本指南提供了一些示例,可帮助您创建数据库实例、部署应用程序,以及使用 Service Binding Operator 在应用程序和数据库服务间创建绑定连接。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 -
已安装
oc
CLI。 - 您已从 OperatorHub 安装 Service Binding Operator。
6.5.1. 部署 PostgreSQL Operator
流程
-
要在
my-petclinic
命名空间中部署 Dev4Devs PostgreSQL Operator,请在 shell 中运行以下命令:
$ oc apply -f - << EOD
---
apiVersion: v1
kind: Namespace
metadata:
name: my-petclinic
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: postgres-operator-group
namespace: my-petclinic
---
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: ibm-multiarch-catalog
namespace: openshift-marketplace
spec:
sourceType: grpc
image: quay.io/ibm/operator-registry-<architecture> 1
imagePullPolicy: IfNotPresent
displayName: ibm-multiarch-catalog
updateStrategy:
registryPoll:
interval: 30m
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: postgresql-operator-dev4devs-com
namespace: openshift-operators
spec:
channel: alpha
installPlanApproval: Automatic
name: postgresql-operator-dev4devs-com
source: ibm-multiarch-catalog
sourceNamespace: openshift-marketplace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: database-view
labels:
servicebinding.io/controller: "true"
rules:
- apiGroups:
- postgresql.dev4devs.com
resources:
- databases
verbs:
- get
- list
EOD
- 1
- Operator 镜像。
-
对于 IBM Power:
quay.io/ibm/operator-registry-ppc64le:release-4.9
-
对于 IBM Z 和 IBM® LinuxONE:
quay.io/ibm/operator-registry-s390x:release-4.8
-
对于 IBM Power:
验证
安装 Operator 后,列出
openshift-operators
命名空间中的 Operator 订阅:$ oc get subs -n openshift-operators
输出示例
NAME PACKAGE SOURCE CHANNEL postgresql-operator-dev4devs-com postgresql-operator-dev4devs-com ibm-multiarch-catalog alpha rh-service-binding-operator rh-service-binding-operator redhat-operators stable
6.5.2. 创建 PostgreSQL 数据库实例
要创建 PostgreSQL 数据库实例,您必须创建一个 Database
自定义资源(CR)并配置数据库。
流程
在 shell 中运行以下命令来在
my-petclinic
命名空间中创建Database
CR:$ oc apply -f - << EOD apiVersion: postgresql.dev4devs.com/v1alpha1 kind: Database metadata: name: sampledatabase namespace: my-petclinic annotations: host: sampledatabase type: postgresql port: "5432" service.binding/database: 'path={.spec.databaseName}' service.binding/port: 'path={.metadata.annotations.port}' service.binding/password: 'path={.spec.databasePassword}' service.binding/username: 'path={.spec.databaseUser}' service.binding/type: 'path={.metadata.annotations.type}' service.binding/host: 'path={.metadata.annotations.host}' spec: databaseCpu: 30m databaseCpuLimit: 60m databaseMemoryLimit: 512Mi databaseMemoryRequest: 128Mi databaseName: "sampledb" databaseNameKeyEnvVar: POSTGRESQL_DATABASE databasePassword: "samplepwd" databasePasswordKeyEnvVar: POSTGRESQL_PASSWORD databaseStorageRequest: 1Gi databaseUser: "sampleuser" databaseUserKeyEnvVar: POSTGRESQL_USER image: registry.redhat.io/rhel8/postgresql-13:latest databaseStorageClassName: nfs-storage-provisioner size: 1 EOD
此
Database
CR 中添加的注解可启用服务绑定连接并触发 Operator 协调。输出会验证数据库实例是否已创建:
输出示例
database.postgresql.dev4devs.com/sampledatabase created
创建数据库实例后,确保
my-petclinic
命名空间中的所有 pod 都在运行:$ oc get pods -n my-petclinic
输出(需要几分钟)验证是否创建并配置了数据库:
输出示例
NAME READY STATUS RESTARTS AGE sampledatabase-cbc655488-74kss 0/1 Running 0 32s
配置了数据库后,您可以部署示例应用程序并将其连接到数据库服务。
6.5.3. 部署 Spring PetClinic 示例应用程序
要在 OpenShift Container Platform 集群上部署 Spring PetClinic 示例应用程序,您必须使用部署配置并配置本地环境才能测试应用程序。
流程
在 shell 中运行以下命令,使用
PostgresCluster
自定义资源(CR)部署spring-petclinic
应用程序:$ 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 - name: org.springframework.cloud.bindings.boot.enable value: "true" 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
输出会验证 Spring PetClinic 示例应用是否已创建并部署:
输出示例
deployment.apps/spring-petclinic created service/spring-petclinic created
注意如果要在 web 控制台的 Developer 视角中使用 容器镜像 部署应用程序,则必须在高级选项的 Deployment 部分输入以下环境变量:
- 名称:SPRING_PROFILES_ACTIVE
- 值: postgres
运行以下命令,验证应用程序是否还没有连接到数据库服务:
$ oc get pods -n my-petclinic
显示
CrashLoopBackOff
状态需要几分钟:输出示例
NAME READY STATUS RESTARTS AGE spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
在这个阶段,pod 无法启动。如果您尝试与应用交互,它会返回错误。
现在,您可以使用 Service Binding Operator 将应用程序连接到数据库服务。
6.5.4. 将 Spring PetClinic 示例应用程序连接到 PostgreSQL 数据库服务
要将示例应用程序连接到数据库服务,您必须创建一个 ServiceBinding
自定义资源 (CR),该资源会触发 Service Binding Operator 将绑定数据项目到应用程序中。
流程
创建
ServiceBinding
CR 以项目绑定数据:$ oc apply -n my-petclinic -f - << EOD --- apiVersion: binding.operators.coreos.com/v1alpha1 kind: ServiceBinding metadata: name: spring-petclinic-pgcluster spec: services: 1 - group: postgresql.dev4devs.com kind: Database 2 name: sampledatabase version: v1alpha1 application: 3 name: spring-petclinic group: apps version: v1 resource: deployments EOD
输出会验证是否已创建
ServiceBinding
CR 以将绑定数据项目到示例应用程序中。输出示例
servicebinding.binding.operators.coreos.com/spring-petclinic created
验证服务绑定的请求是否成功:
$ oc get servicebindings -n my-petclinic
输出示例
NAME READY REASON AGE spring-petclinic-postgresql True ApplicationsBound 47m
默认情况下,来自数据库服务的绑定数据的值作为运行示例应用程序的工作负载容器中的文件进行投射。例如,Secret 资源中的所有值都投射到
bindings/spring-petclinic-pgcluster
目录中。创建后,您可以进入拓扑来查看可视连接。
图 6.1. 将 spring-petclinic 连接到示例数据库
设置应用程序端口的端口转发,以便从本地环境访问示例应用程序:
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
输出示例
Forwarding from 0.0.0.0:8080 -> 8080 Handling connection for 8080
现在,您可以在 localhost:8080 远程访问 Spring PetClinic 示例应用程序,并查看应用程序现在连接到数据库服务。