Despliega tu propio servidor Minecraft multijugador con Dynmap en Kubernetes

Despliega tu propio servidor Minecraft multijugador con Dynmap en Kubernetes

¿Sabías que puedes levantar un servidor de Minecraft profesional en tu VPS con Kubernetes y, además, añadir un mapa interactivo en tiempo real gracias a Dynmap? Hoy te enseño cómo hacerlo, paso a paso, con todos los archivos yaml necesarios y explicando cada parte, para que hasta tu grupo de amigos se quede flipando.

¿Por qué Minecraft + Dynmap en Kubernetes?

  • Kubernetes gestiona la infraestructura: tendrás reinicio automático si algo falla.
  • Escalabilidad fácil: puedes añadir más recursos cuando crezca tu comunidad.
  • Dynmap proporciona un mapa web interactivo: sigue tu mundo desde cualquier navegador.
  • Perfecto para una experiencia anti-lagg y con resiliencia incluso en VPS baratos.

Arquitectura del despliegue

  1. minecraft-server: Contenedor Bukkit, PaperMC o Spigot, con Dynmap instalado como plugin.
  2. Servicio Dynmap: Se expone el mapa por el puerto 8123.
  3. Volúmenes persistentes: Para que el mundo y la config sobrevivan a reinicios del pod.
  4. Recurso Ingress (opcional): Facilita el acceso externo seguro al mapa desde internet.

Preparando tu manifest completo

¡Aquí tienes todos los YAMLs listos para copiar y pegar! No olvides cambiar tu-dominio.com por el tuyo, y revisa el storage según tu Cloud o VPS. Puedes adaptar la imagen de Minecraft a la que prefieras, aquí usamos itzg/minecraft-server porque es muy compatible.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: minecraft-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: minecraft-server
spec:
  selector:
    matchLabels:
      app: minecraft
  replicas: 1
  template:
    metadata:
      labels:
        app: minecraft
    spec:
      containers:
        - name: minecraft
          image: itzg/minecraft-server:latest
          env:
            - name: EULA
              value: "TRUE"
            - name: TYPE
              value: "SPIGOT"
            - name: ENABLE_RCON
              value: "true"
            - name: RCON_PASSWORD
              value: "supersecreto"
            - name: MEMORY
              value: "2G"
            - name: VERSION
              value: "LATEST"
            - name: SPIGET_RESOURCES
              value: "274,Dynmap" # Dynmap descargado automáticamente
          ports:
            - containerPort: 25565 # Puerto Minecraft
            - containerPort: 8123 # Puerto Dynmap web
          volumeMounts:
            - name: data
              mountPath: /data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: minecraft-data
---
apiVersion: v1
kind: Service
metadata:
  name: minecraft-service
spec:
  selector:
    app: minecraft
  type: NodePort
  ports:
    - name: minecraft
      protocol: TCP
      port: 25565
      targetPort: 25565
      nodePort: 30065
    - name: dynmap
      protocol: TCP
      port: 8123
      targetPort: 8123
      nodePort: 31812
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dynmap-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: mapa.tu-dominio.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: minecraft-service
                port:
                  number: 8123

Explicación rápida de cada componente

  • PersistentVolumeClaim: Garantiza que tu mundo de Minecraft y la config de Dynmap sean permanentes.
  • Deployment: Lanza el servidor con Dynmap ya listo. Puedes modificar recursos, versión, y usar mods/plugins.
  • Service: Expone tanto el juego (puerto 25565) como el mapa web (8123). Puedes cambiar los nodePort si necesitas otros.
  • Ingress: Accede a tu mapa escribiendo http://mapa.tu-dominio.com; configúralo en tu DNS para que apunte al Ingress Controller de tu VPS o clúster.

Consejos extra y troubleshooting

  • Si Dynmap no aparece, revisa en la consola los logs del container para ver si falta algún permiso o plugin.
  • Puedes personalizar Dynmap desde el archivo /data/plugins/dynmap/configuration.txt montado en el PVC.
  • ¿El mundo no se guarda? Asegúrate de que tu PersistentVolume está correctamente configurado y soporta los modos RW necesarios.
  • Para producción: considera un mecanismo de backup sencillo: rsync del volumen, o snapshots automáticos según tu proveedor de VPS.

¿Te animas?

Este proyecto es perfecto para sorprender y aprender, y puedes evolucionar este despliegue con mods, balanceo, o servicios complementarios (como Discord bots para la comunidad). Kubernetes no es solo para empresas: ¡también para gamers premium como tú!

Avatar

Por Mid