Despliegue de Clústeres EMQX Edge sobre K3s en Entornos Raspberry Pi

Para la implementación de una infraestructura de mensajería ligera en el borde, utilizaremos K3s como orquestador de contenedores sobre hardware Raspberry Pi. A continuación, se detalla el proceso para configurar un clúster de EMQX Edge orientado a escenarios de IoT.

Configuración del Entorno

Se requiere que los dispositivos tengan conectividad para descargar los binarios necesarios. La arquitectura se compone de un nodo maestro y dos nodos de trabajo (agentes).

Hostname Dirección IP Rol Hardware
rpi-master 192.168.1.99 Server (Control Plane) Raspberry Pi 3
rpi-node-01 192.168.1.100 Agent (Worker) Raspberry Pi 3
rpi-node-02 192.168.1.101 Agent (Worker) Raspbrery Pi 3

Instalación de K3s en la infraestructura

1. Obtención del binario de K3s

K3s es compatible con diversas arquitecturas. Para Raspberry Pi (32 bits), utilizaremos la versión armhf.

$ curl -L https://github.com/rancher/k3s/releases/download/v0.2.0/k3s-armhf -o /usr/local/bin/k3s
$ chmod +x /usr/local/bin/k3s

2. Inicialización del Nodo Maestro

Ejecute el siguiente comando en rpi-master para iniciar el plano de control:

$ sudo k3s server &

3. Incorporación de los Nodos Agentes

Primero, recupere el token de autenticación generado en el servidor maestro:

$ CLUSTER_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)

En cada nodo agente (rpi-node-01 y rpi-node-02), ejecute el comando de unión apuntando a la IP del maestro:

$ sudo k3s agent --server https://192.168.1.99:6443 --token ${CLUSTER_TOKEN}

4. Gestión remota (Opcional)

Para administrar el clúster desde una estación de trabajo externa con kubectl, copie el archivo de configuración:

  • Transfiera /etc/rancher/k3s/k3s.yaml a ~/.kube/config en su equipo local.
  • Edite el archivo y cambei https://localhost:6443 por https://192.168.1.99:6443.
$ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
rpi-node-01   Ready    <none>   5m    v1.13.4-k3s.1
rpi-node-02   Ready    <none>   5m    v1.13.4-k3s.1
rpi-master    Ready    <none>   7m    v1.13.4-k3s.1

Configuración de Helm

Para facilitar el despliegue de aplicaciones, utilizaremos Helm (versión 2 en este ejemplo).

Instalación del cliente:

  1. Descargue el paquete helm-v2.8.0-linux-amd64.tgz.
  2. Extraiga el contenido: tar -zxvf helm-v2.8.0-linux-amd64.tgz.
  3. Mueva el binario: mv linux-amd64/helm /usr/local/bin/helm.

Configuración de RBAC para Tiller:

Cree una cuenta de servicio y asigne permisos de administrador:

$ kubectl create serviceaccount tiller --namespace kube-system

$ cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller-manager
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
EOF

$ helm init --service-account tiller

Despliegue del Clúster EMQX Edge

1. Instalación mediante Helm Chart

Utilizaremos el repositorio oficial de EMQX para desplegar la versión Edge optimizada para recursos limitados.

$ git clone https://github.com/emqx/emqx-chart
$ cd emqx-chart
$ helm install --name edge-mq --set deployment.image="emqx/emqx-edge:latest" .

2. Verificación de la Disponibilidad

Compruebe que los Pods estén en ejecución:

$ kubectl get pods | grep edge-mq
edge-mq-emqx-chart-76d498f7-a1b2c   1/1     Running   0          3m
edge-mq-emqx-chart-76d498f7-d3e4f   1/1     Running   0          3m

Finalmente, verifique la salud del clúster interno de EMQX consultando el estado desde uno de los nodos:

$ kubectl exec edge-mq-emqx-chart-76d498f7-a1b2c /opt/emqx/bin/emqx_ctl cluster status
Cluster status: [{running_nodes,['emqx@10.42.1.20','emqx@10.42.2.21']}]

Etiquetas: Raspberry Pi k3s EMQX MQTT Kubernetes

Publicado el 8-3 15:04