Skip to content

Palworld Dedicated Server

Overview

Palworld is a multiplayer dedicated game server running on Kubernetes, providing a persistent world for players to capture and battle with Pals.

Architecture

graph LR
    subgraph External
        Players[Players]
        Internet[Internet]
    end

    subgraph Firewall
        Ubiquiti[Ubiquiti Router]
        pfSense[pfSense]
    end

    subgraph Kubernetes
        subgraph palworld namespace
            Server[Palworld Server]
            PVC[(Game Data)]
        end
    end

    Players --> Internet
    Internet -->|UDP 8211| Ubiquiti
    Ubiquiti --> pfSense
    pfSense -->|NodePort 30821| Server
    Server --> PVC

Components

Game Server

Property Value
Image thijsvanloef/palworld-server-docker:latest
Game Port 8211 (UDP)
Query Port 27015 (UDP)
RCON Port 25575 (TCP)
External URL palworld.ajandrews.pro:8211

Deployment

Kubernetes Resources

apiVersion: apps/v1
kind: Deployment
metadata:
  name: palworld
  namespace: palworld
spec:
  replicas: 1
  strategy:
    type: Recreate  # Required for game servers
  template:
    spec:
      containers:
      - name: palworld
        image: thijsvanloef/palworld-server-docker:latest
        ports:
        - containerPort: 8211
          protocol: UDP
          name: game
        - containerPort: 27015
          protocol: UDP
          name: query
        - containerPort: 25575
          protocol: TCP
          name: rcon
        resources:
          requests:
            memory: "8Gi"
            cpu: "2"
          limits:
            memory: "16Gi"
            cpu: "4"

Service Configuration

apiVersion: v1
kind: Service
metadata:
  name: palworld
  namespace: palworld
spec:
  type: NodePort
  ports:
    - port: 8211
      targetPort: 8211
      nodePort: 30821
      protocol: UDP
      name: game
    - port: 27015
      targetPort: 27015
      nodePort: 30270
      protocol: UDP
      name: query
    - port: 25575
      targetPort: 25575
      nodePort: 30255
      protocol: TCP
      name: rcon

Game Settings

Server Configuration

Setting Value Description
Max Players 32 Maximum concurrent players
Experience Rate 2.75x XP multiplier
Pal Capture Rate 1.25x Easier capture
Pal Spawn Rate 2x More Pals in world

Combat Settings

Setting Player Pal
Damage Attack 2.25x 1x
Damage Defense 0.9x 2.2x
HP Regen Rate 2.9x 2.5x
HP Regen (Sleep) 5x 4.5x

World Settings

Setting Value
Day Speed 0.1x (slower days)
Night Speed 3x (faster nights)
Auto Save Every 30 seconds
Egg Hatching Near instant
Death Penalty Items only
Global Pal Import Enabled

Network Configuration

Port Forwarding Chain

Internet:8211 (UDP)
Ubiquiti Router → 192.168.5.2:8211
pfSense NAT → 10.0.0.101:30821
K8s NodePort → Pod:8211

DNS Configuration

Record Type Value
palworld.ajandrews.pro A Public IP

DNS Only Mode

DNS record must be set to "DNS Only" (grey cloud) in Cloudflare since game traffic is UDP and cannot go through the tunnel.

Administration

RCON Commands

Connect via RCON or use kubectl:

# Show connected players
kubectl exec -n palworld deployment/palworld -- rcon-cli ShowPlayers

# Broadcast message
kubectl exec -n palworld deployment/palworld -- rcon-cli "Broadcast Server_maintenance_in_5_minutes"

# Save game
kubectl exec -n palworld deployment/palworld -- rcon-cli Save

# Kick player
kubectl exec -n palworld deployment/palworld -- rcon-cli "KickPlayer <SteamID>"

In-Game Admin

  1. Open chat (Enter key)
  2. Type: /AdminPassword <admin-password>
  3. Use admin commands with / prefix
Command Description
/Broadcast <message> Server-wide message
/KickPlayer <SteamID> Kick player
/BanPlayer <SteamID> Ban player
/Save Force save
/Shutdown <seconds> Scheduled shutdown

Storage

Persistent Volume

Property Value
Size 50Gi
Storage Class longhorn-single
Mount Path /palworld

Data Contents

  • World save files
  • Player data
  • Server configuration
  • Backup files

Monitoring

Health Checks

livenessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - pgrep -x "PalServer-Linux" > /dev/null
  initialDelaySeconds: 120
  periodSeconds: 30

Logs

# View server logs
kubectl logs -n palworld deployment/palworld -f

# Check server status
kubectl exec -n palworld deployment/palworld -- rcon-cli Info

Troubleshooting

Common Issues

Issue Cause Resolution
Connection timeout Port forwarding Check Ubiquiti + pfSense NAT rules
Server not starting Resource limits Increase memory/CPU limits
World not loading Corrupted save Restore from backup
RCON not responding Service not ready Wait for full startup (~2 min)

Startup Time

The server takes approximately 2-3 minutes to fully start:

  1. Download/verify game files
  2. Load world data
  3. Start game server
  4. Enable RCON/REST API