본문으둜 κ±΄λ„ˆλ›°κΈ°

πŸ“¦ 2-Tier Architecture: WordPress + MySQL

πŸ“¦ 2-Tier Architecture: WordPress + MySQL

Kubernetes ν™˜κ²½μ—μ„œμ˜ WordPress (Frontend/Backend 톡합) 및 MySQL (Database) 2-Tier ꡬ성 μ•„ν‚€ν…μ²˜μž„.

λͺ©μ°¨β€‹


πŸ“Š μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨β€‹


🦊 GitLab CI/CD νŒŒμ΄ν”„λΌμΈβ€‹

이 ν”„λ‘œμ νŠΈλŠ” GitHub Push -> GitLab Mirroring -> GitLab CI Build 과정을 톡해 2-Tier용 이미지λ₯Ό μžλ™μœΌλ‘œ λΉŒλ“œν•˜κ³  배포함.

Job NameStageμ—­ν• Dockerfile μœ„μΉ˜λŒ€μƒ 이미지
build-2tier-mysqlbuildMySQL 8.0 μ»€μŠ€ν…€ 이미지 λΉŒλ“œ2-tier/mysql/Dockerfileregistry.gitlab.com/.../2tier-mysql
build-2tier-wordpressbuildWordPress μ»€μŠ€ν…€ 이미지 λΉŒλ“œ2-tier/wordpress/Dockerfileregistry.gitlab.com/.../2tier-wordpress

μ‹€ν–‰ 쑰건:

  • 브랜치: feat/on-premise-ict
  • 트리거: ν•΄λ‹Ή λΈŒλžœμΉ˜μ— Push λ°œμƒ μ‹œ μžλ™ μ‹€ν–‰

πŸ—οΈ ꡬ성 μš”μ†Œβ€‹

μ»΄ν¬λ„ŒνŠΈNamespaceRoleReplicasService Type
WordPress2tier-wordpressμ›Ή μ„œλ²„ 및 CMS3LoadBalancer
MySQL2tier-mysqlλ°μ΄ν„°λ² μ΄μŠ€1ClusterIP

1. WordPress (App Tier)​

  • Namespace: 2tier-wordpress
  • Role: μ›Ή μ„œλ²„ 및 CMS μ• ν”Œλ¦¬μΌ€μ΄μ…˜
  • Replicas: 3
  • Service Type: LoadBalancer (μ™ΈλΆ€ 접속 ν—ˆμš©)
  • Volume: /var/www/html (ν…Œλ§ˆ, ν”ŒλŸ¬κ·ΈμΈ, μ—…λ‘œλ“œ 파일)

2. MySQL (Data Tier)​

  • Namespace: 2tier-mysql
  • Role: λ°μ΄ν„°λ² μ΄μŠ€
  • Replicas: 1
  • Service Type: ClusterIP (λ‚΄λΆ€ 톡신 μ „μš©)
  • Volume: /var/lib/mysql (DB 데이터 영ꡬ μ €μž₯)

πŸ’Ύ Volume ꡬ성​

μ»΄ν¬λ„ŒνŠΈMount Pathμ„€λͺ…
WordPress/var/www/htmlν…Œλ§ˆ, ν”ŒλŸ¬κ·ΈμΈ, μ—…λ‘œλ“œ 파일 영ꡬ μ €μž₯
MySQL/var/lib/mysqlDB 데이터 파일 영ꡬ μ €μž₯

πŸš€ 배포 방법​

1️⃣ 사전 μ€€λΉ„ (.env μ„€μ •)​

μƒμœ„ 디렉토리(day3-1217)의 .env νŒŒμΌμ„ μ‚¬μš©ν•¨.

# .env 파일 생성 (없을 경우)
cp .env.example .env

# .env 파일 μˆ˜μ •
# MYSQL_ROOT_PASSWORD, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE
# WORDPRESS_DB_NAME (μžλ™ 생성될 DBλͺ…)
# DOCKER_CONFIG_JSON_BASE64 (이미지 Pull용 μ‹œν¬λ¦Ώ)
vi .env

2️⃣ MySQL 배포 (2tier-mysql)​

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ¨Όμ € 배포함.

# 2-tier ν΄λ”μ—μ„œ μ‹€ν–‰
cd 2-tier

# .env λ‘œλ“œ 및 배포
set -a && source ../.env && set +a && envsubst < mysql/mysql.yaml | kubectl apply -f -

# 확인
kubectl get all -n 2tier-mysql

3️⃣ WordPress 배포 (2tier-wordpress)​

MySQL이 μ€€λΉ„λ˜λ©΄ WordPressλ₯Ό 배포함.

# .env λ‘œλ“œ 및 배포
set -a && source ../.env && set +a && envsubst < wordpress/wordpress.yaml | kubectl apply -f -

# 확인
kubectl get all -n 2tier-wordpress

4️⃣ 접속 확인​

LoadBalancer IPλ₯Ό ν™•μΈν•˜μ—¬ 접속함.

kubectl get svc -n 2tier-wordpress
# EXTERNAL-IP 확인 ν›„ λΈŒλΌμš°μ € 접속 (http://<EXTERNAL-IP>)

🧹 λ¦¬μ†ŒμŠ€ 정리​

배포된 λ¦¬μ†ŒμŠ€λ₯Ό μ™„μ „νžˆ μ •λ¦¬ν•˜λ €λ©΄ μ•„λž˜ μˆœμ„œλŒ€λ‘œ 진행함.

1️⃣ Namespace μ‚­μ œβ€‹

λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ‚­μ œν•˜λ©΄ λ‚΄λΆ€ λ¦¬μ†ŒμŠ€λ„ ν•¨κ»˜ μ‚­μ œλ¨.

# 전체 λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ‚­μ œ
kubectl delete ns 2tier-wordpress 2tier-mysql

# μ‚­μ œ 확인
kubectl get ns | grep 2tier

2️⃣ PersistentVolume μ‚­μ œβ€‹

PVλŠ” ν΄λŸ¬μŠ€ν„° 레벨 λ¦¬μ†ŒμŠ€μ΄λ―€λ‘œ λ³„λ„λ‘œ μ‚­μ œν•΄μ•Ό 함.

# PV μ‚­μ œ
kubectl delete pv 2tier-mysql-pv 2tier-wordpress-pv

# μ‚­μ œ 확인
kubectl get pv | grep 2tier

3️⃣ 호슀트 데이터 정리 (선택)​

hostPath λ³Όλ₯¨ 데이터λ₯Ό μ™„μ „νžˆ μ‚­μ œν•˜λ €λ©΄:

# 각 λ…Έλ“œμ—μ„œ μ‹€ν–‰
sudo rm -rf /data/2tier/mysql
sudo rm -rf /data/2tier/wordpress

⚑ ν•œλ²ˆμ— 정리 (λΉ λ₯Έ 정리)​

# λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ‚­μ œ (λ‚΄λΆ€ λ¦¬μ†ŒμŠ€ μžλ™ μ‚­μ œ)
kubectl delete ns 2tier-wordpress 2tier-mysql

# PV μ‚­μ œ
kubectl delete pv 2tier-mysql-pv 2tier-wordpress-pv

κ΄€λ ¨ λ¬Έμ„œβ€‹

κ·Έλž˜ν”„ λ·°

…
κ·Έλž˜ν”„ 데이터 λ‘œλ”© 쀑…
ν˜„μž¬: πŸ“¦ 2-Tier Architecture: WordPress + MySQL
λ…Έλ“œ 클릭 β†’ 이동 Β· λ“œλž˜κ·Έ β†’ μœ„μΉ˜ μ‘°μ •