LINUX

Cómo instalar WordPress en Kubernetes en Linode

Instalar WordPress en Kubernetes en Linode

WordPress es conocido como una de las herramientas de blogs más populares. Utiliza una base de datos relacional para almacenar los contenidos: artículos, metadatos involucrados, mientras que PersistentVolume (PV) y PersistentVolumeClaim (PVC) almacenan datos de activos.

Este tutorial le mostrará la forma de instalar una única réplica de un sitio de WordPress utilizando la base de datos MySQL en Kubernetes en Linode.

Configurar un clúster de Kubernetes en Linode

Esta sección recorrerá todos los pasos para configurar un Kubernetes en linode.com. Primero, registremos una cuenta en Linode y luego inicie sesión en Linode Dashboard. Vaya al submenú de Kubernetes, luego haga clic en el botón ‘Agregar un clúster’ en la esquina superior derecha y complete el campo: Etiqueta de clúster, elija una región adecuada y elija la versión de Kubernetes.

Kubernetes: crea un linode de clúster
Submenú de Kubernetes en el panel de Linode

Luego, agreguemos grupos de nodos para su clúster de Kubernetes. En este tutorial, configuraremos un clúster de 1 nodo con un plan ‘Dedicado de 4 GB’, el nodo tiene 4 GB de RAM, 2 CPU y 80 GB de almacenamiento.

Agregar grupos de nodos
Agregar grupos de nodos

Por último, haga clic en «Crear clúster» para aprovisionar el clúster de Kubernetes.

Crear clúster
Crear clúster

Esperando unos minutos, el clúster de Kubernetes se aprovisionó correctamente. Descarguemos el archivo Kubeconfig a su máquina local, para que pueda interactuar con el clúster cómodamente.

Descarga kubeconfig
Descarga kubeconfig

En su máquina local, cree una carpeta llamada .kube en el directorio de inicio y mueva el archivo descargado a esa carpeta:

$ mkdir ~/.kube
$ mv wordpress-kubeconfig.yaml .kube/config

Además, debes instalar la herramienta kubectl:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
$ chmod +x kubectl
$ sudo mv kubectl /usr/local/bin

Ahora puede obtener la información de su clúster de Kubernetes ejecutando el siguiente comando:

$ kubectl get node

NAME                                                STATUS   ROLES    AGE    VERSION
lke11043-13758-5f73eca05dae    Ready       5m   v1.18.8

Crear PersistentVolume y PersistentVolumeClaim

Tanto WordPress como MySQL necesitan PersistentVolume (PV) para almacenar datos. PersistentVolume (PV) y PersistentVolumeClaim (PVC) son independientes del ciclo de vida del pod de la aplicación. Cuando reinicia, reprograma o elimina un Pod, el PV y el PVC aún permanecen y conservan los datos.

En primer lugar, proporcione un PersistentVolume (PV) y un PersistentVolumeClaim (PVC) lo reclamará. Crea el archivo de manifiesto llamado pvc-mysql-wp.yaml como sigue:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Usando el comando kubectl aplicar para crear el PV:

$ kubectl apply -f pvc-mysql-wp.yaml                                                                                                                                  
persistentvolumeclaim/mysql-pv-claim created
persistentvolumeclaim/wp-pv-claim created 

Verifique que los PV se aprovisionaron automáticamente después de crear PVC:

$ kubectl get pv                    
NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS                  REASON   AGE
pvc-658d8d2da7a241bd   20Gi       RWO            Retain           Bound    default/wp-pv-claim      linode-block-storage-retain            5m
pvc-ca93cd86df0d49c8   20Gi       RWO            Retain           Bound    default/mysql-pv-claim   linode-block-storage-retain            5m1s

Crear contraseña para la base de datos MySQL

Kubernetes usa Secret para almacenar datos confidenciales como contraseñas o claves privadas.

Vamos a crear un archivo secret.yaml con su editor favorito de la siguiente manera:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-pass
type: Opaque
data:
  password: yourpassword

Aplicar el manifiesto:

$ kubectl apply -f secret.yaml
secret/mysql-pass created

Verifique que el secreto se haya creado correctamente:

$ kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-gcgp4   kubernetes.io/service-account-token   3      7h52m
mysql-pass            Opaque                                1      2m33s 

Implementar MySQL

Puede utilizar el siguiente archivo de manifiesto para crear una implementación de instancia única de MySQL. El PersistentVolume se montará en / var / lib / mysql.

Vamos a crear un archivo mysql-deployment.yaml:

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 # for versions before 1.9.0 use apps/v1beta2
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


Luego, aplique el manifiesto anterior:

$ kubectl apply -f mysql-deployment.yaml       
service/wordpress-mysql unchanged
deployment.apps/wordpress-mysql created

Verifique que el pod de MySQL se haya implementado correctamente:

$ kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
wordpress-mysql-57464b4779-vtjrf   1/1     Running   0          3m33s

Implementar WordPress

Puede usar el siguiente manifiesto para implementar WordPress en su clúster de Kubernetes. El PersistentVolume utilizado por el contenedor de WordPress se montará en / var / www / html.

El servicio wordpress tiene tipo LoadBalancer para poder acceder desde fuera del cluster.

Vamos a crear un archivo wordpress-deployment.yaml:

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: apps/v1 # for versions before 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

Ahora, ejecutemos el siguiente comando para implementar WordPress:

$ kubectl apply -f wordpress-deployment.yaml 
service/wordpress created
deployment.apps/wordpress created

Verifique que WordPress esté funcionando:

$ kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
wordpress-6857459697-wmgn9         1/1     Running   0          3m34s
wordpress-mysql-57464b4779-vtjrf   1/1     Running   0          32m

Verifique que todos los servicios se estén ejecutando:

$ kubectl get svc                           
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
kubernetes        ClusterIP      10.128.0.1                  443/TCP        12h
wordpress         LoadBalancer   10.128.108.139   172.104.37.236   80:30567/TCP   5s
wordpress-mysql   ClusterIP      None                        3306/TCP       29m

Ahora puedes acceder a la página de WordPress mediante la IP EXTERAL del servicio wordpress. Copiemos y peguemos en su navegador web:

Página de configuración de WordPress
Página de configuración de WordPress

Conclusión

WordPress es una herramienta de blogs realmente poderosa para cualquier creador de contenido y también para desarrolladores. Este tutorial ha pasado por todos los pasos para crear un clúster de Kubernetes en Linode y configurar la página de WordPress en él.

Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar