GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo implementar una instancia de WordPress en Kubernetes

Introducción

Como el sistema de administración de contenido más popular a nivel mundial, WordPress ejecuta sitios web de varios tamaños, tanto en términos de cantidad de contenido como de tráfico web. La implementación de WordPress en Kubernetes es una forma eficiente de habilitar la escala horizontal de un sitio web y manejar con éxito los aumentos repentinos de tráfico del sitio web.

Este tutorial explica dos métodos para implementar WordPress en Kubernetes:usar gráficos de Helm y crear su implementación desde cero.

Requisitos previos

  • Un clúster de Kubernetes con kubectl
  • Telmo 3
  • Privilegios administrativos en el sistema

Implementación de WordPress en Kubernetes con un Helm Chart

Los gráficos de Helm vienen con instalaciones de aplicaciones preconfiguradas que se pueden implementar con unos pocos comandos simples.

  1. Agregue el repositorio que contiene el gráfico de WordPress Helm que desea implementar:
helm repo add [repo-name] [repo-address]

El sistema confirma la adición exitosa del repositorio. El ejemplo utiliza el gráfico de Bitnami.

2. Actualice los repositorios locales de Helm:

helm repo update

3. Instale el gráfico con el comando helm install.

helm install [release-name] [repo-address]

Espere a que se despliegue el gráfico.

4. El servicio de WordPress usa LoadBalancer como una forma de exponer el servicio. Si está utilizando minikube, abra otra ventana de terminal y escriba el siguiente comando para emular LoadBalancer:

minikube tunnel

5. Cuando minikube muestra el mensaje En ejecución estado, minimizar la ventana y volver a la anterior.

6. Verifique la preparación de la implementación escribiendo:

kubectl get all

El comando enumera y muestra el estado de los pods, los servicios y las implementaciones.

7. Una vez que los pods y la implementación estén listos, use el siguiente comando para exportar el SERVICE_IP variable de entorno:

export SERVICE_IP=$(kubectl get svc --namespace default wp-test-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")

8. Ahora use el comando echo para mostrar la dirección IP del servicio:

echo "WordPress URL: http://$SERVICE_IP/"

9. Escriba la dirección en la barra de direcciones de su navegador. Comienza la instalación de WordPress.

Implementación de WordPress en Kubernetes con volúmenes persistentes

Al implementar WordPress con una configuración personalizada, debe crear una serie de archivos YAML para WordPress y la base de datos que utilizará la aplicación. El siguiente ejemplo usa MySQL, pero también puede optar por MariaDB.

1. Use un editor de texto para crear el archivo YAML para aprovisionar almacenamiento para la base de datos MySQL.

nano mysql-storage.yaml

El archivo define un volumen de almacenamiento persistente (PV) y reclama ese almacenamiento con PersistentVolumeClaim (PVC). El ejemplo usa la siguiente configuración:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Guarde el archivo y salga.

2. Cree la configuración de implementación de MySQL YAML.

nano mysql-deployment.yaml

El archivo de implementación contiene los datos relacionados con la imagen del contenedor y el almacenamiento. El claimName la declaración en la parte inferior debe corresponder al nombre de la PVC que creó en el Paso 1 .

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.7
        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 el archivo y salga.

3. Cree la configuración de servicio YAML para la base de datos.

nano mysql-service.yaml

El archivo especifica el puerto que utiliza WordPress para conectarse al servicio:

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None

Guarde el archivo y salga.

4. Ahora cree los mismos archivos YAML para WordPress. Comience con la asignación de almacenamiento:

nano wordpress-storage.yaml

El ejemplo usa la siguiente configuración:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wp-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Guarde el archivo y salga.

5. Cree el archivo de implementación:

nano wordpress-deployment.yaml

El archivo proporciona la imagen de Docker y conecta la implementación de WordPress con el PVC:

apiVersion: apps/v1
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:5.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 y salga.

6. Crea el servicio YAML:

nano wordpress-service.yaml

El ejemplo usa LoadBalancer para exponer el servicio:

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer

Guarde el archivo y salga.

7. Cree el archivo kustomization.yaml, que se utilizará para aplicar la configuración fácilmente:

nano kustomization.yaml

El archivo contiene dos partes:

  • secretGenerator produce el secreto de Kubernetes que pasa la información de inicio de sesión a los contenedores.
  • resources La sección enumera todos los archivos que participarán en la configuración. Enumere los archivos que creó en los pasos anteriores.
secretGenerator:
- name: mysql-pass
  literals:
  - password=test123
resources:
  - mysql-storage.yaml
  - mysql-deployment.yaml
  - mysql-service.yaml
  - wordpress-storage.yaml
  - wordpress-deployment.yaml
  - wordpress-service.yaml

Guarde el archivo y salga.

8. Aplique los archivos enumerados en kustomization.yaml con el siguiente comando:

kubectl apply -k ./

El sistema confirma la creación exitosa del secreto, los servicios, los PV, los PVC y las implementaciones:

9. Compruebe si los pods y las implementaciones están listas:

kubectl get all

10. Si usa minikube, abra otra ventana de terminal e inicie minikube tunnel para proporcionar emulación de equilibrio de carga:

minikube tunnel

Una vez que se esté ejecutando la emulación, minimice la ventana y regrese a la anterior.

11. Escriba el siguiente comando para exponer la URL del servicio que usará para acceder a la instancia de WordPress implementada:

minikube service wordpress-service --url

La URL se muestra como salida del comando:

12. Copie la URL y péguela en su navegador web. Comienza la instalación de WordPress.


Ubuntu
  1. Cómo crear un gráfico de timón

  2. Cómo implementar Elasticsearch en Kubernetes

  3. Cómo implementar Redis Cluster en Kubernetes

  4. Cómo implementar el equilibrio de carga de Nginx en el clúster de Kubernetes en Ubuntu 18.04 LTS

  5. Cómo implementar su primer pod en un clúster de Kubernetes

Cómo implementar el clúster de Kubernetes en AWS con Amazon EKS

Cómo implementar Mattermost en Ubuntu 20.04

Cómo implementar Kubernetes de un solo nodo con Microk8s en Ubuntu 20.04

Cómo implementar pilas de Docker Compose en Kubernetes con Kompose

Cómo implementar WordPress en Jelastic Cloud

Cómo instalar WordPress en Ubuntu 20.04