documentation.suse.com / Documentación de SUSE Edge / Integración de productos de otros fabricantes / NATS

32 NATS

NATS es una tecnología de conectividad diseñada para un mundo cada vez más hiperconectado. Se trata de una tecnología única que permite a las aplicaciones comunicarse de forma segura a través de cualquier combinación de proveedores de la nube, instalaciones locales, dispositivos periféricos, Web y móviles. NATS consta de una familia de productos de código abierto estrechamente integrados, pero que pueden desplegarse de forma independiente y sencilla. NATS se utiliza en miles de empresas de todo el mundo y abarca casos de uso que incluyen microservicios, edge computing, dispositivos móviles e IoT. También se puede utilizar para ampliar o sustituir la mensajería tradicional.

32.1 Arquitectura

NATS es una infraestructura que permite el intercambio de datos entre aplicaciones en forma de mensajes.

32.1.1 Aplicaciones cliente de NATS

Las bibliotecas cliente NATS permiten que las aplicaciones publiquen, se suscriban, soliciten y respondan entre diferentes instancias. Estas aplicaciones se denominan generalmente aplicaciones cliente.

32.1.2 Infraestructura de servicios NATS

Los servicios NATS son proporcionados por uno o varios procesos de servidor NATS configurados para interconectarse entre sí y ofrecer una infraestructura. Esta infraestructura puede escalarse desde un único proceso de servidor NATS que se ejecuta en un dispositivo final hasta un superclúster global público compuesto por muchos clústeres que abarca todos los principales proveedores de nube y todas las regiones del mundo.

32.1.3 Diseño de mensajería sencillo

Con NATS, las aplicaciones pueden comunicarse fácilmente enviando y recibiendo mensajes. Estos mensajes se dirigen e identifican mediante cadenas de asunto y no dependen de la ubicación de la red. Los datos se cifran y se estructuran como mensajes, y son enviados por un editor. El mensaje es recibido, descifrado y procesado por uno o varios suscriptores.

32.1.4 NATS JetStream

NATS cuenta con un sistema de persistencia distribuida integrado llamado JetStream. JetStream se creó para resolver los problemas de transmisión identificados de la tecnología actual: complejidad, fragilidad y falta de escalabilidad. JetStream también resuelve el problema del acoplamiento entre el editor y el suscriptor (los suscriptores deben estar activos y en funcionamiento para recibir el mensaje cuando se publica). Para obtener más información sobre NATS JetStream, consulte este documento.

32.2 Instalación

32.2.1 Instalación de NATS sobre K3s

NATS está diseñado para múltiples arquitecturas, por lo que se puede instalar fácilmente en K3s (Capítulo 15, K3s).

Vamos a crear un archivo de valores para sobrescribir los valores predeterminados de NATS.

cat > values.yaml <<EOF
cluster:
  # Enable the HA setup of the NATS
  enabled: true
  replicas: 3

nats:
  jetstream:
    # Enable JetStream
    enabled: true

    memStorage:
      enabled: true
      size: 2Gi

    fileStorage:
      enabled: true
      size: 1Gi
      storageDirectory: /data/
EOF

Ahora, se instala NATS mediante Helm:

helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm install nats nats/nats --namespace nats --values values.yaml \
 --create-namespace

Con el archivo values.yaml anterior, los componentes siguientes estarán en el espacio de nombres nats:

  1. Una versión de alta disponibilidad de NATS Statefulset que incluye tres contenedores: el servidor de NATS, el recargador de configuración y sidecars de métricas.

  2. Un contenedor de caja de NATS, que incluye un conjunto de utilidades NATS que se pueden utilizar para verificar la configuración.

  3. JetStream también aprovecha su interfaz final de clave-valor incluida con PVC vinculados a los pods.

32.2.1.1 Prueba de la configuración

kubectl exec -n nats -it deployment/nats-box -- /bin/sh -l
  1. Cree una suscripción de prueba:

    nats sub test &
  2. Envíe un mensaje de prueba:

    nats pub test hi

32.2.1.2 Limpieza

helm -n nats uninstall nats
rm values.yaml

32.2.2 NATS como interfaz final para K3s

Uno de los componentes que aprovecha K3s es KINE, que es un shim que permite sustituir etcd por interfaces finales de almacenamiento alternativas destinadas originalmente a bases de datos relacionales. Dado que JetStream proporciona una API de clave-valor, esto hace posible utilizar NATS como interfaz final para el clúster K3s.

Ya existe una solicitud para simplificar la integración de NATS en K3s, pero los cambios aún no se han incluido en las versiones de K3s.

Por eso, el binario de K3s debe crearse manualmente.

32.2.2.1 Creación de K3s

git clone --depth 1 https://github.com/k3s-io/k3s.git && cd k3s

El siguiente comando añade nats en las etiquetas de creación para habilitar la integración de NATS en K3s:

sed -i '' 's/TAGS="ctrd/TAGS="nats ctrd/g' scripts/build
make local

Sustituya <node-ip> con la IP real del nodo donde se iniciará K3s:

export NODE_IP=<node-ip>
sudo scp dist/artifacts/k3s-arm64 ${NODE_IP}:/usr/local/bin/k3s
Nota
Nota

Para crear K3s localmente se necesita el complemento buildx Docker CLI. Se puede instalar manualmente si $ make local falla.

32.2.2.2 Instalación de la interfaz de línea de comandos de NATS

TMPDIR=$(mktemp -d)
nats_version="nats-0.0.35-linux-arm64"
curl -o "${TMPDIR}/nats.zip" -sfL https://github.com/nats-io/natscli/releases/download/v0.0.35/${nats_version}.zip
unzip "${TMPDIR}/nats.zip" -d "${TMPDIR}"

sudo scp ${TMPDIR}/${nats_version}/nats ${NODE_IP}:/usr/local/bin/nats
rm -rf ${TMPDIR}

32.2.2.3 Ejecución de NATS como interfaz final de K3s

Vamos a usar ssh en el nodo y a ejecutar K3s con el indicador --datastore-endpoint apuntando a nats.

Nota
Nota

El siguiente comando inicia K3s como un proceso en primer plano, por lo que es posible consultar fácilmente en el registro si hay algún problema. Para no bloquear el terminal actual, se puede añadir el indicador & antes del comando para iniciarlo como un proceso en segundo plano.

k3s server  --datastore-endpoint=nats://
Nota
Nota

Para hacer permanente el servidor K3s con la interfaz final de NATS en su máquina virtual slemicro, puede ejecutar el siguiente guion, que crea un servicio systemd con la configuración necesaria.

export INSTALL_K3S_SKIP_START=false
export INSTALL_K3S_SKIP_DOWNLOAD=true

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server \
 --datastore-endpoint=nats://"  sh -

32.2.2.4 Solución de problemas

Los siguientes comandos se pueden ejecutar en el nodo para verificar que todo lo relacionado con la transmisión funciona correctamente:

nats str report -a
nats str view -a
Documentation survey