documentation.suse.com / Documentación de SUSE Edge / Guías de inicio rápido / Incorporación de hosts remotos con Elemental

2 Incorporación de hosts remotos con Elemental

En esta sección se explica la solución de aprovisionamiento de red "phone home" (el comando que se usa, traducido como "llamar a casa") como parte de SUSE Edge. En ella se utiliza Elemental para ayudar con la incorporación de nodos. Elemental es una pila de software que permite el registro remoto de hosts y la gestión centralizada y totalmente nativa en la nube del sistema operativo con Kubernetes. En la pila de SUSE Edge se utiliza la función de registro de Elemental para permitir la incorporación remota de hosts en Rancher, de modo que los hosts puedan integrarse en una plataforma de gestión centralizada y, desde allí, desplegar y gestionar clústeres de Kubernetes junto con componentes en capas, aplicaciones y su ciclo de vida, todo desde un lugar común.

Este enfoque puede ser útil en situaciones en las que los dispositivos que se desean controlar no se encuentren en la misma red que el clúster de gestión o no dispongan de un controlador de gestión fuera de banda integrado que permita un control más directo, y en los que se están arrancando muchos sistemas "desconocidos" diferentes en el perímetro y es necesario incorporarlos y gestionarlos de forma segura a gran escala. Este es un escenario común para usos en el comercio minorista, el IoT industrial u otros espacios en los que se tiene poco control sobre la red en la que se instalan los dispositivos.

2.1 Arquitectura general

guía de inicio rápido de la arquitectura de elemental

2.2 Recursos necesarios

A continuación se describen los requisitos mínimos del sistema y del entorno para la ejecución:

  • Un host para el clúster de gestión centralizada (el que aloja Rancher y Elemental):

    • Mínimo de 8 GB de RAM y 20 GB de espacio en disco para desarrollo o pruebas (consulte este documento para el uso en producción)

  • Un nodo de destino que se va a aprovisionar, es decir, el dispositivo periférico (se puede utilizar una máquina virtual para fines de demostración o pruebas)

    • Mínimo de 4 GB de RAM, CPU de 2 núcleos y 20 GB de disco

  • Un nombre de host resoluble para el clúster de gestión o una dirección IP estática para utilizar con un servicio como sslip.io

  • Un host para crear el medio de instalación a través de Edge Image Builder

    • Ejecutar SLES 15 SP6, openSUSE Leap 15.6 u otro sistema operativo compatible que admita Podman

    • Con Kubectl, Podman y Helm instalados

  • Una unidad flash USB desde la que arrancar (si se utiliza hardware físico)

  • Una copia descargada de la última imagen ISO de autoinstalación de SUSE Linux Micro 6.1, que se encuentra aquí

Nota
Nota

Los datos existentes en los equipos de destino se sobrescribirán como parte del proceso, por lo que debe asegurarse de realizar una copia de seguridad de todos los datos almacenados en dispositivos USB y discos conectados a los nodos de despliegue de destino.

En esta guía se utiliza un droplet de Digital Ocean para alojar el clúster ascendente y un NUC Intel como dispositivo descendente. Para crear el medio de instalación, se utiliza SUSE Linux Enterprise Server.

2.3 Creación del clúster de arranque

Para empezar, cree un clúster capaz de alojar Rancher y Elemental. Este clúster debe ser enrutable desde la red a la que están conectados los nodos descendentes.

2.3.1 Creación del clúster de Kubernetes

Si utiliza un hiperescalador (como Azure, AWS o Google Cloud), la forma más sencilla de configurar un clúster es utilizando sus herramientas integradas. Para que esta guía sea más concisa, no se detalla el proceso de cada una de estas opciones.

Si va a realizar la instalación en un servidor físico u otro servicio de alojamiento en el que también deba proporcionar la distribución de Kubernetes, le recomendamos que utilice RKE2.

2.3.2 Configuración de DNS

Antes de continuar, debe configurar el acceso a su clúster. Como ocurre con la configuración del propio clúster, la forma de configurar el servidor DNS variará en función del lugar donde esté alojado.

Sugerencia
Sugerencia

Si no desea ocuparse de la configuración de los registros DNS (por ejemplo, si se trata solo de un servidor de prueba efímero), puede utilizar un servicio como sslip.io en su lugar. Con este servicio, puede resolver cualquier dirección IP con <dirección>.sslip.io.

2.4 Instalar Rancher

Para instalar Rancher, necesitas acceder a la API de Kubernetes del clúster que acabas de crear. Esto varía en función de la distribución de Kubernetes que se utilice.

Para RKE2, el archivo kubeconfig se habrá escrito en /etc/rancher/rke2/rke2.yaml. Guarde este archivo como ~/.kube/config en su sistema local. Es posible que tenga que editar el archivo para incluir la dirección IP o el nombre de host externos correctos.

Instale Rancher fácilmente con los comandos que encontrará en la documentación de Rancher:

Instale cert-manager:

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --create-namespace \
 --set crds.enabled=true

Después, instale Rancher:

helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
helm repo update
helm install rancher rancher-prime/rancher \
  --namespace cattle-system \
  --create-namespace \
  --set hostname=<DNS or sslip from above> \
  --set replicas=1 \
  --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN> \
  --version 2.11.2
Nota
Nota

Si se trata de un sistema de producción, use cert-manager para configurar un certificado real (como uno de Let’s Encrypt).

Busque el nombre de host que ha configurado e inicie sesión en Rancher con la contraseña que ha utilizado en bootstrapPassword. Se le guiará a través de un breve proceso de configuración.

2.5 Instalación de Elemental

Una vez instalado Rancher, ya puede instalar el operador de Elemental y las CRD necesarias. El chart de Helm para Elemental se publica como un artefacto OCI, por lo que la instalación es un poco más sencilla que la de otros charts. Se puede instalar desde la misma shell que se utilizó para instalar Rancher o en el navegador desde la shell de Rancher.

helm install --create-namespace -n cattle-elemental-system \
 elemental-operator-crds \
 oci://registry.suse.com/rancher/elemental-operator-crds-chart \
 --version 1.6.8

helm install -n cattle-elemental-system \
 elemental-operator \
 oci://registry.suse.com/rancher/elemental-operator-chart \
 --version 1.6.8

2.5.1 (Opcional) Instale la extensión de interfaz de usuario de Elemental

  1. Para usar la interfaz de usuario de Elemental, inicie sesión en su instancia de Rancher y haga clic en el menú de tres líneas de la parte superior izquierda:

    Instalación de la extensión 1 de Elemental
  2. En la pestaña "Available" (Disponible) de esta página, haga clic en "Install" (Instalar) en la tarjeta de Elemental:

    Instalación de la extensión 2 de Elemental
  3. Confirme que desea instalar la extensión:

    Instalación de la extensión 3 de Elemental
  4. Cuando se instale, se le pedirá que vuelva a cargar la página.

    Instalación de la extensión 4 de Elemental
  5. Tras el reinicio, podrá acceder a la extensión de Elemental a través de la aplicación global "OS Management" (Gestión del sistema operativo).

    Acceso a la extensión de Elemental

2.6 Configuración de Elemental

Por sencillez, se recomienda configurar la variable $ELEM con la vía completa donde desea que se encuentre el directorio de configuración:

export ELEM=$HOME/elemental
mkdir -p $ELEM

Para permitir que las máquinas se registren en Elemental, se necesita crear un objeto MachineRegistration en el espacio de nombres fleet-default.

Vamos a crear una versión básica de este objeto:

cat << EOF > $ELEM/registration.yaml
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
  name: ele-quickstart-nodes
  namespace: fleet-default
spec:
  machineName: "\${System Information/Manufacturer}-\${System Information/UUID}"
  machineInventoryLabels:
    manufacturer: "\${System Information/Manufacturer}"
    productName: "\${System Information/Product Name}"
EOF

kubectl apply -f $ELEM/registration.yaml
Nota
Nota

El comando cat escapa cada $ con una barra invertida (\) para que Bash no las utilice como plantilla. Elimine las barras invertidas si va a realizar una copia manualmente.

Una vez creado el objeto, busque y anote el punto final que se le asigna:

REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')

Alternativamente, puede hacerlo desde la interfaz de usuario.

Extensión de interfaz de usuario
  1. Desde la extensión de gestión del sistema operativo, haga clic en "Create Registration Endpoint" (Crear punto final de registro):

    Haga clic en "Create Registration" (Crear registro).
  2. Asigne un nombre a esta configuración.

    Adición del nombre
    Nota
    Nota

    Puede ignorar el campo "Cloud Configuration" (Configuración de la nube) porque estos datos se sobrescriben con los del paso siguiente con Edge Image Builder.

  3. A continuación, desplácese hacia abajo y haga clic en "Add Label" (Añadir etiqueta) para cada etiqueta que desee que aparezca en el recurso que se crea cuando se registra un equipo. Esto resulta útil para distinguir cada equipo.

    Adición de etiquetas
  4. Haga clic en "Create" (Crear) para guardar la configuración.

  5. Una vez creado el registro, debería ver la URL de registro en la lista y puede hacer clic en "Copy" (Copiar) para copiar la dirección:

    Copia de la URL
    Sugerencia
    Sugerencia

    Si ha salido de esa pantalla, puede hacer clic en "Registration Endpoints" (Puntos finales de registro) en el menú de la izquierda y, a continuación, hacer clic en el nombre del punto final que acaba de crear.

    Esta URL se usa en el paso siguiente.

2.7 Creación de la imagen

Aunque la versión actual de Elemental permite crear sus propios medios de instalación, en SUSE Edge 3.3.1 se hace con Kiwi y Edge Image Builder, por lo que el sistema resultante se crea con SUSE Linux Micro como sistema operativo base.

Sugerencia
Sugerencia

Para obtener más información sobre Kiwi, siga el proceso de creación de imágenes de Kiwi (Capítulo 28, Creación de imágenes actualizadas de SUSE Linux Micro con Kiwi) para crear imágenes nuevas en primer lugar. En el caso de Edge Image Builder, consulte la guía de introducción a Edge Image Builder (Capítulo 3, Clústeres independientes con Edge Image Builder) y la documentación de los componentes (Capítulo 11, Edge Image Builder).

Desde un sistema Linux con Podman instalado, cree los directorios y coloque la imagen base que está creando Kiwi:

mkdir -p $ELEM/eib_quickstart/base-images
cp /path/to/{micro-base-image-iso} $ELEM/eib_quickstart/base-images/
mkdir -p $ELEM/eib_quickstart/elemental
curl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yaml
cat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.2
image:
    imageType: iso
    arch: x86_64
    baseImage: SL-Micro.x86_64-6.1-Base-SelfInstall-GM.install.iso
    outputImageName: elemental-image.iso
operatingSystem:
  time:
    timezone: Europe/London
    ntp:
      forceWait: true
      pools:
        - 2.suse.pool.ntp.org
      servers:
        - 10.0.0.1
        - 10.0.0.2
  isoConfiguration:
    installDevice: /dev/vda
  users:
    - username: root
      encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
  packages:
    sccRegistrationCode: XXX
EOF
Nota
Nota
  • La sección time es opcional, pero se recomienda encarecidamente configurarla para evitar posibles problemas con los certificados y la desviación del reloj. Los valores proporcionados en este ejemplo son solo ilustrativos. Ajústelos según sus requisitos específicos.

  • La contraseña sin cifrar es eib.

  • Se necesita el código sccRegistrationCode para descargar e instalar los paquetes RPM necesarios de las fuentes oficiales (alternativamente, los RPM elemental-register y elemental-system-agent se pueden cargar de forma manual y local).

  • El comando cat escapa cada $ con una barra invertida (\) para que Bash no las utilice como plantilla. Elimine las barras invertidas si va a realizar una copia manualmente.

  • El dispositivo de instalación se borrará durante la instalación.

podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
 registry.suse.com/edge/3.3/edge-image-builder:1.2.1 \
 build --definition-file eib-config.yaml

Si está arrancando un dispositivo físico, es necesario grabar la imagen en una unidad flash USB. Puede hacerlo con:

sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress

2.8 Arranque de los nodos descendentes

Ahora que se ha creado el medio de instalación, se pueden arrancar los nodos descendentes con él.

Para cada sistema que desee controlar con Elemental, añada el medio de instalación y arranque el dispositivo. Tras la instalación, se reiniciará y se registrará automáticamente.

Si utiliza la extensión de la interfaz de usuario, debería ver su nodo aparecer en "Inventory of Machines" (Inventario de equipos).

Nota
Nota

No retire el medio de instalación hasta que haya visto el mensaje de inicio de sesión; durante el primer arranque, se sigue accediendo a los archivos desde la memoria USB.

2.9 Creación de clústeres descendentes

Para aprovisionar un clúster nuevo con Elemental, debe crear dos objetos.

  • Linux
  • Extensión de interfaz de usuario

El primero es MachineInventorySelectorTemplate. Este objeto permite especificar una asignación entre los clústeres y los equipos del inventario.

  1. Cree un selector que coincida con cualquier equipo del inventario con una etiqueta:

    cat << EOF > $ELEM/selector.yaml
    apiVersion: elemental.cattle.io/v1beta1
    kind: MachineInventorySelectorTemplate
    metadata:
      name: location-123-selector
      namespace: fleet-default
    spec:
      template:
        spec:
          selector:
            matchLabels:
              locationID: '123'
    EOF
  2. Aplique el recurso al clúster:

    kubectl apply -f $ELEM/selector.yaml
  3. Obtenga el nombre del equipo máquina y añada la etiqueta correspondiente:

    MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}')
    
    kubectl label MachineInventory -n fleet-default \
     $MACHINENAME locationID=123
  4. Cree un recurso de clúster K3s simple de un solo nodo y aplíquelo al clúster:

    cat << EOF > $ELEM/cluster.yaml
    apiVersion: provisioning.cattle.io/v1
    kind: Cluster
    metadata:
      name: location-123
      namespace: fleet-default
    spec:
      kubernetesVersion: v1.32.4+k3s1
      rkeConfig:
        machinePools:
          - name: pool1
            quantity: 1
            etcdRole: true
            controlPlaneRole: true
            workerRole: true
            machineConfigRef:
              kind: MachineInventorySelectorTemplate
              name: location-123-selector
              apiVersion: elemental.cattle.io/v1beta1
    EOF
    
    kubectl apply -f $ELEM/cluster.yaml

Después de crear estos objetos, debería ver cómo se inicia un nuevo clúster de Kubernetes que usa el nuevo nodo que acaba de instalar.

2.10 Restablecimiento del nodo (opcional)

SUSE Rancher Elemental permite realizar un "restablecimiento de nodo", que se puede activar opcionalmente cuando se elimina todo un clúster de Rancher o un solo nodo de un clúster, o cuando se elimina manualmente un nodo del inventario de equipos. Esto resulta útil cuando se desean restablecer y limpiar los recursos huérfanos y se quiere volver a incorporar automáticamente el nodo limpiado al inventario de equipos para que pueda reutilizarse. Esta función no está habilitada de forma predeterminada, por lo que no se limpiará cualquier sistema que se elimine (es decir, los datos no se eliminarán y los recursos del clúster de Kubernetes seguirán funcionando en los clústeres descendentes) y será necesaria una intervención manual para borrar los datos y volver a registrar el equipo en Rancher a través de Elemental.

Si desea que esta funcionalidad esté habilitada de forma predeterminada, debe asegurarse de que esté explícitamente habilitada en MachineRegistration añadiendo config.elemental.reset.enabled: true, por ejemplo:

config:
  elemental:
    registration:
      auth: tpm
    reset:
      enabled: true

A continuación, todos los sistemas registrados con este registro MachineRegistration recibirán automáticamente la anotación elemental.cattle.io/resettable: “true” en su configuración. Si desea hacerlo manualmente en nodos individuales, por ejemplo, porque tiene un MachineInventory que no tiene esa anotación o porque ya ha desplegado nodos, puede modificar MachineInventory y añadir la configuración resettable. Por ejemplo:

apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventory
metadata:
  annotations:
    elemental.cattle.io/os.unmanaged: 'true'
    elemental.cattle.io/resettable: 'true'

En SUSE Edge 3.1, el operador de Elemental coloca un marcador en el sistema operativo que activará automáticamente el proceso de limpieza, detendrá todos los servicios de Kubernetes, eliminará todos los datos persistentes, desinstalará todos los servicios de Kubernetes, limpiará cualquier directorio restante de Kubernetes/Rancher y forzará un nuevo registro en Rancher a través de la configuración original de MachineRegistration de Elemental. Esto ocurre automáticamente, sin necesidad de intervención manual. El guion que se ejecuta se encuentra en /opt/edge/elemental_node_cleanup.sh y se activa a través de systemd.path al colocar el marcador, por lo que su ejecución es inmediata.

Aviso
Aviso

El uso de la función resettable presupone que el comportamiento deseado al eliminar un nodo/clúster de Rancher es borrar los datos y forzar un nuevo registro. En esta situación, la pérdida de datos está garantizada, por lo que solo debe utilizarla si está seguro de que desea que se realice un restablecimiento automático.

2.11 Pasos siguientes

Se recomienda estudiar los siguientes recursos después de utilizar esta guía:

Documentation survey