5.5. IBM Power Systems, IBM Z 및 LinuxONE 서비스 바인딩 시작하기
Service Binding Operator는 워크로드 및 백업 서비스의 데이터 플레인을 관리합니다. 이 가이드에서는 데이터베이스 인스턴스를 생성하고, 애플리케이션을 배포하며, Service Binding Operator를 사용하여 애플리케이션과 데이터베이스 서비스 간 바인딩 연결을 생성하는 데 도움이 되는 예제에 대한 지침을 제공합니다.
사전 요구 사항
-
cluster-admin
권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다. -
oc
CLI를 설치했습니다. - OperatorHub에서 Service Binding Operator를 설치했습니다.
5.5.1. PostgreSQL Operator 배포
프로세스
-
Dev4Devs PostgreSQL Operator를
my-petclinic
네임스페이스에 배포하려면 쉘에서 다음 명령을 실행합니다.
$ 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 및 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
5.5.2. PostgreSQL 데이터베이스 인스턴스 생성
PostgreSQL 데이터베이스 인스턴스를 생성하려면 데이터베이스 CR(사용자 정의
리소스)을 생성하고 데이터베이스를 구성해야 합니다.
프로세스
쉘에서 다음 명령을 실행하여
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
이
데이터베이스
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
데이터베이스가 구성되면 샘플 애플리케이션을 배포하고 데이터베이스 서비스에 연결할 수 있습니다.
5.5.3. Spring PetClinic 샘플 애플리케이션 배포
OpenShift Container Platform 클러스터에 Spring PetClinic 샘플 애플리케이션을 배포하려면 배포 구성을 사용하고 애플리케이션을 테스트할 수 있도록 로컬 환경을 구성해야 합니다.
프로세스
쉘에서 다음 명령을 실행하여
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
참고웹 콘솔의 개발자 화면에서 컨테이너 이미지를 사용하여 애플리케이션을 배포하는 경우 고급 옵션 의 배포 섹션에 다음 환경 변수를 입력해야 합니다.
- 이름: 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를 사용하여 애플리케이션을 데이터베이스 서비스에 연결할 수 있습니다.
5.5.4. PostgreSQL 데이터베이스 서비스에 Spring PetClinic 샘플 애플리케이션 연결
샘플 애플리케이션을 데이터베이스 서비스에 연결하려면 Service Binding Operator를 트리거하는 ServiceBinding
CR(사용자 정의 리소스)을 생성하여 바인딩 데이터를 애플리케이션에 예상해야 합니다.
프로세스
바인딩 데이터를 예상하는
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
디렉터리에 예상됩니다.생성된 후에는 토폴로지로 이동하여 시각적 연결을 확인할 수 있습니다.
그림 5.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
http://localhost:8080 에 액세스 .
이제 localhost:8080에서 Spring PetClinic 샘플 애플리케이션에 원격으로 액세스하여 애플리케이션이 데이터베이스 서비스에 연결되어 있는지 확인할 수 있습니다.