Orchestration

The zeuz Orchestration is a set of modules which allow to manage the automated, region-based allocating and deallocating of bare metal and/or cloud machines, as well as the initial provisioning, upscaling and downscaling of containerized services.

General Information

Container-based service deployment defines the next level in large scale gameserver orchestration.

Using the power of containerization, the zeuz orchestration allows for gameservers to run within their own application container, using a dedicated subset of the host machine’s resources.

This not only allows for more flexibility, as containers can be deployed with the same setup on any host capable of running the container without having to bother with hardware or OS-specific pitfalls, but also improves stability, as there is no risk of multiple gameservers interfering with each other, although they’re running on the same hardware.

Core Concepts

The following describes the main concepts of the zeuz orchestration.

Allocation

An Allocation is a set of rules that describe how hardware resources and payloads should be managed.

A basic setup for a simple Allocation can look like this (zeuzsdk.AllocationDef):

{
"Regions": ["cRswsCn***", "odemlBg***"],
"ScalingRules": {
"MaxCloudMachines": 3,
"MaxBareMetalMachines": 5,
"PayloadDef": {
"HostOS": "linux",
"HostOSMinVersion": "Ubuntu 16.04*",
"Image": "dockerregistry.zeuz.io:6999/path/to/image:latest",
"Cmd": [],
"Ports": [
{
"Name": "HTTP",
"Port": 80
}
]
},
"PayloadQuota": {
"CpuCores": 1,
"MemoryMB": 1024,
"StorageGB": 50,
"IOBandwidthMBps": 200,
"InetBandwidthMBps": 10
},
"MinUnreservedPayloads": 4,
"MaxUnreservedPayloads": 6,
"MinFreePayloadCapacity": 4,
"MaxFreePayloadCapacity": 8,
"SafetyLimits": {
"CoreMaxUsageThreshold": 0,
"CpuRemainingCores": 1,
"MemoryMBFree": 2048,
"StorageGBFree": 100,
"IOMBpsFree": 500,
"InetMBpsFree": 20
},
"EnableScaling": true,
"UseMetrics": false,
"ManagePayloads": true,
"CapEvalTimeFrame": 0,
"BlockedConditions": null,
"IdleConditions": null
},
"MachineMinSpec": {
"OS": "linux",
"OSVersion": "Ubuntu 16.04*",
"CoreCount": 4,
"CoreMhz": 3000,
"MemoryMB": 16384,
"StorageGB": 500,
"IOBandwidthMBps": 3000,
"InetBandwidthMBps": 100
}
}

Parameters explained

Regions zeuzsdk.RegionID: Holds the Region IDs in which this Allocation setup will allocate hardware resources and manage payloads, if enabled.

MachineMinSpec zeuzsdk.MachineSpec: Describes the minimal hardware and OS requirements for all machines of this Allocation.

ScalingRules zeuzsdk.ScalingRules: Contains the rules on how this Allocation should be handled by the zeuz orchestration’s scaling mechanism.

Scaling

Scaling describes the automated increase and decrease of hardware resources and payloads based on the settings of an Allocation. Each Allocation is responsible for its own scaling, once enabled.

If “EnableScaling” is set to true, the zeuz orchestration will scale hardware resources to always match the payload capacity boundaries defined by “MinFreePayloadCapacity” and “MaxFreePayloadCapacity”.

Payload

A payload is a uniquely identifiable instance of a gameserver session currently running or previously running as a containerized service.

If “ManagePayloads” is set to true, the zeuz orchestration will dynamically provide or remove containers from the Allocation’s machines to always match the boundaries defined by “MinUnreservedPayloads” and “MaxUnreservedPayloads”.

The “ManagePayloads” functionality will work as soon as there are machines assigned to the Allocation, even if “EnableScaling” is disabled.

PayloadQuota

PayloadQuota tells the zeuz orchestration how much hardware resources will be required by a single payload defined by “PayloadDef”. This value needs to be specified so a proper management of payloads can be provided.

SafetyLimit

SafetyLimit tells the zeuz orchestration how much hardware buffer on a host machine should never be used for any services. This functionality is useful when multiple payloads are running on the same machine, as resource limits can’t always be guaranteed in certain circumstances.

An undefined or too low SafetyLimit can lead to instability, user-facing lags, or other unwanted side-effects.

API Modules

The Orchestration behaviour for your environment can be managed via the following API Endpoints.

The Allocation endpoint allows for managing the setup of Allocations.

The Payload endpoint allows for spawning, updating, shutdown, reservation and unreserving of payloads.