Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2707

Una sinfonía en C#: Ejecutar Wordpress + MySQL en Kubernetes paso a paso

$
0
0

En las siguientes semanas voy a publicar una serie de post sobre cómo ejecutar Wordpress en Kubernetes paso a paso, mayormente para comprender los principales elementos de Kubernetes y cómo interactúan.

En esta primera publicación vamos a hacer una aproximación bien simple. Tomaremos un docker-compose como base y convertirlo a menos en los diferentes yaml para que funcione en Kubernetes.

En mi caso voy a usar Docker Desktop sobre Windows.

Convertir Wordpress desde docker-compose a Kubernetes

A modo de ejercicio y para asentar conocimientos la idea es, a partir de un docker-compose, generar los yaml para desplegar Wordpress en Kubernetes. Lo iremos haciendo paso a paso, desde el enfoque más simple y llegar a un buen nivel de complejidad para cubrir gran parte de los conceptos de Kubernetes.

docker-compose actual

Este docker-compose es el que aparece en Docker hub de Wordpress y lo usaremos como base.

version:'3.1'services:wordpress:image:wordpressrestart:alwaysports:-8080:80environment:WORDPRESS_DB_HOST:dbWORDPRESS_DB_USER:exampleuserWORDPRESS_DB_PASSWORD:examplepassWORDPRESS_DB_NAME:exampledbvolumes:-wordpress:/var/www/htmldb:image:mysql:5.7restart:alwaysenvironment:MYSQL_DATABASE:exampledbMYSQL_USER:exampleuserMYSQL_PASSWORD:examplepassMYSQL_RANDOM_ROOT_PASSWORD:'1'volumes:-db:/var/lib/mysqlvolumes:wordpress:db:

Tiene dos servicios, Wordpress y MySQL, un par de volúmenes, uno para la base de datos y otro para los html de Wordpress, unas variables de entorno y algunos secrets (passwords)

Primer approach

Vamos a crear la versión más simple, para ello vamos a necesitar lo mínimo para que esto funcione en Kubernetes:

  • Dos deployments:
    • Worpress: for wordpress app
    • MySQL: for mysql app
  • Dos service:
    • CluterIP: para exponer MySQL dentro del cluster y que Wordpress lo puede alcanzar
    • Loadbalancer: para exponer Wordpress al mundo exterior y poder usarlo.

De momento no vamos a poner storage externo, ni configuraciones ni nada.

Deployment de wordpress

Lo único particular es que le pasamos las variables de entorno y el host de MySQL es mysql y el label app=my-wordpress

apiVersion:apps/v1kind:Deploymentmetadata:name:my-wordpresslabels:app:my-wordpressspec:replicas:1selector:matchLabels:app:my-wordpresstemplate:metadata:labels:app:my-wordpressspec:containers:-name:my-wordpressimage:wordpress:latestports:-containerPort:80env:-name:WORDPRESS_DB_PASSWORDvalue:"my-secret-pw"-name:WORDPRESS_DB_USERvalue:"my-user"-name:WORDPRESS_DB_NAMEvalue:"my-db"-name:WORDPRESS_DB_HOSTvalue:"mysql"

Deployment MySQL

Similar a Wordpress, un deployment, le pasamos las variables de entorno y en este caso el label app=my-db

apiVersion:apps/v1kind:Deploymentmetadata:name:my-dblabels:app:my-dbspec:replicas:1selector:matchLabels:app:my-dbtemplate:metadata:labels:app:my-dbspec:containers:-name:my-dbimage:mysql:5.7ports:-containerPort:80env:-name:MYSQL_ROOT_PASSWORDvalue:"my-secret-pw"-name:MYSQL_DATABASEvalue:"my-db"-name:MYSQL_USERvalue:"my-user"-name:MYSQL_PASSWORDvalue:"my-secret-pw"

Servicios

Tenemos Wordpress y MySQL funcionando, pero necesitamos crear dos servicios como ya dijimos Uno para que Wordpress puede alcanzar a MySQL (un ClusterIP porque sería un ciente interno del cluster) Y otro para acceder a Wordpress desde el exterior, un LoadBalancer.

apiVersion:v1kind:Servicemetadata:name:mysql## DNS name (cluster internal)labels:app:my-dbspec:type:ClusterIPselector:app:my-db# busca el deployment que tenga esa labelports:# puertos que va a escuchar-name:httpport:3306targetPort:3306-name:mysqlport:33060targetPort:33060

Con este ClusterIP ya podemos utilizar un port-forward para probar Wordpress

kubectlport-forwarddeployment/my-wordpress8080:80

Con portforward funciona, vamos a crear el LoadBalancer

apiVersion:v1kind:Servicemetadata:name:wordpress-loadbalancerspec:type:LoadBalancerselector:app:my-wordpress# Busca a partir del laberl app: my-wordpresports:-name:"80"port:8080targetPort:80

Y listo, con esto tenemos Wordpress en el puerto 8080 conectado a MySQL

Nos leemos la próxima para mejorar la persistencia


Viewing all articles
Browse latest Browse all 2707