Skip to content

Kubernetes (Helm)

Deploy production-grade Hytale servers on Kubernetes using our Helm chart.

  • Kubernetes 1.33+
  • Helm 3.x
  • PersistentVolume provisioner
  • UDP load balancer or Gateway API support
Terminal window
helm repo add everhytale https://everhytale.github.io/charts
helm repo update
Terminal window
helm install my-hytale everhytale/hytale
Terminal window
helm install my-hytale everhytale/hytale \
--set jvm.maxMemory=16G \
--set service.type=LoadBalancer
Terminal window
git clone https://github.com/everhytale/charts.git
cd charts
helm install my-hytale ./charts/hytale

After installation, authenticate the server:

Terminal window
# Attach to the pod
kubectl attach -it deployment/my-hytale
# In the server console
/auth login device
/auth persistence Encrypted
# Detach: Ctrl+P, Ctrl+Q
# Image configuration
image:
repository: everhytale/hytale-server
tag: "" # Uses Chart.AppVersion
pullPolicy: IfNotPresent
# JVM settings
jvm:
minMemory: "4G"
maxMemory: "8G"
# Server settings
server:
port: 5520
bind: "0.0.0.0"
authMode: "authenticated"
# Persistence
persistence:
enabled: true
size: 10Gi
# Service
service:
type: ClusterIP
port: 5520
# Resources
resources:
requests:
cpu: 1000m
memory: 4Gi
limits:
cpu: 4000m
memory: 8Gi
ParameterDescriptionDefault
image.repositoryImage repositoryeverhytale/hytale-server
image.tagImage tag"" (Chart.AppVersion)
image.pullPolicyPull policyIfNotPresent
ParameterDescriptionDefault
jvm.minMemoryMinimum heap4G
jvm.maxMemoryMaximum heap8G
jvm.javaOptsCustom JVM options""
ParameterDescriptionDefault
server.portUDP port5520
server.authModeAuth modeauthenticated
server.disableSentryDisable Sentryfalse
server.useAotCacheUse AOT cachetrue
ParameterDescriptionDefault
backup.enabledEnable backupsfalse
backup.dirBackup directory/server/backups
backup.frequencyInterval (minutes)30
backup.maxCountMax backups5
ParameterDescriptionDefault
persistence.enabledEnable PVCtrue
persistence.sizeVolume size10Gi
persistence.storageClassStorage class""
persistence.existingClaimUse existing PVC""
ParameterDescriptionDefault
service.typeService typeClusterIP
service.portService port5520
service.nodePortNodePortnull
ParameterDescriptionDefault
resources.requests.cpuCPU request1000m
resources.requests.memoryMemory request4Gi
resources.limits.cpuCPU limit4000m
resources.limits.memoryMemory limit8Gi
Section titled “Option 1: Interactive (Recommended for Initial Setup)”
Terminal window
kubectl attach -it deployment/my-hytale
/auth login device
/auth persistence Encrypted
auth:
ownerName: "MyUsername"
ownerUuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
sessionToken: "your-session-token"
identityToken: "your-identity-token"
Terminal window
# Create the secret
kubectl create secret generic hytale-auth \
--from-literal=OWNER_NAME=MyUsername \
--from-literal=OWNER_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--from-literal=SESSION_TOKEN=your-token \
--from-literal=IDENTITY_TOKEN=your-jwt
auth:
existingSecret: "hytale-auth"
dev-values.yaml
jvm:
minMemory: "2G"
maxMemory: "4G"
server:
disableSentry: true
authMode: "unauthenticated"
persistence:
enabled: false
resources:
requests:
cpu: 500m
memory: 2Gi
limits:
cpu: 2000m
memory: 4Gi
Terminal window
helm install dev-server everhytale/hytale -f dev-values.yaml
prod-values.yaml
jvm:
minMemory: "8G"
maxMemory: "16G"
backup:
enabled: true
frequency: 15
maxCount: 20
auth:
existingSecret: "hytale-auth-prod"
machineId:
mountFromHost: true
service:
type: LoadBalancer
externalTrafficPolicy: Local
persistence:
enabled: true
size: 50Gi
storageClass: "fast-ssd"
resources:
requests:
cpu: 2000m
memory: 8Gi
limits:
cpu: 8000m
memory: 16Gi
nodeSelector:
node-type: gaming
Terminal window
helm install prod-server everhytale/hytale -f prod-values.yaml
gateway-values.yaml
service:
type: ClusterIP
udpRoute:
enabled: true
parentRefs:
- name: main-gateway
namespace: gateway-system
sectionName: hytale-udp
service:
type: LoadBalancer
externalTrafficPolicy: Local
service:
type: NodePort
nodePort: 30520
udpRoute:
enabled: true
parentRefs:
- name: my-gateway
namespace: gateway-system
Terminal window
kubectl logs -l app.kubernetes.io/name=hytale -f
Terminal window
kubectl attach -it deployment/my-hytale
Terminal window
kubectl get pods -l app.kubernetes.io/name=hytale
kubectl describe pod -l app.kubernetes.io/name=hytale
Terminal window
helm upgrade my-hytale everhytale/hytale -f values.yaml
Terminal window
helm uninstall my-hytale
Terminal window
kubectl describe pod -l app.kubernetes.io/name=hytale
kubectl logs -l app.kubernetes.io/name=hytale --previous

Ensure JVM memory matches resource limits:

jvm:
maxMemory: "8G"
resources:
limits:
memory: 10Gi # Slightly more than maxMemory

Enable console access:

console:
tty: true
stdin: true

Mount machine-id for encrypted persistence:

machineId:
mountFromHost: true