{"id":48744591,"url":"https://github.com/niloysh/testbed-automator","last_synced_at":"2026-04-28T06:01:06.250Z","repository":{"id":221626758,"uuid":"709626104","full_name":"niloysh/testbed-automator","owner":"niloysh","description":"Scripts for automating deployment of 5G testbed","archived":false,"fork":false,"pushed_at":"2025-10-22T05:07:39.000Z","size":10000,"stargazers_count":15,"open_issues_count":3,"forks_count":11,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-22T07:10:49.528Z","etag":null,"topics":["k8s","multus","ovs-cni","testbed"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/niloysh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-25T04:22:55.000Z","updated_at":"2025-10-22T05:07:43.000Z","dependencies_parsed_at":"2024-02-09T04:23:48.760Z","dependency_job_id":"b097c1f5-2c68-4372-93fc-633281ac1c0e","html_url":"https://github.com/niloysh/testbed-automator","commit_stats":null,"previous_names":["niloysh/testbed-automator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/niloysh/testbed-automator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niloysh%2Ftestbed-automator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niloysh%2Ftestbed-automator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niloysh%2Ftestbed-automator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niloysh%2Ftestbed-automator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niloysh","download_url":"https://codeload.github.com/niloysh/testbed-automator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niloysh%2Ftestbed-automator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32368534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"online","status_checked_at":"2026-04-28T02:00:07.250Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["k8s","multus","ovs-cni","testbed"],"created_at":"2026-04-12T10:00:24.384Z","updated_at":"2026-04-28T06:01:06.243Z","avatar_url":"https://github.com/niloysh.png","language":"Shell","funding_links":[],"categories":["Lab \u0026 Testbeds"],"sub_categories":["Ready-to-Use Environments"],"readme":"# testbed-automator\nThis project provides scripts to automate the setup and teardown of a Kubernetes cluster for deploying a 5G core network.\n\nThis repo is designed to be used with [free5gc-k8s](https://github.com/niloysh/free5gc-k8s) and [open5gs-k8s](https://github.com/niloysh/open5gs-k8s).\n\n![Static Badge](https://img.shields.io/badge/k8s-v1.28.2-green)\n\n# Requirements\n- Supported OS: **Ubuntu 22.04 LTS** (recommended); Ubuntu 20.04 is compatible but unmaintained.\n- Minimum hardware: **4 cores, 4GB RAM**, and internet access.\n\n# Quick Start\n```bash\n# Clone the repository\ngit clone https://github.com/niloysh/testbed-automator.git\ncd testbed-automator\n\n# Run the installation script\n./install.sh\n```\n**Note**: Run scripts as a regular user (not as root).\n\nThe `install.sh` script should take approximately 5 mintues to run to completion. On successful deployment, you should see all pods in **Running** state as shown below.\n\n![successful-deployment](images/successful-deployment.png)\n\n# Scripts Overview\nDescriptions of the scripts in this repo are given below.\n\n- `install.sh` : Automates the deployment of a single-node k8s cluster, configures cluster, installs various CNIs, configures ovs bridges and sets everything up for deployment of 5G core.\n\n- `uninstall.sh`: Reverts changes made by install.sh, removing the Kubernetes cluster and configurations.\n\n- `cleanup.sh`: Removes remants (old configuration files, CNIs) etc from previous installations of Kubernetes. Use this after `uninstall.sh` before running `install.sh` again.\n\n- `worker-join-token.sh`: Run this on the **master** node to print out the command for adding worker nodes to the cluster.\n\n**Note**: Run scripts as regular user with sudo permissions if needed. Do not use **root**.\n\n\n\n# Multi-node deployment\nTo deploy a multi-node Kubernetes cluster, start by setting up the master node using install.sh, and then add worker nodes.\n\n1. **Set up the Master Node**:\nRun install.sh on the intended master node as shown in the [Quick Start](#quick-start) section.\n\n2. **Set up each Worker Node**: On each worker node, run the install.sh script with the `--worker` flag as follows.\n    ```bash\n    # Clone the repository\n    git clone https://github.com/niloysh/testbed-automator.git\n    cd testbed-automator\n\n    # Run the installation script for the worker node\n    sudo ./install.sh --worker\n    ```\n\n3. **Generate Join Token**:\n    On the master node, execute:\n    ```bash\n    sudo ./worker-join-token.sh\n    ```\n    This will output a command that includes the token and IP address for the worker node to join the cluster.\n\n4. **Join the Worker Nodes**:\nOn each worker node, run (with sudo) the join command generated by worker-join-token.sh on the master node. The command will look something like this:\n    ```bash\n    sudo kubeadm join \u003cmaster-ip\u003e:\u003cport\u003e --token \u003ctoken\u003e --discovery-token-ca-cert-hash \u003chash\u003e\n    ```\n\n5.\t**Verify Node Status**:\nBack on the master node, check the status of all nodes:\n    ```bash\n    kubectl get nodes\n    ```\n    Each worker node should appear with the status **Ready**.\n\n6. **Connect every worker node to the master node using VXLAN tunnels**:\n    ```bash\n    sudo python3 setup-tunnels.py\n    ```\n\n    **Note**: The `setup-tunnels.py` script is a work in progress and may not work as expected, as it makes several assumptions such as passwordless SSH being enabled. The idea is to create VXLAN tunnels between worker nodes and the master node to enable communication between them for the secondary Multus interface. If the script does not work, you can manually create VXLAN tunnels between the nodes.\n\n# Useful Resources and Commands\n\nThis project relies on several networking and Kubernetes tools that are essential for 5G deployments. Below are resources to help understand these tools better, along with some common commands.\n\n## Key Technologies\n- [Kubernetes](https://kubernetes.io/):  The orchestrator for containerized applications.\n- [Multus CNI](https://github.com/k8snetworkplumbingwg/multus-cni): Enables multiple network interfaces in Kubernetes.\n- [OpenVSwitch (OVS)](https://www.openvswitch.org/): A virtual switch for network virtualization.\n- [OVS-CNI](https://github.com/k8snetworkplumbingwg/ovs-cni): A plugin that integrates OpenVSwitch with Kubernetes.\n\n## Common Kubernetes Commands\n```bash\n# View all nodes in the cluster\nkubectl get nodes\n\n# View all pods in the default namespace\nkubectl get pods\n\n# View detailed info about a specific pod\nkubectl describe pod \u003cpod-name\u003e\n\n# List services in the namespace\nkubectl get svc\n\n# Delete a pod\nkubectl delete pod \u003cpod-name\u003e\n```\n## Useful OVS Commands\n```bash\n# Show OVS bridges\novs-vsctl show\n\n# Add a new bridge\nsudo ovs-vsctl add-br \u003cbridge-name\u003e\n\n# Delete an OVS bridge\nsudo ovs-vsctl del-br \u003cbridge-name\u003e\n```\n\n\n# Troubleshooting\n\n## Common issues\n- **Check Logs**: Each function logs output to help trace errors. Look for “RED” messages indicating critical failures.\n- **Network Requirements**: Some components require network access (e.g., Helm, Kubernetes packages). Ensure the server can access the internet during the installation process.\n- **Resource Limits**: Verify system resources meet minimum requirements. Kubernetes installations may fail with less than the recommended CPU and RAM.\n\nFor additional help, see [troubleshooting.md](troubleshooting.md)\n\n# Contributing\nContributions are welcome! Please open an issue or submit a pull request. For larger changes, open an issue first to discuss the proposed updates.\n\n## License\n\nThis repository is licensed under the [MIT License](LICENSE).\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniloysh%2Ftestbed-automator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniloysh%2Ftestbed-automator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniloysh%2Ftestbed-automator/lists"}