[WordPress] Kubernetes Deployment 배포
kubernetes doc에서 WordPress와 MySQL을 PV에 배포하는 것을 예제로 보여준다.
참고 : kubernetes.io/ko/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/
예시: WordPress와 MySQL을 퍼시스턴트 볼륨에 배포하기
이 튜토리얼은 WordPress 사이트와 MySQL 데이터베이스를 Minikube를 이용하여 어떻게 배포하는지 보여준다. 애플리케이션 둘 다 퍼시스턴트 볼륨과 퍼시스턴트볼륨클레임을 데이터를 저장하기 위해
kubernetes.io
해당 예제를 통해 PVC, PV 생성하는 방법을 알고, MySQL, WordPress 리소스를 생성하기 위해 사용하는 Secret을 사용하는 방법에 실습을 해 볼 수 있다.
이번 배포에 앞서 WordPress를 알아보면, 간단하게 말하면 PHP로 개발된 웹 페이지를 띄울 수 있게 해주는 오픈소스이다. 템플릿을 제공해 줌으로써 간편하게 웹 페이지를 구동할 수 있는 것을 장점으로 보면 될 것 같다. 버전에 대한 backup import, export를 해줌으로써 좀 더 편한 관리를 할 수 있는 것으로 보인다.
Kubernetes에서는 minukube를 통해 배포한다. 이 포스팅에서는 kubernetes v1.17.8에서 진행하며, crio는 v1.17.5를 사용한다.
또한 PV, PVC를 생성할 때, Rook-Ceph를 통해 구성이 되어 있으므로 각자의 환경에 맞게 수정이 필요하다.
1. 작업 공간 생성 (namespace 생성 - 본 예에서는 wordpress 사용) # kubectl create ns wordpress 2. mysql, wordpress에서 password로 사용할 secret 생성 (본 예에서는 mysql이 password) # kubectl create secret generic mysql-secrets --from-literal=password=mysql -n wordpress 3. mysql 생성 # kubectl apply -f mysql.yaml 4. wordpress 생성 # kubectl apply -f wordpress.yaml 5. 서비스 접근 (LoadBalancer 혹은 NodePort 확인) # kubectl get svc -n wordpress wordpress 6. 크롬 혹은 IE 접근 http://{IP}:80 |
mysql.yaml --- apiVersion: v1 kind: Service metadata: name: wordpress-mysql namespace: wordpress labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim namespace: wordpress labels: app: wordpress spec: storageClassName: csi-cephfs-sc accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql namespace: wordpress labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim |
worpress.yaml --- apiVersion: v1 kind: Service metadata: name: wordpress namespace: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim namespace: wordpress labels: app: wordpress spec: storageClassName: csi-cephfs-sc accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress namespace: wordpress labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: frontend strategy: type: Recreate template: metadata: labels: app: wordpress tier: frontend spec: containers: - image: wordpress:4.8-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wp-pv-claim |
해당 포스팅에서 배포한 wordpress는 PHP 버전 5.6.32를 사용한다.