Kvoke is a minimal, open-source Infrastructure as Code (IaC) tool designed to simplify the deployment of Kubernetes Kubeadm clusters. It eliminates the complexities of manual setup, allowing you to build a production-ready cluster with minimal effort.
Kvoke streamlines the entire process into a few simple steps:
-
Meet the Prerequisites: Ensure you have the minimal infrastructure required, as outlined in the Prerequisites section.
-
Fill out the Form: Use our intuitive UI to define your cluster's specifications.
-
Deploy: Kvoke handles the rest, automating the entire cluster creation process.
With Kvoke, building a Kubernetes cluster is as easy as filling out a form, making advanced infrastructure accessible to everyone.
Kvoke gives you the flexibility to build your cluster with the container runtime that best fits your needs. You can easily choose between:
-
Docker 🐳
-
Containerd 📦
-
CRI-O 🐧
Beyond container runtimes, Kvoke lets you select the cluster configuration that aligns with your specific high-availability (HA) and reliability requirements.
This is a standard setup with a single control plane. It’s an ideal solution for development, testing, or scenarios where high availability isn't the primary concern. It provides a solid, minimal-footprint cluster that's quick to deploy and easy to manage.
For environments that demand high availability, the Stacked ETCD configuration is the perfect choice. This setup features multiple control planes, with leader election managed automatically via Keepalived. It's a robust solution for a production workload where you need HA without the overhead of a massive infrastructure.
Once your infrastructure is in place, the cluster creation process is streamlined. Minimal configuration is required on the virtual machines themselves; the primary task is to ensure they meet the following technical specifications.
This project requires a pre-configured infrastructure of virtual machines that adhere to the following technical prerequisites:
Network Configuration: All virtual machines must have a static IP address assigned to a single, shared network. This ensures consistent and reliable inter-node communication.
User and Permissions: A unique user account with identical credentials and sudo privileges must exist across all virtual machines.
Minimum System Requirements: Each virtual machine must meet or exceed the following specifications to function optimally as a Kubernetes node:
Worker Node (Minimal Requirements)
-
CPU: 2 vCPUs
-
RAM: 2 GB
-
Storage: 25 GB of available disk space
Master Node (Minimal Requirements)
-
CPU: 4 vCPUs
-
RAM: 4 GB
-
Storage: 50 GB of available disk space
Kvoke can be executed from any environment with network access to your target virtual machines, including a separate host or one of the VMs destined to be a Kubernetes node.
For optimal performance and minimal latency, it's recommended that you run Kvoke directly from the machine designated as your primary master node.
-
Clone the Repository
First, connect to your target node and clone the Kvoke repository.
git clone https://github.com/franconte98/Kvoke.git
-
Grant Execution Permissions
Navigate into the newly created Kvoke directory and grant execute permissions to the main script.
cd Kvoke && chmod +x start.sh
-
Execute the Script (as ROOT)
Run the start.sh script to begin the setup process as ROOT.
sudo ./start.sh
-
Follow the On-Screen Prompts
The script will guide you through a series of prompts to configure and deploy your desired Kubernetes infrastructure. Simply follow the instructions displayed in your terminal.
Kvoke is a versatile tool designed to handle both cluster creation and node joining.
-
To Create a Cluster: Run Kvoke from a machine on the same network as your virtual machines. The script will guide you through the process of setting up your desired cluster topology.
-
To Join a Node: Execute Kvoke directly on the node you wish to add to an existing cluster. Follow the on-screen prompts and select the "Join" option when prompted.
Kvoke offers a unique approach to Kubeadm Kubernetes deployment. Unlike solutions that abstract away the cluster's core components, Kvoke utilizes kubeadm to create a standard, vendor-neutral Kubernetes cluster. This means your cluster is built with the same robust tools you would use for a manual configuration, guaranteeing long-term stability and compatibility with the wider Kubernetes ecosystem.
This method provides two key advantages:
Transparency: You get a standard kubeadm cluster, not a custom-built solution, making it easier to troubleshoot and manage.
Minimalism: Kvoke avoids unnecessary software, focusing on a lean and efficient cluster that's production-ready out of the box.
Additionally, Kvoke installs a curated selection of minimal yet extremely useful tools to extend your cluster's capabilities:
-
K9S: A terminal-based UI to interact with your Kubernetes cluster. It provides a real-time, intuitive interface for managing applications and resources.
-
Helm: The package manager for Kubernetes. It simplifies the process of defining, installing, and managing applications.
-
NGINX Ingress Controller: An Ingress controller that uses a standard NGINX web server to provide HTTP and HTTPS routing to services within your cluster.
-
KGateway: An open-source, lightweight API gateway for Kubernetes.
-
MetalLB: A load-balancer implementation for bare metal Kubernetes clusters. It provides a network load-balancer using standard routing protocols.
-
Weave: A simple and lightweight networking solution that creates a virtual network connecting all your Kubernetes pods. It is used as the Container Network Interface (CNI).
Currently, Kvoke supports only Debian-based Linux distributions (such as Debian and Ubuntu), but support for additional distributions will be available soon.
The HA default setup is configured with a 30-second failover, which offers a practical balance between functionality and usability.
Distributed under the BSD-3-Clause license License. See LICENSE for more information.