본문으로 건너뛰기

Day 7 - MetalLB & MySQL 배포

Day 7 - MetalLB & MySQL 배포

목차


1. Deployment 기본 배포

apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-lab
spec:
replicas: 10
selector:
matchLabels:
app: deploy-lab
template:
metadata:
labels:
app: deploy-lab
spec:
containers:
- name: http-pod
image: python:latest
command: ["/bin/bash", "-c", "echo \"<h1>$(hostname)</h1>\" > index.html; python -m http.server 8080"]
ports:
- containerPort: 8080
kubectl apply -f deploy.yaml
kubectl expose deployment deploy-lab --type=NodePort --port=80 --target-port=8080

2. MetalLB 설치 및 구성

베어메탈 환경에서 LoadBalancer 타입 서비스에 외부 IP 할당

설치

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml

kubectl get pods -n metallb-system

kube-proxy 설정

kubectl edit configmap -n kube-system kube-proxy
ipvs:
strictARP: true

IP 풀 설정

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: pista-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.5.101-192.168.5.110

L2Advertisement 설정

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: pista-lb
namespace: metallb-system
spec:
ipAddressPools:
- pista-ip-pool

LoadBalancer 서비스 생성

kubectl expose deployment deploy-lab --type=LoadBalancer --port=80 --target-port=8080

kubectl get svc
# EXTERNAL-IP: 192.168.5.101

curl http://192.168.5.101

3. MySQL 전체 구성

PV, PVC, Secret, ConfigMap, Deployment, Service 구성

PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
name: sql-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"

PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

Secret

# base64 인코딩
echo -n 'password' | base64
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
stringData:
mysql-root-password: <PASSWORD>
mysql-user-id: pista
mysql-user-password: <PASSWORD>
mysql-database-name: pista_db

ConfigMap (초기화 스크립트)

kubectl apply -f configmap-mysql.yaml
kubectl get configmap

Deployment & Service

kubectl apply -f deploy-mysql.yaml
kubectl apply -f svc-mysql.yaml

kubectl get pv,pvc,secret,configmap,deploy,svc

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Day 7 - MetalLB & MySQL 배포
노드 클릭 → 이동 · 드래그 → 위치 조정