version: "3"
services:
wordpress:
image: wordpress:5.9.1-php8.1-apache
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
ports:
- "30000:80"
mysql:
image: mariadb:10.7
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: password
docker-compose를 사용해서 WordPress-MySQL
을 띄워서 접속할 수 있습니다.
이번에는 docker-compose
가 아니라 Kubernetes
를 사용해서 배포를 진행해보겠습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mariadb:10.7
name: mysql
env:
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.9.1-php8.1-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
value: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: NodePort
ports:
- port: 80
selector:
app: wordpress
tier: frontend
위의 yml을 배포하겠습니다.
kubectl apply -f wordpress-k8s.yml
kubectl get all
minikube ip
위의 명령어를 통해서 IP를 알아낼 수 있습니다.
위에 실행되어 있는 Kubernetes Pod
하나를 삭제해보겠습니다.
kubectl delete PodName
하지만 위처럼 삭제해도 Kubernetes
에서 자동으로 Pod를 새로 생성합니다.
Replicas
를 2로 변경하겠습니다.
그러면 손쉽게 WordPress Pod 하나가 더 생긴 것을 볼 수 있습니다.
이거를 Docker
로 구현한다면 쉽지 않을 수 있습니다. Docker Container
2개를 띄운 후에 앞에 프록시 역할을 하는 컨테이너 하나 더 띄워서 작업을 해야 하는데, Kubernetes
를 사용하면 손쉽게 로드밸런서 역할을 할 수 있게 여러 개의 파드를 띄우는 것이 가능합니다.