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

๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ •์˜์—์„œ isStopped๋ฅผ false๋กœ ์„ค์ •ํ•˜์—ฌ ์ค‘์ง€๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ 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

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ •์˜์—์„œ isStopped๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ 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 ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„