GNU/Linux >> Tutoriales Linux >  >> Linux

Implementación de MySQL en Kubernetes {Guía}

Introducción

La implementación de una base de datos funcional en un entorno en contenedores puede ser una tarea exigente. La razón radica en el conjunto de desafíos específicos que presentan las bases de datos para mantener su disponibilidad, estado y redundancia. Sin embargo, muchos desarrolladores prefieren tener sus pilas de aplicaciones y capas de datos organizadas con los mismos principios de implementación rápida y automatización que ofrecen plataformas como Kubernetes.

Este artículo le mostrará cómo implementar una instancia de base de datos MySQL en Kubernetes mediante volúmenes persistentes. Esta característica permite que las aplicaciones con estado superen la transitoriedad inherente de los pods K8.

Requisitos previos

  • Un clúster de Kubernetes con kubectl instalado
  • Acceso administrativo a su sistema

Despliegue de MySQL en Kubernetes

Para implementar correctamente una instancia de MySQL en Kubernetes, cree una serie de archivos YAML que usará para definir los siguientes objetos de Kubernetes:

  • Un secreto de Kubernetes para almacenar la contraseña de la base de datos.
  • Un volumen persistente (PV) para asignar espacio de almacenamiento para la base de datos.
  • Una reclamación de volumen persistente (PVC) que reclamará el PV para la implementación.
  • La implementación en sí.
  • El servicio de Kubernetes.

Paso 1:crear el secreto de Kubernetes

Utilice un editor de texto como Nano para crear el archivo secreto.

nano mysql-secret.yaml

El archivo define el secreto. Introduzca la contraseña de la cuenta raíz de MySQL en stringData sección del YAML.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
  password: test1234

Guarda el archivo y cierra. Use kubectl para aplicar los cambios al clúster.

kubectl apply -f mysql-secret.yaml

El sistema confirma la creación exitosa del secreto:

Paso 2:Cree un Volumen Persistente y un Reclamo de Volumen

Cree el archivo de configuración de almacenamiento:

nano mysql-storage.yaml

Este archivo consta de dos partes:

  • La primera parte define el volumen persistente. Personaliza la cantidad de almacenamiento asignado en spec.capacity.storage . En spec.hostPath especifique el punto de montaje del volumen.
  • La segunda parte del archivo define el PVC.
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Guarda el archivo y cierra.

Luego, aplique la configuración de almacenamiento con kubectl .

kubectl apply -f mysql-storage.yaml

El sistema confirma la creación del PV y el PVC.

Paso 3:Crear implementación de MySQL

  1. Cree el archivo de implementación. El archivo de implementación define los recursos que utilizará la implementación de MySQL.
nano mysql-deployment.yaml

2. En spec.template.spec.containers sección, especifique la imagen de MySQL:

containers:
- image: mysql:5.6
  name: mysql

3. Asigne el valor de MYSQL_ROOT_PASSWORD variable de entorno a la contraseña que especificó en el Secreto del Paso 1 .

env:
- name: MYSQL_ROOT_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-secret
      key: password

4. Conecte el PVC del Paso 2 al despliegue.

volumes:
- name: mysql-persistent-storage
  persistentVolumeClaim:
    claimName: mysql-pv-claim

5. En la sección separada del archivo, defina el nombre del servicio y el puerto.

Todo el YAML debería verse como en el siguiente ejemplo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              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
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

Guarda el archivo y cierra. Cree la implementación aplicando el archivo con kubectl :

kubectl apply -f mysql-deployment.yaml

El sistema confirma la creación exitosa tanto de la implementación como del servicio.

Acceda a su instancia de MySQL

Para acceder a la instancia de MySQL, acceda al pod creado por la implementación.

  1. Lista de los pods:
kubectl get pod

2. Busque el pod de MySQL y copie su nombre seleccionándolo y presionando Ctrl+Shift+C :

3. Obtenga un shell para el pod ejecutando el siguiente comando:

kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash

El caparazón del módulo reemplaza al caparazón principal:

4. Escriba el siguiente comando para acceder al shell de MySQL:

mysql -p

5. Cuando se le solicite, ingrese la contraseña que definió en el secreto de Kubernetes.

Aparece el shell de MySQL.

Actualice su implementación de MySQL

Edite el archivo YAML correspondiente para actualizar cualquier parte de la implementación. Aplicar los cambios con:

kubectl apply -f [filename]

Sin embargo, tenga en cuenta las siguientes dos limitaciones:

  • Esta implementación en particular es para instancia única Implementación de MySQL. Significa que la implementación no se puede escalar; funciona exactamente en un pod.
  • Esta implementación no admite actualizaciones continuas. Por lo tanto, el spec.strategy.type siempre debe establecerse en Recrear .

Elimine su instancia de MySQL

Si desea eliminar toda la implementación, use kubectl para eliminar cada uno de los objetos de Kubernetes relacionados con él:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret

Esta serie de comandos elimina la implementación, el servicio, PV, PVC y el secreto que creó. El sistema confirma la eliminación exitosa:


Linux
  1. Instalar MariaDB o MySQL en Linux

  2. Preguntas frecuentes sobre la implementación de MySQL

  3. Reparación de bases de datos MySQL InnoDB

  4. Cómo eliminar una implementación de Kubernetes [Consejos rápidos de K8s]

  5. Copia de seguridad MySQL 1.1

Cómo crear un Deployment en Kubernetes

Creación de su primera implementación en un clúster de Kubernetes

Guía completa para principiantes sobre la implementación de clústeres de Kubernetes en CentOS (y otros Linux)

¿Por qué Kubernetes se llama K8?

¿Qué es MySQL vs MariaDB vs Percona?

OpenShift vs Kubernetes:comparación de la plataforma de implementación de contenedores