π¦ 2-Tier Architecture: WordPress + MySQL
π¦ 2-Tier Architecture: WordPress + MySQL
Kubernetes νκ²½μμμ WordPress (Frontend/Backend ν΅ν©) λ° MySQL (Database) 2-Tier κ΅¬μ± μν€ν μ²μ.
λͺ©μ°¨β
- π μν€ν μ² λ€μ΄μ΄κ·Έλ¨
- π¦ GitLab CI/CD νμ΄νλΌμΈ
- ποΈ κ΅¬μ± μμ
- πΎ Volume ꡬμ±
- π λ°°ν¬ λ°©λ²
- 𧹠리μμ€ μ 리
π μν€ν μ² λ€μ΄μ΄κ·Έλ¨β
π¦ GitLab CI/CD νμ΄νλΌμΈβ
μ΄ νλ‘μ νΈλ GitHub Push -> GitLab Mirroring -> GitLab CI Build κ³Όμ μ ν΅ν΄ 2-Tierμ© μ΄λ―Έμ§λ₯Ό μλμΌλ‘ λΉλνκ³ λ°°ν¬ν¨.
| Job Name | Stage | μν | Dockerfile μμΉ | λμ μ΄λ―Έμ§ |
|---|---|---|---|---|
build-2tier-mysql | build | MySQL 8.0 컀μ€ν μ΄λ―Έμ§ λΉλ | 2-tier/mysql/Dockerfile | registry.gitlab.com/.../2tier-mysql |
build-2tier-wordpress | build | WordPress 컀μ€ν μ΄λ―Έμ§ λΉλ | 2-tier/wordpress/Dockerfile | registry.gitlab.com/.../2tier-wordpress |
μ€ν 쑰건:
- λΈλμΉ:
feat/on-premise-ict - νΈλ¦¬κ±°: ν΄λΉ λΈλμΉμ Push λ°μ μ μλ μ€ν
ποΈ κ΅¬μ± μμβ
| μ»΄ν¬λνΈ | Namespace | Role | Replicas | Service Type |
|---|---|---|---|---|
| WordPress | 2tier-wordpress | μΉ μλ² λ° CMS | 3 | LoadBalancer |
| MySQL | 2tier-mysql | λ°μ΄ν°λ² μ΄μ€ | 1 | ClusterIP |
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/mysql | DB λ°μ΄ν° νμΌ μꡬ μ μ₯ |
π λ°°ν¬ λ°©λ²β
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