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 #
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
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í
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.
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
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 #
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:
En la pestaña "Available" (Disponible) de esta página, haga clic en "Install" (Instalar) en la tarjeta de Elemental:
Confirme que desea instalar la extensión:
Cuando se instale, se le pedirá que vuelva a cargar la página.
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).
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
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
Desde la extensión de gestión del sistema operativo, haga clic en "Create Registration Endpoint" (Crear punto final de registro):
Asigne un nombre a esta configuración.
NotaPuede ignorar el campo "Cloud Configuration" (Configuración de la nube) porque estos datos se sobrescriben con los del paso siguiente con Edge Image Builder.
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.
Haga clic en "Create" (Crear) para guardar la configuración.
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:
SugerenciaSi 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.
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
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 RPMelemental-register
yelemental-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).
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.
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
Aplique el recurso al clúster:
kubectl apply -f $ELEM/selector.yaml
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
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.
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:
Automatización de extremo a extremo en el Capítulo 8, Fleet
Opciones de configuración de red adicionales en el Capítulo 12, Conexiones de red de Edge