WordPress es uno de los sistemas de gestión de contenidos más populares utilizados para implementar blogs y sitios web en internet. También está disponible como una imagen de Docker en el registro DockerHub. Puede utilizar esta imagen de Docker para crear una plataforma de sitio web confiable y escalable en el clúster de Kubernetes. Implementar WordPress en Kubernetes le ayudará a implementar un pipeline de CI/CD y reduce el tiempo necesario para lanzar nuevas actualizaciones. También puede habilitar el escalado horizontal del sitio web de WordPress para manejar picos de tráfico en el sitio web.
Esta guía le mostrará cómo implementar WordPress y MySQL con un Volumen Persistente en el clúster de Kubernetes.
Requisitos previos
- Una comprensión básica de Kubernetes (k8s) y sus objetos. Consulte esta guía para obtener una visión general detallada del ecosistema de Kubernetes.
- Un clúster de Kubernetes está activo y en funcionamiento. Siga este tutorial para instalar el clúster de Kubernetes en Ubuntu 20.04.
Verificar el clúster de Kubernetes
Antes de comenzar, se recomienda verificar el estado del clúster de Kubernetes. Puede utilizar el comando kubectl para verificar Kubernetes.
|
1 |
kubectl get nodes |
Si todo está bien, debería obtener la siguiente salida.

Crear un Secreto para MySQL
Un Secreto es un objeto que le permite almacenar datos confidenciales como una contraseña o una clave. En esta publicación, utilizaremos un Secreto para almacenar la contraseña de MySQL.
Primero, cree una contraseña codificada en base64 utilizando el siguiente comando.
|
1 |
echo -n 'your_secure_password' | base64 |
Obtendrá su contraseña secreta en la siguiente salida.
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
A continuación, cree un archivo secret.yaml para MySQL y WordPress.
|
1 |
nano secret.yaml |
Añada la siguiente configuración.
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Guarde y cierre el archivo. Luego, aplique la configuración anterior al clúster de Kubernetes utilizando el siguiente comando.
|
1 |
kubectl apply -f secret.yaml |
Obtendrá la siguiente salida.
|
1 |
secret/mysql-pass created |
Crear un PersistentVolume para MySQL y WordPress
También necesitará crear un PersistentVolume para almacenar los datos de MySQL y WordPress.
Creemos un archivo pvc-mysql-wp.yaml .
|
1 |
nano pvc-mysql-wp.yaml |
Añada las siguientes configuraciones.
|
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 |
Guarde y cierre el archivo cuando haya terminado.
A continuación, cree PersistentVolumes tanto para MySQL como para WordPress en el clúster de Kubernetes utilizando el siguiente comando.
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
Debería ver ambos PersistentVolumes en la siguiente salida.
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
Ahora puede verificar ambos PersistentVolumes utilizando el siguiente comando.
|
1 |
kubectl get pv |
Debería ver la siguiente salida.
|
1 2 3 |
NOMBRE CAPACIDAD ACCESO MODOS RECLAMACIÓN POLÍTICA ESTADO PETICIÓN CLASE DE ALMACENAMIENTO MOTIVO EDAD pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-claim your-block-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-claim your-block-storage 3s |
Crear despliegue de MySQL
A continuación, cree un archivo de configuración de despliegue de MySQL para descargar la imagen de Docker de MySQL, crear un contenedor y montar el PersistentVolume en /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
Añada la siguiente configuración.
|
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 |
Guarde y cierre el archivo cuando haya terminado. Luego, implemente la configuración anterior en el clúster de Kubernetes.
|
1 |
kubectl apply -f mysql-deployment.yaml |
Debería ver la siguiente salida.

Puede verificar la implementación de MySQL utilizando el siguiente comando.
|
1 |
kubectl get deployments |
Debería ver el estado de la implementación de MySQL en la siguiente salida.

Crear la implementación de WordPress
Ahora, cree un archivo de configuración de implementación de WordPress para descargar la imagen de WordPress, crear un contenedor y montar el PersistentVolume en /var/www/html para los archivos de datos del sitio web. Este archivo también creará las WORDPRESS_DB_HOST y WORDPRESS_DB_PASSWORD variables de entorno para acceder a la base de datos.
|
1 |
nano wordpress-deployment.yaml |
Añada la siguiente configuración.
|
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 # para versiones anteriores a la 1.9.0 use 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 |
Guarde el archivo después de terminar. Luego, aplique la configuración anterior al clúster de Kubernetes usando el siguiente comando.
|
1 |
kubectl apply -f wordpress-deployment.yaml |
Debería ver un mensaje de despliegue exitoso en la siguiente salida.
|
1 2 |
service/wordpress creado deployment.apps/wordpress creado |
Para verificar el despliegue de WordPress, ejecute el siguiente comando.
|
1 |
kubectl get deployments |
Debería ver el estado del despliegue de WordPress en la siguiente salida.

Access WordPress Web UI
Para acceder al panel de control de WordPress, necesitará la IP externa y el número de puerto del LoadBalancer. Puede recuperar esta información utilizando el siguiente comando.
|
1 |
kubectl get svc |
Obtendrá la IP y el puerto del LoadBalancer en la siguiente salida.
|
1 2 3 4 |
NOMBRE TIPO CLUSTER-IP EXTERNA-IP PUERTO(S) EDAD kubernetes ClusterIP 10.96.0.1 <ninguno> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP Ninguno <ninguno> 3306/TCP 4m14s |
Para obtener información detallada sobre sus pods de WordPress, ejecute el siguiente comando.
|
1 |
kubectl describe svc wordpress |
Debería obtener información detallada de WordPress en la siguiente salida.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Nombre: wordpress Namespace: default Etiquetas: app=wordpress Anotaciones: <ninguno> Selector: app=wordpress,tier=frontend Tipo: LoadBalancer IP Familia Política: SingleStack IP Familias: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Puerto: <sin definir> 80/TCP TargetPort: 80/TCP NodePort: <sin definir> 31624/TCP Endpoints: 10.244.23.66:80 Sesión Afinidad: Ninguna Externo Tráfico Política: Cluster |
Ahora, abra su navegador web y acceda a la página de instalación de WordPress utilizando la URL http://78.141.194.181:3162. Debería ver la página de instalación de WordPress en la siguiente pantalla.

Seleccione su idioma y complete los pasos requeridos para finalizar el proceso de instalación.
Conclusión
En esta publicación, explicamos cómo desplegar MySQL y WordPress con el volumen persistente en el clúster de Kubernetes. También puede escalar su despliegue de WordPress en función del tráfico de su sitio web. Ahora puede utilizar el despliegue anterior según sus necesidades de desarrollo.
Además, eche un vistazo a nuestros otros tutoriales centrados en Docker y Kubernetes que puede encontrar en nuestro blog:
Comentarios
Aún no hay comentarios. Sea el primero.