Data Engineering/Data Infra & Process

[2ํŽธ] Helm values.yaml์„ ํ™œ์šฉํ•œ PostgreSQL ์‚ฌ์šฉ์ž(Role) ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ฆฌ

ygtoken 2025. 3. 7. 14:49
728x90

 

๐Ÿ“Œ ๊ฐœ์š”

 

์ด ๊ธ€์—์„œ๋Š” Helm์˜ values.yaml์„ ํ™œ์šฉํ•˜์—ฌ PostgreSQL์˜ ํŠน์ • ์‚ฌ์šฉ์ž(Role)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Helm Chart ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ์ž ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์ •ํ•˜๋ฉด, ๋ณ„๋„๋กœ SQL์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ PostgreSQL ์ธ์Šคํ„ด์Šค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

 


๐Ÿš€ 1. PostgreSQL ์‚ฌ์šฉ์ž ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๋™ ์ถ”๊ฐ€ (values.yaml ์„ค์ •)

 

Helm์˜ values.yaml์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์‚ฌ์šฉ์ž ๊ณ„์ •(Role), ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ž๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1๏ธโƒฃ values.yaml ์—…๋ฐ์ดํŠธ (์‚ฌ์šฉ์ž ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๋™ ์ƒ์„ฑ)

 

์•„๋ž˜ ์„ค์ •์„ values.yaml์— ์ถ”๊ฐ€ํ•˜์—ฌ, PostgreSQL์„ ๋ฐฐํฌํ•  ๋•Œ adminuser ์‚ฌ์šฉ์ž์™€ ragdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ~/workspace/gitops/argocd/postgresql/values.yaml

primary:
  persistence:
    enabled: true
    size: 8Gi

  service:
    type: LoadBalancer

  initdbScriptsCM:
    init-users.sql: |
      -- ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ md5๋กœ ์„ค์ •
      ALTER SYSTEM SET password_encryption = 'md5';
      SELECT pg_reload_conf();

      -- adminuser ๊ณ„์ •์ด ์—†์œผ๋ฉด ์ƒ์„ฑ ํ›„ ๊ถŒํ•œ ๋ถ€์—ฌ
      DO $$ 
      BEGIN
        IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'adminuser') THEN
          CREATE ROLE adminuser WITH LOGIN PASSWORD 'admin1234';
          ALTER ROLE adminuser CREATEDB;
          CREATE DATABASE ragdb OWNER adminuser;
          GRANT ALL PRIVILEGES ON DATABASE ragdb TO adminuser;
        END IF;
      END $$;

      -- postgres ๊ณ„์ •์ด ragdb๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ ๋ถ€์—ฌ
      GRANT ALL PRIVILEGES ON DATABASE ragdb TO postgres;
      ALTER ROLE adminuser WITH SUPERUSER INHERIT;
      GRANT pg_read_all_settings TO postgres;

auth:
  postgresPassword: "postgresql"
  username: "adminuser"
  password: "admin1234"
  database: "ragdb"

โœ… ์„ค๋ช…

initdbScriptsCM → PostgreSQL์ด ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ init-users.sql์ด ์‹คํ–‰๋จ

ALTER SYSTEM SET password_encryption = 'md5'; → PostgreSQL ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

CREATE ROLE adminuser WITH LOGIN PASSWORD 'admin1234';adminuser ๊ณ„์ • ์ž๋™ ์ƒ์„ฑ

CREATE DATABASE ragdb OWNER adminuser;ragdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ ๋ฐ ์†Œ์œ ๊ถŒ ์„ค์ •

GRANT ALL PRIVILEGES ON DATABASE ragdb TO adminuser;adminuser๊ฐ€ ragdb์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ ๋ถ€์—ฌ

GRANT ALL PRIVILEGES ON DATABASE ragdb TO postgres;postgres๋„ ragdb๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

 


๐Ÿš€ 2. values.yaml ์ ์šฉ ๋ฐ ArgoCD ๋™๊ธฐํ™”

 

1๏ธโƒฃ Git ์ €์žฅ์†Œ์— ์—…๋ฐ์ดํŠธ

 

GitOps ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ values.yaml์„ Git ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

cd ~/workspace/gitops
git add argocd/postgresql/values.yaml
git commit -m "Add PostgreSQL role and database creation via values.yaml"
git push origin main

 

2๏ธโƒฃ ArgoCD์—์„œ PostgreSQL ์„ค์ • ๋ฐ˜์˜

argocd app sync postgresql

 

3๏ธโƒฃ PostgreSQL StatefulSet ์žฌ์‹œ์ž‘ (๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜)

kubectl rollout restart statefulset postgresql -n database

 

โœ… ์„ค์ •์ด ๋ฐ˜์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด:

kubectl get pods -n database
NAME            READY   STATUS    RESTARTS   AGE
postgresql-0    1/1     Running   0          1m

 

 


๐Ÿš€ 3. ์‚ฌ์šฉ์ž(Role) ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ ํ™•์ธ

 

๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด, PostgreSQL์— ์ ‘์†ํ•˜์—ฌ ์„ค์ •์ด ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1๏ธโƒฃ postgres ๊ณ„์ •์œผ๋กœ PostgreSQL ์ ‘์†

kubectl exec -it $(kubectl get pod -n database -l app.kubernetes.io/name=postgresql -o jsonpath="{.items[0].metadata.name}") -n database -- psql -U postgres

 

โœ… ์ •์ƒ์ ์œผ๋กœ ์ ‘์†๋˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

psql (14.2)
Type "help" for help.

postgres=#

 

๐Ÿ“Œ ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž(Role) ํ™•์ธ

\du

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ

 Role name | Attributes  | Member of
-----------+------------+-----------
 adminuser | Superuser, Create DB | {}
 postgres  | Superuser  | {}

๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก ํ™•์ธ

\l

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ

      Name    | Owner     | Encoding | Collate | Ctype | Access privileges
-------------+-----------+----------+---------+-------+-------------------
 postgres    | postgres  | UTF8     | C       | C.UTF-8 |
 ragdb       | adminuser | UTF8     | C       | C.UTF-8 | =Tc/adminuser + postgres=CTc/adminuser

 

๐Ÿ“Œ adminuser์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹ ํ™•์ธ

SELECT rolname, rolpassword FROM pg_authid WHERE rolname='adminuser';

 

โœ… ์ถœ๋ ฅ ๊ฐ’์ด md5๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 rolname  |               rolpassword
----------+-----------------------------------
 adminuser | md50005a4b0ccaccbd18bcf64e90e242c90
(1 row)

 

๐Ÿ“Œ adminuser ๊ณ„์ •์œผ๋กœ ragdb์— ์ง์ ‘ ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

kubectl exec -it $(kubectl get pod -n database -l app.kubernetes.io/name=postgresql -o jsonpath="{.items[0].metadata.name}") -n database -- psql -U adminuser -d ragdb

 

โœ… ์ ‘์†๋˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

ragdb=>

 

๐Ÿ“Œ ํ…Œ์ด๋ธ” ์กฐํšŒ (ragdb ๋‚ด๋ถ€)

\dt

 

๐Ÿ“Œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ

\q

 

 


๐Ÿ“Œ 4. ์ตœ์ข… ์ •๋ฆฌ

 

โœ… values.yaml์„ ํ™œ์šฉํ•˜์—ฌ PostgreSQL ์‚ฌ์šฉ์ž ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๋™ ์ƒ์„ฑ

โœ… ArgoCD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PostgreSQL์„ GitOps ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ

โœ… PostgreSQL์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ

โœ… SQL์„ ์‹คํ–‰ํ•˜์—ฌ adminuser ๊ณ„์ •๊ณผ ragdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆ

 

 

728x90