6.5. IBM Power, IBM Z 및 IBM(R) LinuxONE에서 서비스 바인딩 시작하기

Service Binding Operator는 워크로드 및 백업 서비스의 데이터 플레인을 관리합니다. 이 가이드에서는 데이터베이스 인스턴스를 생성하고, 애플리케이션을 배포하고, Service Binding Operator를 사용하여 애플리케이션과 데이터베이스 서비스 간의 바인딩 연결을 생성하는 데 도움이 되는 예제를 제공합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • oc CLI를 설치했습니다.
  • OperatorHub에서 Service Binding Operator를 설치했습니다.

6.5.1. PostgreSQL Operator 배포

절차

  1. my-petclinic 네임스페이스에 Dev4Devs PostgreSQL Operator를 배포하려면 쉘에서 다음 명령을 실행합니다.
$ 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

검증

  1. 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 데이터베이스 인스턴스를 생성하려면 데이터베이스 사용자 지정 리소스(CR)를 생성하고 데이터베이스를 구성해야 합니다.

절차

  1. 쉘에서 다음 명령을 실행하여 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

  2. 데이터베이스 인스턴스를 생성한 후 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 샘플 애플리케이션을 배포하려면 배포 구성을 사용하고 애플리케이션을 테스트할 수 있도록 로컬 환경을 구성해야 합니다.

절차

  1. 쉘에서 다음 명령을 실행하여 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

    참고

    웹 콘솔의 개발자 화면에서 컨테이너 이미지를 사용하여 애플리케이션을 배포하는 경우 고급 옵션Deployment 섹션에서 다음 환경 변수를 입력해야 합니다.

    • 이름: SPRING_PROFILES_ACTIVE
    • 값: postgres
  2. 다음 명령을 실행하여 애플리케이션이 데이터베이스 서비스에 아직 연결되어 있지 않은지 확인합니다.

    $ 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 데이터베이스 서비스에 연결

샘플 애플리케이션을 데이터베이스 서비스에 연결하려면 Service Binding Operator를 트리거하는 ServiceBinding CR(사용자 정의 리소스)을 생성하여 바인딩 데이터를 애플리케이션에 예상해야 합니다.

절차

  1. 바인딩 데이터를 프로젝션하기 위해 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
    1
    서비스 리소스 목록을 지정합니다.
    2
    데이터베이스의 CR입니다.
    3
    포함된 PodSpec이 있는 Deployment 또는 기타 유사한 리소스를 가리키는 샘플 애플리케이션입니다.

    출력은 ServiceBinding CR이 생성된 것을 확인하여 바인딩 데이터를 샘플 애플리케이션으로 프로젝션합니다.

    출력 예

    servicebinding.binding.operators.coreos.com/spring-petclinic created

  2. 서비스 바인딩 요청이 성공했는지 확인합니다.

    $ oc get servicebindings -n my-petclinic

    출력 예

    NAME                          READY   REASON              AGE
    spring-petclinic-postgresql   True    ApplicationsBound   47m

    기본적으로 데이터베이스 서비스의 바인딩 데이터 값은 샘플 애플리케이션을 실행하는 워크로드 컨테이너에 파일로 프로젝션됩니다. 예를 들어 Secret 리소스의 모든 값은 bindings/spring-petclinic-pgcluster 디렉터리에 프로젝션됩니다.

  3. 이 작업이 생성되면 토폴로지로 이동하여 시각적 연결을 확인할 수 있습니다.

    그림 6.1. 샘플 데이터베이스에 Spring-petclinic 연결

    img power
  4. 애플리케이션 포트에서 포트 전달을 설정하여 로컬 환경에서 샘플 애플리케이션에 액세스합니다.

    $ 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

  5. http://localhost:8080 에 액세스 .

    이제 localhost:8080에서 Spring PetClinic 샘플 애플리케이션에 원격으로 액세스하고 애플리케이션이 이제 데이터베이스 서비스에 연결되어 있는지 확인할 수 있습니다.

6.5.5. 추가 리소스