Mube is a project that originated from the idea of a 'lightweight container orchestration platform', aiming to simplify container orchestration within a specific domain (Domain-Specific).
To achieve this, it is based on the Kubernetes architecture, but is designed to simplify Kubernetes's complex configurations and networking. It retains the fundamental roles of the Kubernetes Control Plane and Worker Nodes while removing or simplifying the associated auxiliary components.
The architecture of Mube consists of the following main components (items in italics are currently in the planning stage and may not yet be implemented or could be removed/changed in the future):
Control Plane
- Mube API Server
- Controller Manager
- Scheduler
- Etcd (may be removed or replaced in the future)
Worker Node
- Mube Node Agent (mubelet)
- Mube Proxy (mube-proxy)
Mube aims to support OCI(Open Container Initiative) compliant container runtimes, and is planned to use Containerd by default. Compatibility with container runtimes will be maintained through Kubernetes's CRI(Container Runtime Interface).
In addition, it plans to implement standard interfaces such as CNI (Container Network Interface) and CSI (Container Storage Interface) to simplify networking and storage concerns.
For more details, please refer to the architecture diagram below.
Note
This architecture represents a planned design and may be subject to change at any time. It will be updated accordingly whenever changes occur. For now, it closely follows the Kubernetes architectural model.
The repository includes two runnable components:
Mube API Server(cmd/mube-apiserver)mubelet(cmd/mubelet)
For MVP simplicity, node network information is hardcoded in API Server YAML config.
- API Server loads
configs/apiserver.yaml. - Only nodes listed in this file can send heartbeat.
- API Server keeps authoritative node
ipandportfrom this file.
listenAddress: ":8080"
nodes:
- name: "mube-node-1"
ip: "127.0.0.1"
port: 10250GET /healthzGET /api/v1/nodes(includesstate:Unknown|Ready|NotReady)POST /api/v1/nodes/heartbeat
GET /healthzGET /status
cp .env.apiserver.example .env.apiserver
cp .env.mubelet.example .env.mubelet
make tidy
make run-apiservermake run-mubeletCheck node registration:
curl -s http://127.0.0.1:8080/api/v1/nodes | jqAPI Server:
MUBE_APISERVER_CONFIG(defaultconfigs/apiserver.yaml)MUBE_APISERVER_SHUTDOWN_TIMEOUT(default5s)MUBE_NODE_NOTREADY_TIMEOUT(default30s)
State behavior:
Unknown: node is registered but no heartbeat yet within timeout windowReady: heartbeat received within timeoutNotReady: no heartbeat beyond timeout (including never-heartbeated nodes after timeout)
mubelet:
MUBELET_NODE_NAME(default hostname)MUBELET_RUNTIME(defaultcontainerd)MUBELET_VERSION(default0.1.0)MUBELET_CAPACITY(default10)MUBE_API_SERVER(defaulthttp://127.0.0.1:8080)MUBELET_HEARTBEAT_INTERVAL(default10s)MUBELET_HEALTH_LISTEN(default:10250)MUBELET_SHUTDOWN_TIMEOUT(default5s)
