4.2. Gestión de clústeres de Kubernetes

Los usuarios de autoservicio pueden implementar clústeres de Kubernetes listos para usar con almacenamiento persistente para la gestión de aplicaciones en contenedores.

Los requisitos previos para crear un clúster de Kubernetes son los siguientes:

  • El componente Kubernetes como servicio. Se puede implementar junto con el clúster de procesamiento o más adelante (consulte Creating the Compute Cluster o Managing Add-On Services).
  • Una red que interconectará el maestro de Kubernetes y los nodos de los trabajadores. Puede ser tanto una red pública compartida como una red privada vinculada a una pública mediante un enrutador virtual. La red privada debe tener especificada una puerta de enlace y un servidor DNS.
  • Una clave SSH que se instalará en los nodos maestro y trabajador.
  • Recursos suficientes para todos los nodos de Kubernetes, teniendo en cuenta sus variantes.

Importante

La red en la que cree un clúster de Kubernetes no debe superponerse con las siguientes redes predeterminadas:

  • 10.100.0.0/24, utilizada en las conexiones de redes a nivel del pod
  • 10.254.0.0/16, utilizada para asignar direcciones IP del clúster Kubernetes

Para crear un clúster de Kubernetes, en la pantalla Clústeres de Kubernetes, haga clic en Crear a la derecha. Se abrirá una ventana en la que puede establecer los parámetros de su clúster:

  1. En la sección Clúster, seleccione una versión de Kubernetes, introduzca un nombre de clúster y elija una clave SSH.

    ../_images/stor_image195_ac.png
  2. En la sección Red, seleccione un enrutador virtual mencionado anteriormente en los requisitos previos. También se recomienda marcar la casilla Usar una dirección IP flotante. En este caso, se asignará a los nodos de Kubernetes direcciones IP públicas para simplificar el acceso.

    ../_images/stor_image196_ac.png
  3. En la sección Nodo maestro, seleccione una variante y elija si se habilita o no la alta disponibilidad para el nodo maestro. Si la habilita, se crearán tres instancias del nodo maestro. Funcionarán en el modo Activo/Activo.

    ../_images/stor_image197_ac.png
  4. En la sección Volumen contenedor, seleccione una directiva de almacenamiento e introduzca el tamaño de volumen de los nodos maestros y trabajadores.

    ../_images/stor_image198_ac.png
  5. En la sección Trabajadores, establezca un número de trabajadores a crear y seleccione una variante para cada uno.

    ../_images/stor_image199_ac.png
  6. Por último, haga clic en Crear.

Comenzará la creación del clúster de Kubernetes. Los nodos maestros y trabajadores aparecerán en la pantalla Equipos virtuales, mientras que sus volúmenes se mostrarán en la pantalla Volúmenes.

Una vez preparado el clúster, haga clic en Acceso a Kubernetes para obtener instrucciones sobre cómo puede acceder al panel de control.

Para eliminar un clúster de Kubernetes, ábralo en la pantalla Clústeres de Kubernetes y haga clic en Eliminar. Los equipos virtuales maestros y trabajadores se eliminarán junto con sus volúmenes.

4.2.1. Utilizar volúmenes persistentes para Kubernetes Pods

Kubernetes permite utilizar volúmenes de procesamiento como almacenamiento persistente para pods. Los volúmenes persistentes (PV) existen de manera independiente a los pods, lo que significa que dicho volumen persiste después de que se elimine el pod en el que está montado. El PV puede montarse en otros pods para acceder a los datos almacenados en el mismo. Puede aprovisionar los PV de manera dinámica, sin tener que crearlos manualmente, o estática, utilizando volúmenes que existan en el clúster de procesamiento.

4.2.1.1. Crear clases de almacenamiento

En Acronis Cyber Infrastructure, las clases de almacenamiento se asignan para procesar las políticas de almacenamiento definidas en el panel de administración. Es necesario crear una clase de almacenamiento para todas las operaciones de almacenamiento de un clúster de Kubernetes.

Para crear una clase de almacenamiento, haga clic en + CREAR en el panel de control de Kubernetes y especifique un archivo YAML que defina ese objeto. Por ejemplo:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: mysc
provisioner: csi-cinderplugin
parameters:
  type: default

Este manifiesto describe la clase de almacenamiento mysc con la política de almacenamiento predeterminada. La política de almacenamiento debe existir en el clúster de procesamiento y especificarse en las cuotas de almacenamiento del proyecto actual.

4.2.1.2. Aprovisionamiento dinámico de volúmenes persistentes

Los volúmenes persistentes pueden aprovisionarse dinámicamente a través de demandas de volumen persistente (PVC). Una PVC requiere un PV de una clase de almacenamiento, modo de acceso y tamaño específicos. Si existe un PV adecuado en el clúster, está enlazado a la demanda. Si no existe ningún PV adecuado pero puede aprovisionarlo, se crea un nuevo volumen y se enlaza a la demanda. Kubernetes utiliza una demanda de volumen persistente para obtener el volumen persistente haciendo una copia de seguridad del mismo y montándolo en el pod.

Importante

El pod y la demanda de volumen persistente que use deben existir en el mismo espacio de nombres.

Puede aprovisionar un volumen persistente dinámicamente a un pod de la siguiente forma:

  1. Acceda al clúster de Kubernetes a través del panel de control. Haga clic en Acceso a Kubernetes para obtener instrucciones.

  2. En el panel de control de Kubernetes, cree una clase de almacenamiento tal y como se describe en Crear clases de almacenamiento.

  3. Cree una demanda de volumen persistente. Para ello, haga clic en + CREAR y especifique el siguiente archivo YAML:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: mysc
    

    Este manifiesto especifica la demanda de volumen persistente mypvc que necesita que un volumen de al menos 10 GiB de la clase de almacenamiento mysc se monte en el modo de lectura/escritura por un solo nodo.

    Creación del aprovisionamiento dinámico de la demanda de volumen persistente activa de un volumen persistente que satisface los requisitos de la demanda. Después, Kubernetes lo enlaza a la demanda.

    ../_images/stor_image200.png
  4. Cree un pod y especifique la demanda de volumen persistente como su volumen. Para ello, haga clic en + CREAR e introduzca el siguiente archivo YAML:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
          - mountPath: /var/lib/www/html
            name: mydisk
      volumes:
      - name: mydisk
        persistentVolumeClaim:
          claimName: mypvc
          readOnly: false
    

    Este archivo de configuración describe el pod nginx que utiliza la demanda de volumen persistente mypvc. Puede acceder al volumen persistente enlazado a la demanda en /var/lib/www/html dentro del contenedor nginx.

4.2.1.3. Aprovisionamiento estático de volúmenes persistentes

Puede montar volúmenes de procesamiento existentes en pods mediante el aprovisionamiento estático de volúmenes persistentes. Para montar un volumen de procesamiento, haga lo siguiente:

  1. Obtenga el ID del volumen deseado en el panel de autoservicio.

    ../_images/stor_image201_ac.png
  2. Acceda al clúster de Kubernetes a través del panel de control. Haga clic en Acceso a Kubernetes para obtener instrucciones.

  3. En el panel de control de Kubernetes, cree una clase de almacenamiento tal y como se describe en Crear clases de almacenamiento.

  4. Cree un volumen persistente. Para ello, haga clic en + CREAR y especifique el siguiente archivo YAML:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: csi-cinderplugin
      name: mypv
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 10Gi
      csi:
        driver: cinder.csi.openstack.org
        fsType: ext4
        volumeHandle: c5850e42-4f9d-42b5-9bee-8809dedae424
      persistentVolumeReclaimPolicy: Delete
      storageClassName: mysc
    

    El manifiesto especifica el volumen persistente mypv de la clase de almacenamiento mysc que tiene 10 GiB de almacenamiento y un modo de acceso que permite montarlo en el modo de lectura/escritura por un solo nodo. El volumen persistente mypv utiliza el volumen de procesamiento con el ID c5850e42-4f9d-42b5-9bee-8809dedae424 como almacenamiento de la copia de seguridad.

  5. Cree una demanda de volumen persistente. Antes de definir la demanda de volumen persistente, asegúrese de que ha creado el volumen persistente y de que su estado es «Disponible». El volumen persistente existente debe cumplir los requisitos de la demanda en cuanto a tamaño de almacenamiento, modo de acceso y clase de almacenamiento. Haga clic en + CREAR y especifique el siguiente archivo YAML:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: mysc
    

    Una vez creada la demanda de volumen persistente mypvc, el volumen mypv está enlazado a la misma.

    ../_images/stor_image202.png
  6. Cree un pod y especifique la demanda de volumen persistente como su volumen. Use el ejemplo del Paso 3 disponible en Aprovisionamiento dinámico de volúmenes persistentes.

    En el panel de autoservicio, el volumen de procesamiento se montará en el equipo virtual que ejecuta el pod Kubernetes.

    ../_images/stor_image203_ac.png

4.2.2. Creación de equilibradores de carga externos en Kubernetes

En Kubernetes, puede crear un servicio con un equilibrador de carga externo que permita el acceso al mismo desde las redes públicas. El equilibrador de carga recibirá una dirección IP accesible públicamente y enrutará las solicitudes entrantes al puerto correcto en los nodos de clúster de Kubernetes.

Para crear un servicio con un equilibrador de carga externo, siga los siguientes pasos:

  1. Acceda al clúster de Kubernetes a través del panel de control. Haga clic en Acceso a Kubernetes para obtener instrucciones.

  2. En el panel de control de Kubernetes, cree una implementación y un servicio de tipo equilibrador de carga. Para ello, haga clic en + CREAR y especifique un archivo YAML que defina esos objetos. Por ejemplo:

    • Si ha implementado el clúster de Kubernetes en una red pública compartida, especifique el siguiente manifiesto:

      apiVersion: apps/v1beta1
      kind: Deployment
      metadata:
        name: nginx
      spec:
        replicas: 2
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
      ---
      kind: Service
      apiVersion: v1
      metadata:
        name: load-balancer
        annotations:
          service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
      spec:
        selector:
          app: nginx
        type: LoadBalancer
        ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      

      El anterior manifiesto describe la implementación nginx con un conjunto de réplicas con dos pods y el servicio equilibrador de carga con el tipo equilibrador de carga. La anotación utilizada en el servicio indica que el equilibrador de carga será interno.

      Una vez que se crea el equilibrador de carga, se asigna a una dirección IP de la red pública compartida y se puede acceder al mismo desde un extremo externo.

      ../_images/ss_kubernetes11.png
    • Si ha implementado el clúster de Kubernetes en una red privada enlazada a una pública a través de un enrutador virtual, puede utilizar el archivo YAML de más arriba sin la sección anotaciones para el servicio de equilibrador de carga. El equilibrador de carga creado recibirá una dirección IP flotante de la red pública y podrá acceder al mismo a través de un extremo externo.

El equilibrador de carga también aparecerá en el panel de autoservicio, donde podrá monitorizar su rendimiento y estado. Por ejemplo:

../_images/stor_image206_ac.png