Releases: SantaOps/santaLog
Releases · SantaOps/santaLog
인증DB_yaml 파일
다음 목표(한 줄 요약)
- 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: 3persistence.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