AlloyDB Omni 실행 및 연결

문서 버전을 선택합니다.

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

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

AlloyDB Omni 실행

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

AlloyDB Omni 시작

단일 서버

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

Docker

docker container start CONTAINER_NAME

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

Podman

podman container start CONTAINER_NAME

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

Kubernetes

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

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

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

다음을 바꿉니다.

  • DB_CLUSTER_NAME: 이 데이터베이스 클러스터의 이름입니다(예: my-db-cluster).
  • DB_CLUSTER_NAMESPACE(선택사항): 이 데이터베이스 클러스터를 만든 네임스페이스입니다(예: my-db-cluster-namespace).

AlloyDB Omni 상태 확인

단일 서버

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

Docker

docker container ls

Podman

podman container ls

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

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

Kubernetes

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -n DB_CLUSTER_NAMESPACE

다음을 바꿉니다.

AlloyDB Omni 중지

단일 서버

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

Docker

 docker container stop CONTAINER_NAME

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

Podman

 podman container stop CONTAINER_NAME

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

Kubernetes

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

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

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

다음을 바꿉니다.

  • DB_CLUSTER_NAME: 이 데이터베이스 클러스터의 이름입니다(예: my-db-cluster).
  • DB_CLUSTER_NAMESPACE(선택사항): 이 데이터베이스 클러스터를 만든 네임스페이스입니다(예: my-db-cluster-namespace).

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

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

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

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

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

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

Docker

  docker exec -it CONTAINER_NAME psql -U postgres

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

Podman

  podman 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 또는 podman run 명령어에 --network=host 또는 -p 5432:5432를 추가하여 AlloyDB Omni Docker 컨테이너에서 호스트 머신으로 네트워킹을 노출합니다.

커스텀 포트 번호를 선택하려면 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 -n DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres

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

기본 네임스페이스에서 데이터베이스 클러스터를 만든 경우 DB_CLUSTER_NAMESPACE 설정을 건너뛸 수 있습니다.

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

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

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

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

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

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

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

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

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

    • 데이터베이스 클러스터의 매니페스트에 TLS 보안 비밀을 지정하지 않은 경우 AlloyDB Omni Kubernetes 연산자가 생성하는 기본 인증서 보안 비밀(이름: DB_CLUSTER_NAME-ca-cert)

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

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

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

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

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  namespace: DB_CLUSTER_NAMESPACE
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: 데이터베이스 클러스터의 이름입니다. 데이터베이스 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.
  • DB_CLUSTER_NAMESPACE (선택사항): 데이터베이스 클러스터를 만든 네임스페이스입니다.

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

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

    kubectl get dbclusters.alloydbomni.dbadmin.goog -n DB_CLUSTER_NAMESPACE

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

    NAME              PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    DB_CLUSTER_NAME   IP_ADDRESS        Ready          DBClusterReady
    

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

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

    kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- 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 주소로 바꿉니다.

다음 단계