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.yamla~/.kube/configen su equipo local. - Edite el archivo y cambei
https://localhost:6443porhttps://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:
- Descargue el paquete
helm-v2.8.0-linux-amd64.tgz. - Extraiga el contenido:
tar -zxvf helm-v2.8.0-linux-amd64.tgz. - 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']}]