AlloyDB Omni 실행 및 연결

이 페이지에서는 자체 머신에 설치하거나 Kubernetes 클러스터에 배포한 후 AlloyDB Omni를 실행하고 연결하는 방법을 설명합니다.

이 페이지의 Kubernetes 관련 안내는 Kubernetes 운영에 대한 기본적인 지식이 있다고 가정합니다.

AlloyDB Omni 실행

AlloyDB Omni를 실행하는 데 사용하는 절차는 단일 서버의 컨테이너에서 AlloyDB Omni를 실행하는지 또는 Kubernetes 클러스터에서 실행하는지에 따라 다릅니다. 이 섹션에서는 이러한 배포 스타일 간에 안내를 나눕니다.

AlloyDB Omni 시작

단일 서버

중지된 AlloyDB Omni 컨테이너를 시작하려면 docker container start 명령어를 실행합니다.

docker container start CONTAINER_NAME

CONTAINER_NAME을 AlloyDB Omni 컨테이너를 설치할 때 할당한 이름으로 바꿉니다.

Kubernetes

매니페스트 정의에서 isStoppedfalse로 설정하여 중지된 데이터베이스 클러스터를 시작합니다.

명령줄에서 kubectl를 사용하여 이 작업을 실행할 수 있습니다.

kubectl patch dbclusters.alloydbomni.dbadmin.goog dbcluster-sample \
-p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge

AlloyDB Omni 상태 확인

단일 서버

실행 중인 모든 컨테이너의 상태를 확인하려면 docker container ls 명령어를 실행합니다.

docker container ls

AlloyDB Omni 컨테이너가 실행 중인 경우 이름이 출력 테이블의 NAMES 열에 표시됩니다. 해당 행에는 컨테이너의 상태가 요약되어 있습니다.

컨테이너 이름이 NAMES 열에 표시되지 않으면 AlloyDB Omni이 실행되고 있지 않은 것입니다.

Kubernetes

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME

DB_CLUSTER_NAME데이터베이스 클러스터 이름으로 바꿉니다.

AlloyDB Omni 중지

단일 서버

AlloyDB Omni 컨테이너를 중지하려면 docker container stop 명령어를 실행합니다.

docker container stop CONTAINER_NAME

CONTAINER_NAME을 AlloyDB Omni 컨테이너를 설치할 때 할당한 이름으로 바꿉니다.

Kubernetes

데이터베이스 클러스터를 중지하려면 매니페스트 정의에서 isStoppedtrue로 설정합니다.

명령줄에서 kubectl를 사용하여 이 작업을 실행할 수 있습니다.

kubectl patch dbclusters.alloydbomni.dbadmin.goog dbcluster-sample -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge

단일 서버에서 실행되는 AlloyDB Omni에 연결

AlloyDB Omni 컨테이너에는 데이터베이스 서버로 대화형 SQL 셸 세션을 열 수 있는 자체 psql 사본이 포함되어 있습니다.

원하는 PostgreSQL 호환 소프트웨어를 사용하여 컨테이너 외부에서 AlloyDB Omni에 연결할 수도 있습니다.

Kubernetes 클러스터에서 실행되는 AlloyDB Omni 데이터베이스 클러스터에 연결하는 방법에 관한 자세한 내용은 Kubernetes에서 실행되는 AlloyDB Omni에 연결을 참고하세요.

컨테이너화된 psql를 사용하여 연결

자체 컨테이너화된 psql 사본을 사용하여 AlloyDB Omni 데이터베이스 서버에 연결하려면 다음 명령어를 실행합니다.

docker exec -it CONTAINER_NAME psql -U postgres

CONTAINER_NAME을 AlloyDB Omni 컨테이너를 설치할 때 할당한 이름으로 바꿉니다.

이 명령어는 postgres 사용자 역할로 서버에 연결하고 postgres=# 명령 프롬프트를 표시합니다. 이제 psql 명령어와 SQL 쿼리를 실행할 수 있습니다.

psql를 종료하려면 \q 명령어를 실행합니다.

자체 애플리케이션을 사용하여 연결

PostgreSQL에서 작동하는 모든 애플리케이션은 수정 없이 AlloyDB Omni에서도 작동할 수 있습니다.

AlloyDB Omni 데이터베이스 서버에 연결하려면 AlloyDB Omni를 시작할 때 docker run 명령어에 --network=host 또는 -p 5432:5432를 추가하여 AlloyDB Omni 도커 컨테이너의 네트워킹을 호스트 머신에 노출합니다.

맞춤 포트 번호를 선택하려면 AlloyDB Omni를 시작할 때 -p [HOST_PORT]:5432를 사용하세요. 그런 다음 PostgreSQL 호환 클라이언트 또는 코드 라이브러리를 사용하여 포트 5432 또는 지정한 맞춤 포트 번호에 연결합니다.

데이터베이스 서버에 연결한 후 표준 PostgreSQL 통신 프로토콜을 사용하여 DML 및 SQL 쿼리를 사용하여 데이터베이스를 정의, 쿼리, 수정할 수 있습니다.

AlloyDB Omni는 자체 환경 내에서 실행되므로 AlloyDB Omni에 연결하는 방법을 제어할 수 있습니다. 여기에는 일반 PostgreSQL 서버에서와 마찬가지로 애플리케이션의 요구사항에 따라 이 서비스에 대한 네트워크 액세스를 허용하거나 제한하는 것이 포함됩니다.

Kubernetes에서 실행되는 AlloyDB Omni에 연결

AlloyDB Omni Kubernetes 연산자를 사용하면 동일한 Kubernetes 클러스터 내에서 데이터베이스 클러스터에 연결할 수 있으며 원하는 경우 인증에 인증서를 사용할 수 있습니다.

사전 설치된 psql를 사용하여 연결

데이터베이스를 실행하는 팟에 이미 설치된 psql 클라이언트를 사용하여 테스트 연결을 설정할 수 있습니다.

이렇게 하려면 다음 명령어를 실행합니다.

export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres

DB_CLUSTER_NAME을 데이터베이스 클러스터 이름으로 바꿉니다. 데이터베이스 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.

명령어를 입력하면 데이터베이스 서버에서 비밀번호를 묻는 메시지가 표시됩니다. 데이터베이스 클러스터를 만들 때 base64로 인코딩된 버전을 Kubernetes 보안 비밀로 제공한 비밀번호를 입력합니다. 예를 들어 Q2hhbmdlTWUxMjM= 보안 비밀로 데이터베이스 클러스터를 만들었다면 여기에서 사용할 로그인 비밀번호는 ChangeMe123입니다.

AlloyDB Omni Operator는 postgres 사용자 역할로 사용자를 서버에 연결하고 postgres=# 명령어 프롬프트를 표시합니다. 이제 psql 명령어와 SQL 쿼리를 실행할 수 있습니다.

psql를 종료하려면 \q 명령어를 실행합니다.

동일한 클러스터의 별도 포드에서 연결

AlloyDB Omni 데이터베이스 클러스터를 실행하는 포드는 기본적으로 동일한 Kubernetes 클러스터 내에서의 연결을 허용합니다. TLS를 사용하여 데이터베이스 클러스터에 대한 모든 연결을 보호하는 것이 좋습니다.

자체 서버 TLS 인증서를 제공하려면 데이터베이스 클러스터를 구성할 때 인증서 비밀을 지정합니다. 인증서 비밀을 지정하지 않으면 AlloyDB Omni Kubernetes Operator가 자체 서명 인증 기관에서 서명한 인증서를 기반으로 TLS 인증서 비밀을 만듭니다. 두 경우 모두 데이터베이스 클라이언트 포드에 모든 연결에서 인증서 유효성 검사를 요구하도록 요구하여 TLS 보안을 보장할 수 있습니다.

TLS를 사용하여 보안 데이터베이스 연결을 설정하려면 다음 작업을 실행합니다.

  • 클라이언트 연결을 만드는 Pod를 정의하는 매니페스트에서 TLS 인증서 비밀을 지정합니다. 다음 중 하나일 수 있습니다.

    • Kubernetes 클러스터에서 이미 만든 TLS 인증서 보안 비밀입니다. Kubernetes에서 TLS 인증서 보안 비밀을 사용하는 방법에 관한 자세한 내용은 TLS 보안 비밀을 참고하세요.

    • 데이터베이스 클러스터 매니페스트의 일부로 TLS 보안 비밀을 지정하지 않으면 AlloyDB Omni Kubernetes Operator가 자동으로 생성하는 기본 인증서 보안 비밀로, 이름은 DB_CLUSTER_NAME-ca-cert입니다.

  • 클라이언트 포드가 데이터베이스 클러스터에 연결할 때마다 연결을 설정하기 전에 다음 환경 변수를 정의해야 합니다.

    • PGSSLMODE"verify-ca"로 설정합니다.

    • PGSSLROOTCERT를 클라이언트 포드의 파일 시스템에 있는 관련 ca.crt 파일의 절대 경로로 설정합니다.

다음 매니페스트 예는 psql 명령줄 클라이언트가 포함된 공식 PostgreSQL 이미지를 설치하는 pod를 구성하는 방법을 보여줍니다. 이 예에서는 데이터베이스 클러스터를 정의하는 매니페스트에 TLS 비밀 구성을 지정하지 않는다고 가정합니다. 따라서 AlloyDB Omni Kubernetes 운영자는 dbs-al-cert-DB_CLUSTER_NAME라는 기본 TLS 보안 비밀을 사용합니다.

apiVersion: v1
kind: Pod
metadata:
  name: postgres
spec:
  containers:
  - image: "docker.io/library/postgres:latest"
    command:
      - "sleep"
      - "604800"
    imagePullPolicy: IfNotPresent
    name: db-client
    volumeMounts:
    - name: ca-cert
      mountPath: "/DB_CLUSTER_NAME-ca-cert"
      readOnly: true
  volumes:
  - name: ca-cert
    secret:
      secretName: dbs-al-cert-DB_CLUSTER_NAME
  restartPolicy: Always

DB_CLUSTER_NAME을 데이터베이스 클러스터 이름으로 바꿉니다. 이는 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.

이제 다음 단계에 따라 포드를 사용하여 데이터베이스 클러스터에 안전하게 연결할 수 있습니다.

  1. 데이터베이스 클러스터의 내부 IP 주소를 확인합니다.

    kubectl get dbclusters.alloydbomni.dbadmin.goog

    다음과 유사한 결과가 출력됩니다.

    NAME              PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    DB_CLUSTER_NAME   IP_ADDRESS        Ready          DBClusterReady
    

    IP_ADDRESS를 기록하고 다음 단계에서 사용합니다.

  2. psql를 사용하여 클라이언트 포드에서 클러스터에 연결하고 TLS 인증서 확인을 사용 설정하고 요구하는 환경 변수를 설정합니다.

    kubectl exec -it postgres -- bash
    PGSSLMODE="verify-ca" PGSSLROOTCERT=/DB_CLUSTER_NAME-ca-cert/ca.crt psql -h IP_ADDRESS -p 5432 -U postgres -d postgres

    IP_ADDRESS를 이전 단계에서 결정한 내부 IP 주소로 바꿉니다.

다음 단계