WordPress은(는) 인터넷에 블로그와 웹사이트를 배포하는 데 사용되는 가장 인기 있는 콘텐츠 관리 시스템 중 하나입니다. 또한 Docker 이미지로 DockerHub 레지스트리에서 사용할 수 있습니다. 이 Docker 이미지를 사용하여 Kubernetes 클러스터에 안정적이고 확장 가능한 웹사이트 플랫폼을 구축할 수 있습니다. Kubernetes에 WordPress를 배포하면 CI/CD 파이프라인을 구현하는 데 도움이 되며 새로운 업데이트를 출시하는 데 걸리는 시간이 단축됩니다. 또한 WordPress 웹사이트의 수평적 확장을 활성화하여 웹사이트 트래픽 급증에 대처할 수 있습니다.
이 가이드에서는 WordPress와 MySQL을(를) Persistent Volume과(와) 함께 Kubernetes 클러스터에 배포하는 방법을 보여줍니다.
전제 조건
- Kubernetes(k8s) 및 해당 오브젝트에 대한 기본적인 이해. 다음 가이드에서 Kubernetes 생태계에 대한 자세한 개요.
- 를 참조하십시오. Kubernetes 클러스터가 실행 중이어야 합니다. 이 튜토리얼을 따라 Ubuntu 20.04에 Kubernetes 클러스터를 설치.
Kubernetes 클러스터 확인
시작하기 전에 Kubernetes 클러스터의 상태를 확인하는 것이 좋습니다. kubectl 명령을 사용하여 Kubernetes를 확인할 수 있습니다.
|
1 |
kubectl get nodes |
모든 것이 정상이라면 다음과 같은 출력이 표시됩니다.

MySQL용 Secret 생성
A Secret은(는) 비밀번호나 키와 같은 민감한 데이터를 저장할 수 있는 오브젝트입니다. 이 글에서는 Secret을 사용하여 MySQL 비밀번호를 저장합니다.
먼저, 다음 명령을 사용하여 base64로 인코딩된 비밀번호를 생성합니다.
|
1 |
echo -n 'your_secure_password' | base64 |
다음 출력에서 비밀번호의 Secret 값을 얻을 수 있습니다.
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
다음으로, MySQL 및 WordPress용 secret.yaml 파일을 생성합니다.
|
1 |
nano secret.yaml |
다음 구성을 추가합니다.
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
파일을 저장하고 닫습니다. 그런 다음, 다음 명령을 사용하여 위의 구성을 Kubernetes 클러스터에 적용합니다.
|
1 |
kubectl apply -f secret.yaml |
다음과 같은 출력이 표시됩니다.
|
1 |
secret/mysql-pass created |
MySQL 및 WordPress용 PersistentVolume 생성
MySQL 및 WordPress 데이터를 저장하려면 PersistentVolume도 생성해야 합니다.
다음과 같이 pvc-mysql-wp.yaml 파일을 생성해 보겠습니다.
|
1 |
nano pvc-mysql-wp.yaml |
다음 구성을 추가합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi |
완료되면 파일을 저장하고 닫습니다.
다음으로, 다음 명령을 사용하여 Kubernetes 클러스터에 MySQL 및 WordPress용 PersistentVolume을 모두 생성합니다.
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
다음 출력에서 두 PersistentVolume을 모두 확인할 수 있습니다.
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
이제 다음 명령을 사용하여 두 PersistentVolume을 모두 확인할 수 있습니다.
|
1 |
kubectl get pv |
다음과 같은 출력이 표시됩니다.
|
1 2 3 |
이름 용량 액세스 모드 회수 정책 상태 클레임 스토리지클래스 이유 나이 pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-클레임 your-block-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-클레임 your-block-storage 3s |
MySQL 디플로이먼트 생성
다음으로, MySQL 도커 이미지를 다운로드하고 컨테이너를 생성하며, 다음 위치에 PersistentVolume을 마운트하는 MySQL 디플로이먼트 설정 파일을 생성합니다: /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
다음 설정을 추가합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql 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 |
완료되면 파일을 저장하고 닫습니다. 그런 다음 위의 구성을 Kubernetes 클러스터에 배포합니다.
|
1 |
kubectl apply -f mysql-deployment.yaml |
다음과 같은 출력이 표시되어야 합니다.

다음 명령을 사용하여 MySQL 배포를 확인할 수 있습니다.
|
1 |
kubectl get deployments |
다음 출력에서 MySQL 배포 상태를 확인할 수 있습니다.

WordPress 배포 생성
이제 WordPress 이미지를 다운로드하고 컨테이너를 생성하며, 웹사이트 데이터 파일을 위해 PersistentVolume을 /var/www/html에 마운트하는 WordPress 배포 구성 파일을 생성합니다. 이 파일은 또한 데이터베이스에 액세스하기 위한 WORDPRESS_DB_HOST 및 WORDPRESS_DB_PASSWORD 환경 변수를 생성합니다.
|
1 |
nano wordpress-deployment.yaml |
다음 구성을 추가합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: apps/v1 # 1.9.0 이전 버전의 경우 apps/v1beta2 사용 kind: Deployment metadata: name: 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 |
완료한 후 파일을 저장합니다. 그런 다음, 다음 명령을 사용하여 위의 구성을 Kubernetes 클러스터에 적용합니다.
|
1 |
kubectl apply -f wordpress-deployment.yaml |
다음 출력에서 성공적인 배포 메시지를 확인할 수 있습니다.
|
1 2 |
service/wordpress created deployment.apps/wordpress created |
WordPress 배포를 확인하려면 다음 명령을 실행합니다.
|
1 |
kubectl get deployments |
다음 출력에서 WordPress 배포 상태를 확인할 수 있습니다.

WordPress 웹 UI 접속
WordPress 대시보드에 접속하려면 LoadBalancer의 외부 IP와 포트 번호가 필요합니다. 다음 명령을 사용하여 이 정보를 검색할 수 있습니다.
|
1 |
kubectl get svc |
다음 출력에서 LoadBalancer IP와 포트를 확인할 수 있습니다.
|
1 2 3 4 |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP None <none> 3306/TCP 4m14s |
WordPress 파드에 대한 자세한 정보를 보려면 다음 명령을 실행합니다.
|
1 |
kubectl describe svc wordpress |
다음 출력에서 WordPress의 상세 정보를 확인할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Name: wordpress Namespace: default Labels: app=wordpress Annotations: <none> Selector: app=wordpress,tier=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Session Affinity: None External Traffic Policy: Cluster |
이제 웹 브라우저를 열고 다음 URL을 사용하여 WordPress 설치 페이지에 접속합니다. http://78.141.194.181:3162. 다음 화면에서 WordPress 설치 페이지를 볼 수 있습니다.

언어를 선택하고 필요한 단계를 완료하여 설치 프로세스를 마칩니다.
결론
이 포스트에서는 Kubernetes 클러스터에서 영구 볼륨을 사용하여 MySQL 및 WordPress를 배포하는 방법을 설명했습니다. 웹사이트 트래픽에 따라 WordPress 배포를 확장할 수도 있습니다. 이제 개발 요구 사항에 따라 위의 배포를 사용할 수 있습니다.
또한, 저희 블로그에서 Docker 및 Kubernetes를 다루는 다른 튜토리얼도 확인해 보세요:
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.