Cómo configurar WordPress con MySQL en Kubernetes usando Helm

Introducción

A medida que más desarrolladores trabajan en entornos distribuidos, herramientas como Kubernetes se han vuelto necesarias para mantener los componentes de la aplicación estandarizados en entornos de producción y creación dinámica.

Con la creciente complejidad de los ecosistemas de aplicaciones y la creciente popularidad de Kuberbetes, las herramientas que ayudan a administrar los recursos dentro de los grupos de Kubernetes se han vuelto esenciales.

Helm es un gestor de paquetes de código abierto para Kubernetes que simplifica el proceso de implementación y actualización de las aplicaciones en un clúster de Kubernetes, a la vez que proporciona una manera de encontrar y compartir aplicaciones listas para instalar que están empaquetadas como gráficos de Kubernetes .

En este tutorial, usaremos Helm para configurar WordPress sobre un clúster de Kubernetes, con el fin de crear un sitio web de alta disponibilidad. Además de aprovechar los aspectos de escalabilidad intrínseca y alta disponibilidad de Kubernetes, esta configuración ayudará a mantener a WordPress seguro al proporcionar flujos de trabajo de actualización y retrotracción simplificados a través de Helm.

Usaremos un servidor MySQL externo para abstraer el componente de la base de datos, ya que puede ser parte de un clúster separado o un servicio administrado para una disponibilidad extendida.

Después de completar los pasos descritos en este tutorial, tendrás una instalación de WordPress completamente funcional dentro de un entorno de clúster en contenedores administrado por Kubernetes.

Prerrequisitos

Para completar esta guía, necesitará lo siguiente:

  • Un clúster Kubernetes 1.10+ con control de acceso basado en roles (RBAC) habilitado.
  • La herramienta kubectl de línea de comandos instalada en tu máquina local o servidor de desarrollo, configurada para conectarte a tu clúster. Consulta la documentación oficial de Kubernetes para obtener instrucciones sobre cómo configurar esto.
  • El administrador de paquetes Helm instalado en tu máquina local o servidor de desarrollo, y Tiller instalado en tu clúster.
  • Un servidor MySQL externo con acceso SSH y la contraseña root de MySQL. Para configurarlo, puedes seguir uno de nuestros tutoriales de MySQL sobre MySQL.

Antes de continuar, asegúrate de poder iniciar sesión en tu servidor MySQL y de que tengas conectividad con tu clúster Kubernetes. En caso de que tengas varios clústeres configurados en tu archivo kubectl de configuración, debes asegurarte de estar conectado al clúster correcto ejecutando el siguiente comando desde tu máquina local o servidor de desarrollo:

Este es un ejemplo de salida del comando:

El signo de asterisco (*) indica qué clúster es actualmente el contexto predeterminado. En caso de que necesites cambiar el contexto actual, ejecuta:

Ahora deberías estar listo para seguir el resto de la guía.

Paso 1 – Configurando MySQL

Primero, crearemos un usuario de MySQL dedicado y una base de datos para WordPress, que permita conexiones desde hosts externos. Esto es necesario porque nuestra instalación de WordPress vivirá en un servidor separado dentro del clúster Kubernetes.

En caso de que ya tengas un usuario de MySQL dedicado y una base de datos configurada para WordPress, puedes pasar al siguiente paso.

Desde el servidor MySQL, inicia sesión en MySQL con el siguiente comando:

Se te pedirá que proporciones la contraseña que configuraste para la cuenta root de MySQL cuando instalaste el software por primera vez. Después de iniciar sesión, MySQL te dará un comando que puedes usar para crear la base de datos y el usuario que necesitamos para WordPress.

Nota 

Para este tutorial, crearemos una base de datos llamada wordpress y un usuario nombrado wordpress_user, identificado por la contraseña password. Ten en cuenta que estos son valores de ejemplo inseguros, y debes modificarlos en consecuencia a lo largo de esta guía.

Para crear la base de datos, puedes utilizar la siguiente declaración:

Ahora, vamos a crear un usuario MySQL dedicado para esta base de datos:

El usuario wordpress_user fue creado, pero aún no tiene permisos de acceso. El siguiente comando le dará a este usuario acceso de administrador (todos los privilegios) a la base de datos de wordpress desde redes locales y externas:

Para actualizar las tablas internas de MySQL que administran los permisos de acceso, usa la siguiente declaración:

Ahora puedes salir del cliente MySQL con:

Para probar que los cambios tuvieron éxito, puedes iniciar sesión en el cliente de línea de comandos de MySQL nuevamente, esta vez usando la nueva cuenta wordpress_user para autenticarte:

Debes usar la misma contraseña que proporcionaste al crear este usuario de MySQL con la declaración CREATE_USER. Para confirmar que tu nuevo usuario tiene acceso a la base de datos wordpress, puedes usar la siguiente declaración:

Resultado

Debes ver algo como la siguiente salida:

Después de confirmar que la base de datos wordpress se incluye en los resultados, puedes salir del cliente de línea de comandos de MySQL con:

Ahora tienes una base de datos MySQL dedicada para WordPress y credenciales de acceso válidas para usar dentro de ella. Debido a que nuestra instalación de WordPress estará en un servidor separado, aún necesitamos editar nuestra configuración de MySQL para permitir conexiones provenientes de hosts externos.

Mientras estés en tu servidor MySQL, abre el archivo /etc/mysql/mysql.conf.d/mysqld.cnf utilizando el editor de línea de comandos que elijas:

Localiza la configuración bind-address dentro de este archivo. Por defecto, MySQL solo escucha en 127.0.0.1(localhost). Para aceptar conexiones de hosts externos, necesitamos cambiar este valor a 0.0.0.0. Así es como bind-address debe verse en tu configuración:

Cuando hayas terminado de realizar estos cambios, guarda y cierra el archivo. Tendrás que reiniciar MySQL con el siguiente comando:

Para comprobar si puedes conectarte de forma remota, ejecuta el siguiente comando desde tu máquina local o servidor de desarrollo:

Recuerda cambiar mysql_server_ip por la dirección IP o el nombre de host de tu servidor MySQL. Si puedes conectarte sin errores, ahora estás listo para continuar con el siguiente paso.

Paso 2 – Instalando WordPress

Ahora que tenemos la información necesaria para conectarnos a la base de datos MySQL, podemos seguir adelante e instalar WordPress usando Helm.

De forma predeterminada, WordPress chart instala MariaDB en un pod separado dentro del clúster y lo utiliza como la base de datos de WordPress. Queremos deshabilitar este comportamiento y configurar WordPress para usar una base de datos MySQL externa.

Esta y otras opciones de configuración (como el usuario de administrador de WordPress y la contraseña predeterminadas) se pueden configurar en el momento de la instalación, ya sea a través de los parámetros de la línea de comandos o a través de un archivo de configuración YAML independiente.

Para mantener las cosas organizadas y fácilmente extendibles, vamos a utilizar un archivo de configuración.

Desde tu máquina local o servidor de desarrollo, crea un nuevo directorio para la configuración de tu proyecto y navega en él:

A continuación, crea un archivo con el nombre values.yaml, usando el editor de texto que elijas:

Dentro de este archivo, debemos configurar algunas variables que definirán cómo se conecta WordPress a la base de datos, así como información básica sobre tu sitio y el usuario administrador inicial para iniciar sesión en WordPress cuando se complete la instalación.

Basaremos nuestra configuración en el archivo  values.yaml predeterminado de WordPress Helm chart. La sección Blog/Site Info contiene opciones generales para tu blog de WordPress, como el nombre del blog y las credenciales iniciales del usuario. La sección Database Settings de este archivo contiene la configuración para conectarse al servidor remoto de MySQL. MariaDB está deshabilitado en la sección final.

Configuración del archivo

Copia los siguientes contenidos en tu archivo values.yaml, reemplazando los valores resaltados con tus valores personalizados:

Acabamos de configurar las siguientes opciones:

  • wordpressUsername: inicio de sesión de usuario de WordPress.
  • wordpressPassword: contraseña del usuario de WordPress.
  • wordpressEmail: email del usuario de WordPress.
  • wordpressFirstName: primer nombre de usuario de WordPress.
  • wordpressLastName: Apellido del usuario de WordPress.
  • wordpressBlogName: Nombre del sitio o blog.
  • host: dirección IP del servidor MySQL o nombre de host.
  • user: usuario MySQL.
  • password: contraseña de MySQL.
  • database: nombre de la base de datos MySQL.

Cuando hayas terminado de editar, guarda el archivo y sal del editor.

Ahora que tenemos todas las configuraciones establecidas, es hora de ejecutar helm para instalar WordPress. El siguiente comando le indica a helm que instale la versión estable más reciente de WordPress chart con el nombre myblog, utilizando values.yaml como archivo de configuración:

Deberías obtener una salida similar a la siguiente:

Resultado de la instalación

Una vez finalizada la instalación, se crea un servicio llamado myblog-wordpress dentro de tu grupo de Kubernetes, pero puede tomar unos minutos antes de que el contenedor esté listo y la información External-IP esté disponible. Para verificar el estado de este servicio y recuperar tu dirección IP externa, ejecuta:

Deberías obtener una salida similar a la siguiente:

Este comando te brinda información detallada sobre los servicios que se ejecutan en tu grupo, incluidos el nombre y el tipo del servicio, así como las direcciones IP utilizadas por estos servicios. Como puedes ver en la salida, la instalación de WordPress se está realizando como myblog-wordpress en la dirección IP externa 203.0.113.110.

Nota: En caso de que estés utilizando minikube para probar esta configuración, deberás ejecutar minikube service myblog-wordpress para exponer el servidor web contenedor para que puedas acceder a él desde tu navegador.

Tu instalación de WordPress ya está operativa. Para acceder a la interfaz de administración, usa la dirección IP pública obtenida de la salida de kubectl get services, seguido de /wp-admin en tu navegador web:

Debes usar las credenciales definidas en tu archivo values.yaml para iniciar sesión y comenzar a configurar su sitio de WordPress.

Paso 3 – Actualizar WordPress

Debido a su popularidad, WordPress suele ser un objetivo de explotación maliciosa, por lo que es importante mantenerlo actualizado. Podemos actualizar a los nuevos lanzamientos de Helm con el comando helm upgrade.

Para listar todas las versiones actuales, ejecuta el siguiente comando desde tu máquina local o servidor de desarrollo:

Obtendrás una salida similar a la siguiente:

Como puede ver en la salida, nuestra versión actual de WordPress es 5.0.3(versión de la aplicación), mientras que la versión de chart es 5.1.2. Si deseas actualizar una versión a una versión más nueva de un chart, primero actualiza tus repositorios Helm con:

Puedes esperar ver la siguiente salida:

Ahora puedes verificar si hay una versión más nueva de WordPress chart disponible con:

Resultado

Deberías ver una salida similar a esta:

Como puede ver en la salida, hay un nuevo chart disponible (versión 5.9.0) con WordPress 5.1.1 (versión de la aplicación). Siempre que desees actualizar tu versión de WordPress al último WordPress chart, debes ejecutar:

Este comando producirá una salida muy similar a la salida producida por helm install. Es importante proporcionar el mismo archivo de configuración que usamos al instalar el WordPress chart por primera vez, ya que contiene la configuración de base de datos personalizada que definimos para nuestra configuración.

Ahora, si ejecutas helm list nuevamente, deberías ver información actualizada sobre su actualización:

Ha actualizado con éxito su WordPress a la última versión del gráfico de WordPress.

Regresando a una versión anterior

Cada vez que actualizas una versión, Helm crea una nueva revisión de esa versión. Una revisión establece un punto de control fijo donde puedes regresar si las cosas no funcionan como se espera. Es similar a un commit  en Git, porque crea un historial de cambios que se pueden comparar y revertir. Si algo sale mal durante el proceso de actualización, siempre puedes revertir a una revisión previa de una versión de Helm dada con el comando helm rollback:

Por ejemplo, si queremos deshacer la actualización y revertir nuestra versión de WordPress a su primera versión, usaríamos:

Esto haría volver la instalación de WordPress a su primera versión. Deberías ver el siguiente resultado, que indica que la reversión se realizó correctamente:

Al ejecutar de nuevo helm list ahora debería indicar que WordPress se volvió a actualizar a 5.0.3, versión de chart 5.1.2:

Ten en cuenta que al revertir una versión se creará una nueva revisión, basada en la revisión de destino de la reversión. Nuestra versión de WordPress nombrada myblog ahora está en la revisión número tres, que se basó en la revisión número uno.

Conclusión

En esta guía, instalamos WordPress con un servidor MySQL externo en un clúster Kubernetes usando la herramienta de línea de comandos Helm. También aprendimos cómo actualizar una versión de WordPress a una nueva versión de chart y cómo revertir una versión si algo sale mal durante el proceso de actualización.

Como pasos adicionales, puedes considerar la configuración de Nginx Ingress con Cert-Manager para habilitar el alojamiento virtual basado en nombres y configurar un certificado SSL para tu sitio de WordPress. También debes verificar la configuración de producción recomendada para WordPress chart.

Si deseas obtener más información sobre Kubernetes y Helm, consulta este post sobre Kubernetes disponible en nuestro sitio.