쿠버네티스 실습1 - 워드프레스 배포

첫 번째 실습은 PHP와 MySQL으로 구성된 워드프레스를 쿠버네티스로 배포하는 것이다. 쿠버네티스로 웹 애플리케이션을 배포하는 것은 흔한 작업이라고 한다.

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

https://subicura.com/k8s/code/guide/index/wordpress-k8s.yml
위 링크의 내용을 가급적 동일한 폴더를 만들어 wordpress-k8s.yml로 저장하고 다음의 명령어를 실행한다.

# wordpress-k8s.yml 설정 적용
kubectl apply -f wordpress-k8s.yml

배포 상태를 확인한다.

# 현재 상태 확인
kubectl get all

실행 결과 예시

NAME                                  READY   STATUS    RESTARTS   AGE
pod/wordpress-5f59577d4d-8t2dg        1/1     Running   0          103s
pod/wordpress-mysql-545d9c6dc-dwnjp   1/1     Running   0          103s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        7m17s
service/wordpress         NodePort    10.107.20.190   <none>        80:31400/TCP   103s
service/wordpress-mysql   ClusterIP   10.106.50.61    <none>        3306/TCP       103s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress         1/1     1            1           103s
deployment.apps/wordpress-mysql   1/1     1            1           103s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/wordpress-5f59577d4d        1         1         1       103s
replicaset.apps/wordpress-mysql-545d9c6dc   1         1         1       103s

wordpress-5f59577d4d-8t2dgpod/wordpress-mysql-545d9c6dc-dwnjp의 Status가 Running인지 확인하고 service/wordpress의 포트(여기에선 31400)가 몇 번인지 확인한다.
다음으로 minikube ip 명령어로 주소를 얻은 다음, ip 주소:포트 번호를 브라우저에 입력해 접속한다.
여기까지 성공했다면, 쿠버네티스 배포에 성공한 것이다!


끝으로 워드프레스 리소스를 제거한다.

kubectl delete -f wordpress-k8s.yml

Reference

좋은 웹페이지 즐겨찾기