Skip to content

Releases: SantaOps/santaLog

인증DB_yaml 파일

02 Feb 04:07
da929be

Choose a tag to compare

다음 목표(한 줄 요약)

  • auth-db 네임스페이스
  • MariaDB Galera 3Pod(StatefulSet) 올리고
  • 각 Pod는 **자기 PVC(=자기 디스크)**를 **NFS(=저장 위치)**에 만들고
  • podAntiAffinity=hard서로 다른 워커에 1개씩만 배치
  • WAS는 Service(ClusterIP) 하나로 접속

0) (필수) Galera 올릴 “워커 3대” 선택 & 준비

너 지금 워커가 4대라서, 3대만 “galera 전용”으로 찍어두면 스케줄이 안 꼬임(랜덤 방지).

나는 예시로 s1-worker, s2-worker, s4-worker를 Galera 노드로 쓰는 걸 추천할게. (s3-worker는 NFS 서버 Pod가 이미 올라가있으니 IO/리소스 분리 목적)

0-1) 선택한 워커들에 NFS 클라이언트 패키지 확인(없으면 mount 실패남)

워커 노드마다 mount.nfs가 있어야 PVC 마운트가 됨.

# [의미] 선택한 워커 3대에서 NFS 마운트 유틸이 있는지 확인
# [기대] /usr/sbin/mount.nfs 같은 경로가 출력되면 OK

ssh kosa@s1-worker'which mount.nfs || echo "NO mount.nfs"'
ssh kosa@s2-worker'which mount.nfs || echo "NO mount.nfs"'
ssh kosa@s4-worker'which mount.nfs || echo "NO mount.nfs"'

만약 “NO mount.nfs” 뜨는 워커가 있으면:

# [의미] 해당 워커에 NFS 클라이언트 설치 (Ubuntu/Debian)
# [기대] 설치 후 which mount.nfs가 경로 출력

ssh kosa@s4-worker'sudo apt update && sudo apt install -y nfs-common'

1) (필수) Galera 전용 워커 3대에 라벨 달기 (WAS 담당자에게 요청할 필요 없음)

너가 클러스터 권한 있으면 네가 라벨 달면 돼.

# [의미] Galera를 올릴 워커 3대를 "db-role=galera" 라벨로 표시
# [기대] kubectl get nodes --show-labels 에서 라벨이 보임

kubectl label node s1-worker db-role=galera --overwrite
kubectl label node s2-worker db-role=galera --overwrite
kubectl label node s4-worker db-role=galera --overwrite

# [의미] 라벨 확인
kubectl get nodes -L db-role

예상 출력(예시):

  • s1-worker galera
  • s2-worker galera
  • s4-worker galera

2) AuthDB 전용 네임스페이스 만들기

# [의미] 다른 팀 리소스와 충돌 방지(완전 분리)
kubectl create ns auth-db
kubectl get ns | grep auth-db

3) (중요) “차트 값 키 이름” 먼저 확인 (버전마다 키가 바뀌는 경우가 있음)

이건 실수 방지용 “사전 점검”이야.

# [의미] bitnami repo 등록/갱신 (이미 되어 있어도 무해)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# [의미] mariadb-galera 차트 기본 values를 확인(키 이름 확인용)
# [기대] rootUser / db / persistence / podAntiAffinityPreset 같은 항목이 보임
helm show values bitnami/mariadb-galera | egrep -n"rootUser|db:|persistence|storageClass|podAntiAffinityPreset|nodeSelector|galera|mariabackup" |head -n 60

이 출력은 네가 그대로 붙여주면, 내가 너희 차트 버전에 100% 맞춰서 values를 딱 맞게 확정해줄 수 있어.

(일단 아래는 “대부분 환경에서 통하는” 기본형으로 먼저 진행 가능)

4) Galera values 파일 작성 (차트 키에 맞춘 “확정본”)

✅ 포인트

  • replicaCount: 3
  • persistence.storageClass: nfs-internal (각 Pod별 PVC 생성)
  • nodeSelector: db-role=galera (후보 노드 3대로 제한)
  • podAntiAffinityPreset: hard (노드 1대당 1Pod 강제)
  • Service는 기본이 ClusterIP라 WAS는 Service로만 접속
# [의미] Bitnami mariadb-galera 설치용 values 파일 생성
cat > authdb-values.yaml <<'EOF'
# ----------------------------
# [AuthDB] MariaDB Galera (3 Pod) 설정
# ----------------------------

# [의미] Galera 노드 수 (StatefulSet pod 수)
replicaCount: 2

# ----------------------------
# [비밀번호/계정]
# ----------------------------
rootUser:
  # [의미] root 계정 비번 (기존 프로젝트에서 쓰던 값 그대로 사용)
  password: "kosa1004"

db:
  # [의미] WAS가 사용할 데이터베이스/계정 생성(최초 설치 시 생성됨)
  name: "auth_db"
  user: "app_user"
  password: "kosa1004"

galera:
  mariabackup:
    # [의미] 노드 조인(SST/IST) 등에 쓰이는 mariabackup 비밀번호 (차트 요구사항)
    password: "kosa1004"

# ----------------------------
# [스토리지] Pod별 PVC를 만들고 NFS에 저장
# ----------------------------
persistence:
  enabled: true
  # [의미] 우리가 만든 NFS StorageClass 사용 (default로 안 만들었으니 WAS 영향 없음)
  storageClass: "nfs-internal"
  size: 8Gi
  # [의미] Pod마다 자기 PVC 하나씩 쓰는 구조이므로 RWO로 둬도 안전(기본값과 동일)
  accessModes:
    - ReadWriteOnce

# ----------------------------
# [스케줄링] 노드 고정 + 1노드 1Pod 분산 강제
# ----------------------------
nodeSelector:
  # [의미] db-role=galera 라벨이 있는 워커에서만 실행되게 제한 (랜덤 방지)
  db-role: "galera"

# [의미] 같은 노드에 2개 이상 뜨지 못하게 "강제"
#        노드 1대 장애 시: 남은 2개로 서비스 지속 + 3번째는 Pending(요구사항과 일치)
podAntiAffinityPreset: "hard"

# ----------------------------
# [Service] WAS 접속 포인트(기본 ClusterIP)
# ----------------------------
service:
  type: ClusterIP
  port: 3306

# ----------------------------
# [이미지] ImagePullBackOff(not found) 해결용: bitnamilegacy 레포로 변경
# ----------------------------
image:
  registry: docker.io
  repository: bitnamilegacy/mariadb-galera
  tag: 12.0.2-debian-12-r0
EOF

5) Galera 설치(helm install)

# [의미] bitnami repo가 없다면 추가(있으면 무해)
helm repo add bitnami https://charts.bitnami.com/bitnami 2>/dev/null ||true
helm repo update

# [의미] auth-db 네임스페이스에 authdb 릴리스로 Galera 설치
helm install authdb bitnami/mariadb-galera -n auth-db -f authdb-values.yaml

# [확인] Pod 3개가 뜨고, 서로 다른 노드에 분산되는지 확인
kubectl get pods -n auth-db -o wide

✅ 기대

  • authdb-mariadb-galera-0/1/2 가 각각 서로 다른 워커에 뜸
  • 만약 3대 중 1대가 다운이면, 2개는 Running + 1개는 Pending (원하는 동작)

6) WAS가 붙을 “단일 엔드포인트(Service)” 확인

# [의미] WAS가 접속할 ClusterIP 서비스 확인
kubectl get svc -n auth-db

보통 서비스 이름은 아래 중 하나로 보일 거야(출력으로 확정):

  • authdb-mariadb-galera (대부분 이 형태)

WAS 팀에게 줄 접속 정보(클러스터 내부 기준):

  • Host: authdb-mariadb-galera.auth-db.svc.cluster.local
  • Port: 3306
  • DB/User/PW: auth_db / app_user / kosa1004

7) (DB 담당 검증) 서비스로 접속 테스트 (클러스터 내부에서)

# [의미] mysql 클라이언트가 있는 임시 Pod 띄워서 Service로 접속 테스트
kubectl run -n auth-db mariadb-client --image=bitnami/mariadb:latest --restart=Never --command --sleep 3600

# [의미] Service DNS로 접속해서 auth_db가 보이는지 확인
kubectlexec -n auth-db -it mariadb-client -- bash -lc \
'mysql -h authdb-mariadb-galera.auth-db.svc.cluster.local -P 3306 -u app_user -pkosa1004 -e "SHOW DATABASES;"'

# [정리] 임시 클라이언트 Pod 삭제(원하면 유지해도 됨)
kubectl delete pod -n auth-db mariadb-client --ignore-not-found=true