We have been running an Ark Survival Evolved dedicated server for a while, and it has been a blast. We had up to 12 people playing on it, most of them friends (and some parents) of our kids.
We originally hosted the server on an Amazon Web Services instance, but recently moved it to Google’s managed Kubernetes service GKE. It works great and the deployment was very easy. If you want to do the same, below is how it works.
Before you start, you can estimate the cost using the GCP Pricing Calculator. Ark won’t run on nodes that have less than 16 GB and 32 GB is definitely safer.
1. Sign up for GKE
Just follow the instructions for the GKE Quickstart up to (but not including) the “Creating the Deployment” part. You essentially need a Google Account (e.g. GMail), set up billing and create a cluster. If you only want to run Ark, pick a single Node with at least 16 GB of ram and 50 GB of disk storage. The result should look like this.

You can use Google’s Cloud Shell or install the Google Cloud SDK as well as kubectl (the Kubernetes command line tool) locally on your laptop. The instructions below are using a local install which on a Mac is quick and painless.
To test if everything worked, try to get the nodes from your shell:
appenz> kubectl get nodes NAME STATUS ROLES AGE VERSION gke-appenz-c1-pool-1-56974a8d-dqsl Ready <none> 3d v1.10.6-gke.2
2. Create the Persistent Volume
Use your favorite editor to create the following file and save it as ark-pv.yaml.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: arkgame-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 32Gi
Now run the following command in your shell to create the persistent volume.
appenz> kubectl apply -f ark-pv.yaml appenz> kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-ecdc2527-b3a4-11e8-ac2b-42010a8a007e 32Gi RWO Retain Bound guido-wp/arkgame-pv-claim standard 3d
GKE will automatically create the persistent volume that backs up the persistent volume claim. We now have the storage for the Ark map and game state.
3. Run the Server
Use your favorite editor to create the following file and save it as ark-gameserver.yaml.
apiVersion: v1
kind: Service
metadata:
  name: arkgame
  labels:
    app: arkgame
spec:
  type: LoadBalancer
  ports:
  - port: 27015
    targetPort: 27015
    protocol: UDP
    name: ark-steam
  - port: 7777
    targetPort: 7777
    protocol: UDP
    name: ark-gameclient
  - port: 7778
    targetPort: 7778
    protocol: UDP
    name: ark-gamerawudpport
  selector:
    app: arkgame
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: arkgame
  labels:
    app: arkgame
spec:
  replicas: 1
  selector:
    matchLabels:
      app: arkgame
  template:
    metadata:
      labels:
        app: arkgame
    spec:
      containers:
      - image: boerngenschmidt/ark-docker
        name: arkgame
        env:
          # Server Parameters
        - name: SESSIONNAME
          value: MyAwesomeArkServer.MyDomain.org
        - name: SERVERMAP
          value: Ragnarok
        - name: SERVERPASSWORD
          value: secretserverpassword
        - name: ADMINPASSWORD
          value: secretadminpassword
        ports:
          - containerPort: 27015
            protocol: UDP
            name: ark-steams
          - containerPort: 7777
            protocol: UDP
            name: ark-gameclient
          - containerPort: 7778
            protocol: UDP
            name: ark-gamerawudp
        volumeMounts:
        - name: arkgame-persistent-storage
          mountPath: /ark
      volumes:
      - name: arkgame-persistent-storage
        persistentVolumeClaim:
          claimName: arkgame-pv-claim
Make sure you replace in the file the following values:
- Pick your ark server container image of choice. The docker image in the file above ( boerngenschmidt/ark-docker ) worked well for me.
 - Set the name of the ark server, e.g. the server’s domain name.
 - Set the server password that is required to join the server.
 - Set the admin password.
 
Now run from the shell:
appenz> kubectl create -f ark-gameserver.yaml
This creates the running container and the ingress LoadBalancer on Google Cloud. It may take a minute for everything to be up and running. One everything is up, you can check for the IP address of the server:
appenz> kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP ... arkgame LoadBalancer 1.2.3.4 35.5.6.7 ...
Now you should be able to go to Steam join the server using the external IP (for instructions how, check out this post). In my experience it can take a while (hours or even days) until the server shows up in the official Ark server list, but that doesn’t really matter.
Once the server is up and running, you can connect to the container with kubectl exec and edit the server parameters. You can also use the “arkadmin” command to install mods, set the MOTD or update the server. It’s easy enough that our 10 year old son does it by himself.
Please send comments or questions via twitter to @appenz and happy gaming.