Kubernetes (Helm)
Deploy production-grade Hytale servers on Kubernetes using our Helm chart.
Prerequisites
Section titled “Prerequisites”- Kubernetes 1.33+
- Helm 3.x
- PersistentVolume provisioner
- UDP load balancer or Gateway API support
Quick Start
Section titled “Quick Start”Add the Helm Repository
Section titled “Add the Helm Repository”helm repo add everhytale https://everhytale.github.io/chartshelm repo updateInstall the Chart
Section titled “Install the Chart”helm install my-hytale everhytale/hytaleInstall with Custom Values
Section titled “Install with Custom Values”helm install my-hytale everhytale/hytale \ --set jvm.maxMemory=16G \ --set service.type=LoadBalancerInstall from Source
Section titled “Install from Source”git clone https://github.com/everhytale/charts.gitcd chartshelm install my-hytale ./charts/hytaleAuthentication
Section titled “Authentication”After installation, authenticate the server:
# Attach to the podkubectl attach -it deployment/my-hytale
# In the server console/auth login device/auth persistence Encrypted
# Detach: Ctrl+P, Ctrl+QConfiguration
Section titled “Configuration”values.yaml Overview
Section titled “values.yaml Overview”# Image configurationimage: repository: everhytale/hytale-server tag: "" # Uses Chart.AppVersion pullPolicy: IfNotPresent
# JVM settingsjvm: minMemory: "4G" maxMemory: "8G"
# Server settingsserver: port: 5520 bind: "0.0.0.0" authMode: "authenticated"
# Persistencepersistence: enabled: true size: 10Gi
# Serviceservice: type: ClusterIP port: 5520
# Resourcesresources: requests: cpu: 1000m memory: 4Gi limits: cpu: 4000m memory: 8GiImage Parameters
Section titled “Image Parameters”| Parameter | Description | Default |
|---|---|---|
image.repository | Image repository | everhytale/hytale-server |
image.tag | Image tag | "" (Chart.AppVersion) |
image.pullPolicy | Pull policy | IfNotPresent |
JVM Configuration
Section titled “JVM Configuration”| Parameter | Description | Default |
|---|---|---|
jvm.minMemory | Minimum heap | 4G |
jvm.maxMemory | Maximum heap | 8G |
jvm.javaOpts | Custom JVM options | "" |
Server Configuration
Section titled “Server Configuration”| Parameter | Description | Default |
|---|---|---|
server.port | UDP port | 5520 |
server.authMode | Auth mode | authenticated |
server.disableSentry | Disable Sentry | false |
server.useAotCache | Use AOT cache | true |
Backup Configuration
Section titled “Backup Configuration”| Parameter | Description | Default |
|---|---|---|
backup.enabled | Enable backups | false |
backup.dir | Backup directory | /server/backups |
backup.frequency | Interval (minutes) | 30 |
backup.maxCount | Max backups | 5 |
Persistence
Section titled “Persistence”| Parameter | Description | Default |
|---|---|---|
persistence.enabled | Enable PVC | true |
persistence.size | Volume size | 10Gi |
persistence.storageClass | Storage class | "" |
persistence.existingClaim | Use existing PVC | "" |
Service
Section titled “Service”| Parameter | Description | Default |
|---|---|---|
service.type | Service type | ClusterIP |
service.port | Service port | 5520 |
service.nodePort | NodePort | null |
Resources
Section titled “Resources”| Parameter | Description | Default |
|---|---|---|
resources.requests.cpu | CPU request | 1000m |
resources.requests.memory | Memory request | 4Gi |
resources.limits.cpu | CPU limit | 4000m |
resources.limits.memory | Memory limit | 8Gi |
Authentication Options
Section titled “Authentication Options”Option 1: Interactive (Recommended for Initial Setup)
Section titled “Option 1: Interactive (Recommended for Initial Setup)”kubectl attach -it deployment/my-hytale/auth login device/auth persistence EncryptedOption 2: Values File
Section titled “Option 2: Values File”auth: ownerName: "MyUsername" ownerUuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" sessionToken: "your-session-token" identityToken: "your-identity-token"Option 3: Existing Secret
Section titled “Option 3: Existing Secret”# Create the secretkubectl 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-jwtauth: existingSecret: "hytale-auth"Deployment Examples
Section titled “Deployment Examples”Development Server
Section titled “Development Server”jvm: minMemory: "2G" maxMemory: "4G"
server: disableSentry: true authMode: "unauthenticated"
persistence: enabled: false
resources: requests: cpu: 500m memory: 2Gi limits: cpu: 2000m memory: 4Gihelm install dev-server everhytale/hytale -f dev-values.yamlProduction Server
Section titled “Production Server”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: gaminghelm install prod-server everhytale/hytale -f prod-values.yamlWith Gateway API (UDPRoute)
Section titled “With Gateway API (UDPRoute)”service: type: ClusterIP
udpRoute: enabled: true parentRefs: - name: main-gateway namespace: gateway-system sectionName: hytale-udpExposing the Server
Section titled “Exposing the Server”LoadBalancer (Cloud Providers)
Section titled “LoadBalancer (Cloud Providers)”service: type: LoadBalancer externalTrafficPolicy: LocalNodePort
Section titled “NodePort”service: type: NodePort nodePort: 30520Gateway API
Section titled “Gateway API”udpRoute: enabled: true parentRefs: - name: my-gateway namespace: gateway-systemManagement Commands
Section titled “Management Commands”View Logs
Section titled “View Logs”kubectl logs -l app.kubernetes.io/name=hytale -fAccess Console
Section titled “Access Console”kubectl attach -it deployment/my-hytaleCheck Status
Section titled “Check Status”kubectl get pods -l app.kubernetes.io/name=hytalekubectl describe pod -l app.kubernetes.io/name=hytaleUpgrade
Section titled “Upgrade”helm upgrade my-hytale everhytale/hytale -f values.yamlUninstall
Section titled “Uninstall”helm uninstall my-hytaleTroubleshooting
Section titled “Troubleshooting”Pod Fails to Start
Section titled “Pod Fails to Start”kubectl describe pod -l app.kubernetes.io/name=hytalekubectl logs -l app.kubernetes.io/name=hytale --previousMemory Issues
Section titled “Memory Issues”Ensure JVM memory matches resource limits:
jvm: maxMemory: "8G"resources: limits: memory: 10Gi # Slightly more than maxMemoryCannot Attach to Console
Section titled “Cannot Attach to Console”Enable console access:
console: tty: true stdin: trueAuthentication Fails
Section titled “Authentication Fails”Mount machine-id for encrypted persistence:
machineId: mountFromHost: trueNext Steps
Section titled “Next Steps”- Installing Plugins - Add EverEssentials
- Docker Compose - Simpler alternative