1 Incorporación de hosts remotos con Elemental #
Esta sección documenta la solución de «aprovisionamiento de red phone home» como parte de SUSE Edge, donde utilizamos Elemental para ayudar con la incorporación de nodos. Elemental es una pila de software que permite el registro de hosts remotos y la gestión centralizada de sistemas operativos nativos de la nube con Kubernetes. En la pila SUSE Edge utilizamos la función de registro de Elemental para permitir la incorporación de hosts remotos a 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 escenarios donde los dispositivos que deseáis controlar no están en la misma red que el clúster de gestión o no tienen un controlador de gestión fuera de banda integrado que permita un control más directo, y donde estáis arrancando muchos sistemas «desconocidos» en el extremo, y necesitáis incorporarlos y gestionarlos de forma segura a escala. Este es un escenario común para casos de uso en comercio minorista, IoT industrial u otros espacios donde tiene poco control sobre la red en la que se instalan sus dispositivos.
1.1 Arquitectura de alto nivel #
1.2 Recursos necesarios #
A continuación se describen los requisitos mínimos del sistema y del entorno para realizar esta guía de inicio rápido:
Un host para el clúster de gestión centralizada (el que aloja Rancher y Elemental):
Mínimo 8 GB de RAM y 20 GB de espacio en disco para desarrollo o pruebas (consulte aquí para uso en producción)
Un nodo de destino que se va a aprovisionar, es decir, el dispositivo edge (se puede utilizar una máquina virtual para fines de demostración o pruebas)
Mínimo 4 GB de RAM, 2 núcleos de CPU 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 usar con un servicio como sslip.io
Un host para crear el soporte de instalación a través de Edge Image Builder
Una unidad flash USB desde la que arrancar (si se utiliza hardware físico)
Una copia descargada de la última imagen ISO SelfInstall de SUSE Linux Micro 6.2 que se encuentra aquí.
Los datos existentes en las máquinas de destino se sobrescribirán como parte del proceso; por favor, asegúrese de realizar una copia de seguridad de cualquier dato en los dispositivos de almacenamiento USB y discos conectados a los nodos de despliegue de destino.
Esta guía se ha creado utilizando un droplet de Digital Ocean para alojar el clúster ascendente y un Intel NUC como dispositivo descendente. Para crear el soporte de instalación, se utiliza SUSE Linux Enterprise Server.
1.3 Crear clúster de inicio #
Comenzad creando 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.
1.3.1 Crear clúster de Kubernetes #
Si utilizáis un hiperescalador (como Azure, AWS o Google Cloud), la forma más sencilla de configurar un clúster es utilizando sus herramientas integradas. Para mayor brevedad en esta guía, no detallamos el proceso de cada una de estas opciones.
Si estáis instalando en un equipo sin sistema operativo u otro servicio de alojamiento donde también debéis proporcionar la propia distribución de Kubernetes, recomendamos utilizar RKE2.
1.3.2 Configurar DNS #
Antes de continuar, debéis configurar el acceso a vuestro clúster. Al igual que con la configuración del propio clúster, la forma en que configuréis el DNS será diferente dependiendo de dónde esté alojado.
Si no queréis gestionar la configuración de registros DNS (por ejemplo, si se trata solo de un servidor de pruebas efímero), podéis utilizar un servicio como sslip.io en su lugar. Con este servicio, podéis resolver cualquier dirección IP con <address>.sslip.io.
1.4 Instalar Rancher #
Para instalar Rancher, necesitáis obtener acceso a la API de Kubernetes del clúster que acabáis de crear. Esto tiene un aspecto diferente dependiendo de la distribución de Kubernetes que se esté utilizando.
Para RKE2, el archivo kubeconfig se habrá escrito en /etc/rancher/rke2/rke2.yaml.
Guardad este archivo como ~/.kube/config en vuestro sistema local.
Es posible que tengáis que editar el archivo para incluir la dirección IP o el nombre de host enrutable externamente correcto.
Instalad Rancher fácilmente con los comandos de la Documentación de Rancher:
Instalad 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=trueLuego instalad 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.14.2Si este sistema está destinado a producción, utilizad cert-manager para configurar un certificado real (como uno de Let’s Encrypt).
Navegad al nombre de host que configurasteis e iniciad sesión en Rancher con la bootstrapPassword que utilizasteis. Se os guiará a través de un breve proceso de configuración.
1.5 Instalar Elemental #
Con Rancher instalado, ahora podéis instalar el operador de Elemental y los CRD necesarios. El gráfico 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 gráficos. Se puede instalar desde el mismo shell que utilizasteis para instalar Rancher o en el navegador desde el 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.9.0
helm install -n cattle-elemental-system \
elemental-operator \
oci://registry.suse.com/rancher/elemental-operator-chart \
--version 1.9.01.5.1 (Opcional) Instalar la extensión de interfaz de usuario de Elemental #
Para utilizar la interfaz de usuario de Elemental, iniciad sesión en vuestra instancia de Rancher, y haced clic en el menú de tres líneas en la parte superior izquierda:
Desde la pestaña "Disponible" en esta página, haz clic en "Instalar" en la tarjeta Elemental:
Confirmad que queréis instalar la extensión:
Una vez instalada, se os pedirá que recarguéis la página.
Una vez recarguéis, podréis acceder a la extensión Elemental a través de la aplicación global "Gestión de SO".
1.6 Configurad Elemental #
Por sencillez, recomendamos establecer la variable $ELEM en la ruta completa donde queráis que esté el directorio de configuración:
export ELEM=$HOME/elemental
mkdir -p $ELEMPara permitir que las máquinas se registren en Elemental, necesitamos 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.yamlEl comando cat escapa cada $ con una barra invertida (\) para que Bash no los procese como plantillas. Eliminad las barras invertidas si realizáis la copia manualmente.
Una vez creado el objeto, buscad y anotad el punto de conexión que se os asigne:
REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')Alternativamente, esto también se puede hacer desde la interfaz de usuario.
- Extensión de interfaz de usuario
Desde la extensión de Gestión de SO, haced clic en "Crear punto de conexión de registro":
Asignad un nombre a esta configuración.
NotePodéis ignorar el campo Configuración de la nube, ya que los datos aquí se sobrescriben en los siguientes pasos con Edge Image Builder.
A continuación, haced clic en "Añadir etiqueta" para cada etiqueta que queráis que tenga el recurso que se cree cuando una máquina se registre. Esto es útil para distinguir las máquinas.
Haced clic en "Crear" para guardar la configuración.
Una vez creado el registro, deberíais ver la URL de registro listada y haced clic en "Copiar" para copiar la dirección:
TipSi os habéis salido de esa pantalla, podéis hacer clic en "Puntos finales de registro" en el menú de la izquierda y, a continuación, haced clic en el nombre del punto final que acabáis de crear.
Esta URL se utiliza en el siguiente paso.
1.7 Construid la imagen #
Aunque la versión actual de Elemental dispone de una forma de crear su propio soporte de instalación, en SUSE Edge 3.6 lo hacemos con Kiwi y Edge Image Builder, por lo que el sistema resultante se construye con SUSE Linux Micro como sistema operativo base.
Para obtener más detalles sobre Kiwi, seguid el proceso de Kiwi Image Builder (Chapter 26, Creación de imágenes actualizadas de SUSE Linux Micro con Kiwi) para crear imágenes nuevas, y para Edge Image Builder, consultad la guía de introducción a Edge Image Builder (Chapter 2, Clústeres independientes con Edge Image Builder) y también la documentación de componentes (Chapter 8, Edge Image Builder).
Desde un sistema Linux con Podman instalado, cread los directorios y colocad la imagen base que Kiwi está construyendo:
mkdir -p $ELEM/eib_quickstart/base-images
cp /path/to/{micro-base-image-iso} $ELEM/eib_quickstart/base-images/
mkdir -p $ELEM/eib_quickstart/elementalcurl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yamlcat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.3
image:
imageType: iso
arch: x86_64
baseImage: SL-Micro.x86_64-6.2-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
EOFLa sección
timees opcional, pero se recomienda encarecidamente configurarla para evitar posibles problemas con los certificados y el desfase horario. Los valores proporcionados en este ejemplo son solo para fines ilustrativos. Ajustadlos para que se adapten a vuestros requisitos específicos.La contraseña sin codificar es
eib.El
sccRegistrationCodees necesario para descargar e instalar los RPM necesarios desde las fuentes oficiales (alternativamente, los RPMelemental-registeryelemental-system-agentpueden cargarse manualmente de forma lateral).El comando
catescapa cada$con una barra invertida (\) para que Bash no los procese como plantillas. Eliminad las barras invertidas si realizáis la 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.6/edge-image-builder:1.3.3.1 \
build --definition-file eib-config.yamlSi arrancáis un dispositivo físico, grabad la imagen en una unidad flash USB. Esto puede realizarse de esta forma:
sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress1.8 Arrancad los nodos descendentes #
Ahora que hemos creado el medio de inicialización, podemos arrancar nuestros nodos descendentes con él.
Para cada uno de los sistemas que queráis controlar con Elemental, añadid el medio de inicialización y arrancad el dispositivo. Tras la instalación, se reiniciará y se registrará automáticamente.
Si estáis utilizando la extensión de la interfaz de usuario, deberíais ver aparecer vuestro nodo en el «Inventory of Machines».
No retiréis el medio de inicialización hasta que hayáis visto el aviso de inicio de sesión; durante el primer arranque, todavía se accede a los archivos de la unidad flash USB.
1.9 Cread clústeres descendentes #
Hay dos objetos que debemos crear al aprovisionar un nuevo clúster utilizando Elemental.
- Linux
- Extensión de la interfaz de usuario
El primero es el MachineInventorySelectorTemplate. Este objeto nos permite especificar una asignación entre clústeres y las máquinas del inventario.
Cread un selector que coincida con cualquier máquina 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' EOFAplicad el recurso al clúster:
kubectl apply -f $ELEM/selector.yamlObtened el nombre de la máquina y añadid la etiqueta coincidente:
MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}') kubectl label MachineInventory -n fleet-default \ $MACHINENAME locationID=123Cread un recurso de clúster K3s de nodo único sencillo y aplicadlo 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.35.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íais ver cómo se inicia un nuevo clúster de Kubernetes utilizando el nuevo nodo que acabáis de instalar.
1.10 Restablecimiento de nodo (opcional) #
SUSE Rancher Elemental admite la capacidad de realizar un «restablecimiento de nodo» que puede activarse opcionalmente cuando se elimina un clúster completo de Rancher, se elimina un solo nodo de un clúster o se elimina manualmente un nodo del inventario de máquinas. Esto es útil cuando queréis restablecer y limpiar cualquier recurso huérfano y queréis volver a añadir automáticamente el nodo limpio al inventario de máquinas para que pueda reutilizarse. Esto no está habilitado de forma predeterminada, por lo que cualquier sistema que se elimine no se limpiará (es decir, no se eliminarán los datos y cualquier recurso del clúster de Kubernetes seguirá funcionando en los clústeres secundarios) y requerirá intervención manual para borrar los datos y volver a registrar la máquina en Rancher a través de Elemental.
Si deseáis que esta funcionalidad esté habilitada de forma predeterminada, debéis aseguraros de que vuestro MachineRegistration la habilite explícitamente añadiendo config.elemental.reset.enabled: true, por ejemplo:
config:
elemental:
registration:
auth: tpm
reset:
enabled: trueEntonces, todos los sistemas registrados con este MachineRegistration recibirán automáticamente la anotación elemental.cattle.io/resettable: 'true' en su configuración. Si deseáis hacerlo manualmente en nodos individuales, por ejemplo, porque tenéis un MachineInventory existente que no tiene esta anotación, o ya habéis desplegado nodos, podéis modificar el 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á el proceso de limpieza automáticamente; detendrá todos los servicios de Kubernetes, eliminará todos los datos persistentes, desinstalará todos los servicios de Kubernetes, limpiará los directorios de Kubernetes/Rancher restantes y forzará un nuevo registro en Rancher a través de la configuración original de MachineRegistration de Elemental. Esto ocurre automáticamente, no es necesaria ninguna intervención manual. El script al que se llama se puede encontrar en /opt/edge/elemental_node_cleanup.sh y se activa mediante systemd.path tras la colocación del marcador, por lo que su ejecución es inmediata.
El uso de la funcionalidad resettable asume que el comportamiento deseado al eliminar un nodo/clúster de Rancher es borrar los datos y forzar un nuevo registro. La pérdida de datos está garantizada en esta situación, así que utilizad esto solo si estáis seguros de que queréis que se realice el restablecimiento automático.
1.11 Pasos siguientes #
Aquí tened algunos recursos recomendados para investigar después de usar esta guía:
Automatización de extremo a extremo en Chapter 6, Fleet
Opciones adicionales de configuración de red en Chapter 9, Redes edge









