Why I am using Kubernetes for game dev?
Hi everyone.
It’s a really nice time to publish the new post about the new area that I am trying to learn and build something exciting. Let’s say #gamedev was always the goal when I started to learn software development but for some reasons, I was always busy with other stuff.
OK, no more talks about the past.
Kubernetes is really exciting technology that I discovered when I was a solo developer for my projects on backend and frontend.
My current stack is
- DigitalOcean is hosting platform with reasonable pricing that’s always helping for my indie projects. I want to say thank you to the company because they are always opened to help, add some credits and reduce prices.
- Containership.io is a really nice platform to provision Kubernetes to DigitalOcean. (don’t have any credits from these guys but the platform helped me to save my time). DigitalOcean started to provide Kubernetes out of the box but I found it hard to use for the beginner. Talking about the pods, services, SSL certs setup. Probably it’s only about my experience, had the luck to make it done easily when I have full access to Kubernetes.
- Kubernetes, it’s not about microservices. It’s Heroku for you when you can control anything with simple recipes.
- Gitlab is source control platform with free container registry per repository.
Demo:
My cluster hosts:
- https://api.balconygames.com is Go server that’s talking with PostgreSQL (3 repl)
- https://dashboard.balconygames.com is ReactJS Admin dashboard for game management (nginx + static).
- https://sweety-jumper.balconygames.com is Unity game (nginx + static)
- http://balconygames.com is Jekyll (nginx + static)
- PostgreSQL
- Letsencrypt to watch for ssl certs and create the new one.
It costs me about $40 per month (3 nodes by 10$ and 1 Node Balancer) is really cheap for these machines and deployed
My workflow as solo developer on backend.
- Make the code changes.
- Rebuild the image and push to gitlab registry
- kubectl apply -f recipe/<name of the app>/deployment.yml that’s containing <image_name>:latest or <image_name>:$COMMIT_TAG
The next step to move it away from my local machine and use Gitlab pipelines.
It’s easy to support, deploy and don’t waste time. In case in one day it would require to setup Redis or other database I will use helm tool with predefined recipes to create pods, services and deployment for Redis.
Our game is Sweety Jumper