rpsa/qnetd

By rpsa

Updated 10 months ago

En un cluster Proxmox con dos nodos para tener HA es necesario un servicio qnetd para dar quorum

Image
Networking
0

669

rpsa/qnetd repository overview

Cuando armamos un cluster Proxmox con dos nodos y queremos tener HA podemos iniciar un servicio qnetd en un servidor Linux.
  • Probamos hacer uno en un contenedor linux
  • requiere preparación previa en los nodos de PMXVE
  • hay que instalar el paquete corosync en ambos nodos
    •   apt update
        apt install -y corosync-qdevice
        which corosync-qdevice-net-certutil
      
  • debemos copiar id_rsa.pub de uno de los nodos en el contenedor, para que pmxve pueda generar los certificados
  • si queremos usar un puerto distinto al 22 para ssh en el contenedor:
  • Agregamos en /root/.ssh/config la ip y puerto del contenedor:
Host 192.168.3.201
    User root
    Port 2203
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
  • una vez que levantamos el contenedor:
pvecm qdevice setup 192.168.3.201
pvecm status
  • deberia mostrarte que tiene 3 nodos para quorum
Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2  
Flags:            Quorate Qdevice 
como armamos la imagen:
FROM debian:trixie-slim
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
      corosync-qnetd openssh-server ca-certificates iproute2 netcat-traditional \
    && rm -rf /var/lib/apt/lists/*

# sshd necesita este dir
RUN mkdir -p /var/run/sshd /root/.ssh && chmod 700 /root/.ssh

# Persistir llaves/estado qnetd
VOLUME ["/var/lib/corosync-qnetd", "/root/.ssh"]

# Exponemos qnetd y ssh
EXPOSE 5403/tcp 5403/udp 22/tcp

# Script de arranque: sshd en segundo plano y qnetd en foreground
RUN printf '#!/bin/sh\nset -e\nmkdir -p /var/run/sshd\n/usr/sbin/sshd\nexec /usr/bin/corosync-qnetd -f\n' > /entrypoint.sh \
 && chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
  • Preparación (una sola vez en el host)
sudo mkdir -p /home/sysadmin/proxmox/qnetd/{nssdb,ssh,etc-ssh,varlib}
sudo chmod 700 /home/sysadmin/proxmox/qnetd/ssh
# agrega la clave pública del nodo PVE que hará el setup:
sudo tee -a /home/sysadmin/proxmox/qnetd/ssh/authorized_keys < /root/.ssh/id_rsa.pub
sudo chmod 600 /home/sysadmin/proxmox/qnetd/ssh/authorized_keys
sudo chown -R root:root /home/sysadmin/proxmox/qnetd
  • docker-compose.yml
services:
  qnetd:
    image: rpsa/qnetd:latest
    restart: unless-stopped

    # Publica puertos (si no usás network_mode: host)
    ports:
      - "5403:5403/tcp"
      - "5403:5403/udp"
      - "2203:22/tcp"

    # Persistencia:
    # - nssdb: certificados del qnetd (CA/cluster)
    # - ssh: authorized_keys y demás claves de root
    # - etc-ssh: host keys para que no cambie la huella del server
    # - varlib: estado extra de qnetd (opcional)
    volumes:
      - /home/sysadmin/proxmox/qnetd/nssdb:/etc/corosync/qnetd/nssdb
      - /home/sysadmin/proxmox/qnetd/ssh:/root/.ssh
      - /home/sysadmin/proxmox/qnetd/etc-ssh:/etc/ssh
      - /home/sysadmin/proxmox/qnetd/varlib:/var/lib/corosync-qnetd

    # Aseguramos que corran sshd + qnetd
    entrypoint: ["/bin/sh","-lc","mkdir -p /var/run/sshd; /usr/sbin/sshd; exec /usr/bin/corosync-qnetd -f"]

    healthcheck:
      test: ["CMD", "sh", "-c", "nc -z 127.0.0.1 5403"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 10s

Tag summary

Content type

Image

Digest

sha256:c4cbb6cab

Size

47.9 MB

Last updated

10 months ago

docker pull rpsa/qnetd