Menu Close

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

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

프로세스

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

    $ oc apply -f - << EOD
    apiVersion: postgresql.dev4devs.com/v1alpha1
    kind: Database
    metadata:
      name: sampledatabase
      namespace: my-postgresql
      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-96:latest
      databaseStorageClassName: nfs-storage-provisioner
      size: 1
    EOD

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

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

    출력 예

    database.postgresql.dev4devs.com/sampledatabase created

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

    $ oc get pods -n my-postgresql

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

    출력 예

    NAME                                     READY    STATUS      RESTARTS   AGE
    sampledatabase-cbc655488-74kss            0/1     Running        0       32s

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

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

    $ 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

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

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