{"id":16379962,"url":"https://github.com/robinbraemer/draft-minecraft-k8s","last_synced_at":"2025-10-06T04:21:51.142Z","repository":{"id":234400716,"uuid":"171353016","full_name":"robinbraemer/draft-minecraft-k8s","owner":"robinbraemer","description":"Minecraft Networks Kubernetes CONCEPTS!","archived":false,"fork":false,"pushed_at":"2023-12-15T02:59:11.000Z","size":4,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-02-16T06:03:45.410Z","etag":null,"topics":["draft","k8s","k8s-operator","kubernetes","kubernetes-operator","minecraft","minecraft-network","minecraft-server"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robinbraemer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-02-18T20:40:24.000Z","updated_at":"2024-04-19T05:37:51.000Z","dependencies_parsed_at":"2024-04-19T07:51:55.631Z","dependency_job_id":null,"html_url":"https://github.com/robinbraemer/draft-minecraft-k8s","commit_stats":null,"previous_names":["robinbraemer/draft-minecraft-k8s"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinbraemer%2Fdraft-minecraft-k8s","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinbraemer%2Fdraft-minecraft-k8s/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinbraemer%2Fdraft-minecraft-k8s/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinbraemer%2Fdraft-minecraft-k8s/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robinbraemer","download_url":"https://codeload.github.com/robinbraemer/draft-minecraft-k8s/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240035410,"owners_count":19737601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["draft","k8s","k8s-operator","kubernetes","kubernetes-operator","minecraft","minecraft-network","minecraft-server"],"created_at":"2024-10-11T03:50:01.431Z","updated_at":"2025-10-06T04:21:51.050Z","avatar_url":"https://github.com/robinbraemer.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Draft: *Running Minecraft Networks in Kubernetes!*\n\n\n# Goal\nThe goal of this idea collection is to give a solution on how to\nrun a Minecraft Network in Kubernetes.\nAdministrators should be able to easily scale and manage\nbig Clusters regardless of their size and still be flexible enough\nto implement own business logic.\n\nSince Kubernetes is awesome and allows you to deploy any\nkind of Apps, you could just go ahead and make your own Minecraft Cluster\narchitectures. So this is one **opinionated solution!** ;D\n\n## Table of Contents\n* [Goal](#goal)\n* [Concepts](#concepts)\n    * [Cluster](#cluster)\n    * [ProxyNet](#proxynet)\n    * [Proxy](#proxy)\n    * [Server](#server)\n\n\n# Concepts\nAll components are coupled using labels and are together making up a Cluster.\n\n## Cluster\nA Cluster combines the Server and Proxy components and is\nconsidered the highest-level-resource.\n\nGive all resources ProxyNet/Proxy/Server these labels:\n- label `minekube-resource` exists\n- and label `minekube-clusterName` set to the desired Cluster name\n\n*Note: A Cluster is a concept and exists in form of the `minekube-clusterName` label on each Pod.*\n\n## ProxyNet\nA ProxyNet is a network of interconnected Proxies\nto balance hundreds and thousands of players concurrently.\nOne ProxyNet (so the Proxies in it) is meant to be deployed at\none geographical area where your target players are for minimal network latency.\nWith that being said, there are also Servers in a ProxyNet\nalso to provide little network latency.\n  \nGive all Proxy Pods these labels:\n- label `minekube-resource=proxy`\n- and label `minekube-proxyNetName` set to the desired ProxyNet name\n\n*Note: A ProxyNet is a concept and exists in form of `minekube-proxyNetName` labels on each Proxy Pod.*\n\n\n## Proxy\nA Proxy presents a Minecraft-Proxy.\nProxies join one ProxyNet.\n\n**How to create Proxies and let them join a ProxyNet?**\n\nYou decide how Proxy Pods are being created.\n\nReasonably use\n[Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)\nfor stateless and\n[StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)\nfor stateful Proxies. Make awesome\nbenefit of Kubernetes features like\nCPU usage based [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)\nor [Rolling Updates](https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/)!\n\nFinally as described in the [ProxyNet](#proxynet) section to let Proxies join a ProxyNet\ngive the Pod the label `minekube-resource=proxy` and set `minekube-proxyNetName`\nto the desired ProxyNet name.\n\n*Note: A Proxy is a concept and exists in form of the `minekube-resource=proxy` label on each Proxy Pod.*\n\n## Server\nA Server resource presents one Minecraft Server.\n\n**How to create Servers and let them join a ProxyNet?**\n\nYou decide how Server Pods are being created.\n\nFor instance you could use a\n[Job](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/),\n[Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) (replica=1) or\n[StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) (replica=1)\nfor each new Server.\n\n*Note: A Server is a concept and exists in form of the `minekube-resource=server` label on each Server Pod.*\n\n## Simplicity is Complicated\nI thought about plenty solutions and they got pretty complex and hard to implement as I\nwas writing different concepts.\nI think this is the best resolution between simplicity, flexibility and extendability.\n\nP.S. Rob Pike is right by saying [Simplicity is Complicated](https://www.youtube.com/watch?v=rFejpH_tAHM) :D\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinbraemer%2Fdraft-minecraft-k8s","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobinbraemer%2Fdraft-minecraft-k8s","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinbraemer%2Fdraft-minecraft-k8s/lists"}