Menu Close

4.4. 서비스 바인딩 시작하기

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

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • oc CLI를 설치했습니다.
  • PostgreSQL psql CLI를 설치했습니다.
  • OperatorHub에서 Service Binding Operator를 설치했습니다.
  • v5 업데이트 채널을 사용하여 OperatorHub에서 Kubernetes Operator용 Crunchy Postgres를 설치했습니다. 설치된 Operator는 my-postgresql 네임스페이스와 같은 적절한 네임스페이스에서 사용할 수 있습니다.

4.4.1. PostgreSQL 데이터베이스 인스턴스 생성

PostgreSQL 데이터베이스 인스턴스를 생성하려면 PostgresCluster 사용자 정의 리소스(CR)를 생성하고 데이터베이스를 구성해야 합니다.

프로세스

  1. 쉘에서 다음 명령을 실행하여 PostgresCluster CR 및 my-postgresql 네임스페이스를 생성합니다.

    $ oc apply -f - << EOD
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
     name: my-postgresql
    ---
    apiVersion: postgres-operator.crunchydata.com/v1beta1
    kind: PostgresCluster
    metadata:
      name: hippo
      namespace: my-postgresql
      annotations:
        service.binding: 'path={.metadata.annotations.dbsecret},objectType=Secret'
        dbsecret: hippo-pguser-hippo
        proxy: hippo-pgbouncer
        type: postgresql
        service.binding/database: path={.metadata.name}
        service.binding/port: path={.spec.port}
        service.binding/username: path={.metadata.name}
        service.binding/host: path={.metadata.annotations.proxy}
        service.binding/type: path={.metadata.annotations.type}
    spec:
      image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres-ha:centos8-13.4-0
      postgresVersion: 13
      instances:
        - name: instance1
          dataVolumeClaimSpec:
            accessModes:
            - "ReadWriteOnce"
            resources:
              requests:
                storage: 1Gi
      backups:
        pgbackrest:
          image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:centos8-2.33-2
          repos:
          - name: repo1
            volume:
              volumeClaimSpec:
                accessModes:
                - "ReadWriteOnce"
                resources:
                  requests:
                    storage: 1Gi
          - name: repo2
            volume:
              volumeClaimSpec:
                accessModes:
                - "ReadWriteOnce"
                resources:
                  requests:
                    storage: 1Gi
      proxy:
        pgBouncer:
            image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbouncer:centos8-1.15-2
    EOD

    PostgresCluster CR에 추가된 주석은 서비스 바인딩 연결을 활성화하고 Operator 조정을 트리거하는 데 도움이 됩니다.

    출력에서 데이터베이스 인스턴스가 생성되었는지 확인합니다.

    출력 예

    namespace/my-postgresql configured
    postgrescluster.postgres-operator.crunchydata.com/hippo created

  2. 데이터베이스 인스턴스를 생성한 후 my-postgresql 네임스페이스의 모든 포드가 실행 중인지 확인합니다(몇 분이 걸립니다).

    $ oc get pods -n my-postgresql

    출력에서 데이터베이스가 생성되었는지 확인합니다.

    출력 예

    NAME                                     READY   STATUS      RESTARTS   AGE
    hippo-backup-6th6--1-28849               0/1     Completed   0          1m
    hippo-instance1-sl4r-0                   2/2     Running     0          2m
    hippo-pgbouncer-8454474bc7-lhcn9         2/2     Running     0          2m

    새 데이터베이스는 이 단계에서 비어 있습니다. 스키마를 설정하고 샘플 애플리케이션과 상호 작용하도록 샘플 데이터 집합을 예상할 수 있습니다.

  3. 스키마 및 샘플 데이터를 사용하여 데이터베이스를 초기화합니다. 이 작업을 수행하려면 코드를 쉘에 복사하고 실행하여 다음 사용자 지정 쉘 스크립트를 사용합니다.

    $ cat << EOD | bash
    #!/bin/bash
    
    export pgo_cluster_name=hippo
    export cluster_namespace=my-postgresql
    export pgo_cluster_username=hippo
    export PGPASSWORD=\$(oc -n "\${cluster_namespace}" get secrets \
      "\${pgo_cluster_name}-pguser-\${pgo_cluster_username}" -o "jsonpath={.data['password']}" | base64 -d)
    nohup oc -n \${cluster_namespace} port-forward svc/hippo-pgbouncer 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

    터미널의 출력에 데이터베이스가 애플리케이션에 대해 구성되고 있음을 보여줍니다.

데이터베이스가 구성되면 샘플 애플리케이션을 배포하고 데이터베이스 서비스에 연결할 수 있습니다.