๐ ๊ฐ์
์ด ๊ธ์์๋ 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 ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์์ ์ผ๋ก ์์ฑ๋์๋์ง ๊ฒ์ฆ