{"id":37820037,"url":"https://github.com/kinvolk/racker","last_synced_at":"2026-01-16T15:41:14.891Z","repository":{"id":46722589,"uuid":"329898472","full_name":"kinvolk/racker","owner":"kinvolk","description":"rack provisioning utility for Kinvolk projects","archived":false,"fork":false,"pushed_at":"2022-01-14T19:22:46.000Z","size":383,"stargazers_count":13,"open_issues_count":3,"forks_count":3,"subscribers_count":14,"default_branch":"main","last_synced_at":"2023-10-01T15:54:18.967Z","etag":null,"topics":["bare-metal","deployment","flatcar","kinvolk","kubernetes","lokomotive"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kinvolk.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}},"created_at":"2021-01-15T11:53:30.000Z","updated_at":"2023-02-25T12:38:04.000Z","dependencies_parsed_at":"2022-08-29T11:32:10.458Z","dependency_job_id":null,"html_url":"https://github.com/kinvolk/racker","commit_stats":null,"previous_names":[],"tags_count":8,"template":null,"template_full_name":null,"purl":"pkg:github/kinvolk/racker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kinvolk%2Fracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kinvolk%2Fracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kinvolk%2Fracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kinvolk%2Fracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kinvolk","download_url":"https://codeload.github.com/kinvolk/racker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kinvolk%2Fracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bare-metal","deployment","flatcar","kinvolk","kubernetes","lokomotive"],"created_at":"2026-01-16T15:41:13.936Z","updated_at":"2026-01-16T15:41:14.884Z","avatar_url":"https://github.com/kinvolk.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kinvolk Racker\n\nThis is Kinvolk's solution for provisioning Lokomotive and Flatcar Container Linux on racks.\n\nAutomated reprovisioning of nodes is a core principle and one of the rack servers takes the\nrole of a management node on a rack-internal L2 network used for PXE booting.\n\nThe assumption is that each server has a primary network interface where the BMC sits on\nand a secondary interface. All primary interfaces except that of the management node are on\nthe internal L2 network together with the secondary interface of the management node,\nwhile the primary interface of the management node and all secondary interfaces of all other\nservers are on a public network. This allows to reach the management node's BMC from the outside\nwhile the management node itself has full control over the BMCs of the rack, serving DHCP to\nthem and interfacing with IPMI to control the PXE booting.\n\n## Test it in VMs\n\nYou can use the [racker-sim](racker-sim/) `ipmi-env.sh` script to create a VM environment that simulates IPMI.\nThis allows you to run Racker without requiring a free rack.\n\n## Installer\n\nThe installer is delivered as a container image but extracted in the host and\nrun locally.\nThe reason for this approach if that we can keep a very minimal dependency on\nwhat's shipped in the OS (that's installed in the management node).\n\nSince Racker runs locally, its container image default command extracts the Racker payload into `/opt/racker`, creates symbolic links in `/opt/bin` to its executables, sets up any systemd services, and thus expects to be run with privileged permissions.\n\nThe modules that compose the installer (as well as how to build them) are\ndefined in the `./installer/conf.yaml` file.\n\n### Build the installer\n\nFirst compile the installer creator:\n\n`make all`\n\nNow push the resulting image.\n\n### Run the installer\n\nOnce the image `racker:latest` has been created, you can run the installer on Flatcar Container Linux:\n\n`sudo docker run --rm --privileged --pid host quay.io/kinvolk/racker:latest`\n\nAfter that, all interaction is done with the `racker` command.\n\nThe `racker factory` mode will help setting up the rack metadata files in `/usr/share/oem/`.\n\nThese files have to be created manually:\n\n`ipmi_user` and `ipmi_password`: credentials for the BMCs\n\n`nodes.csv`: a table of all the servers in the rack and their primary and secondary MAC addresses and BMC MAC addresses,\noptionally categorized by their type (HW specs).\nThe management node itself is also part of the list. The secondary MAC address entries are optional if DHCP is used for\npublic IP addresses, but at least for the management node it is required to identify the internal interface.\n\nExample `nodes.csv`:\n\n```csv\nPrimary MAC address, BMC MAC address, Secondary MAC address, Node Type, Comments\n00:11:22:33:44:00, 00:11:22:33:44:01, 00:11:22:33:44:30, red, mgmt node\n00:11:22:33:44:10, 00:11:22:33:44:11, 00:11:22:33:44:40, red, controller\n00:11:22:33:44:20, 00:11:22:33:44:21, 00:11:22:33:44:50, purple, worker\n```\n\nFor details, read the [docs](docs/).\n\n### Provisioning a Lokomotive Kubernetes cluster\n\nRunning `racker bootstrap` will PXE boot all servers on the rack and install Lokomotive.\n\nFrom now on the cluster can be managed with `lokoctl`.\n\n### Updating Racker\n\nTo fetch updates that are compatible with the current version, run `racker update`.\n\nTo upgrade to the latest version which may have breaking changes, run `racker upgrade`.\n\nBoth will update the `lokoctl` and `terraform` binaries, too.\n\n### Lokomotive Baremetal Development Environment\n\nThe part of Racker which creates the Lokomotive configuration can be run stand-alone to set up libvirt QEMU instances on your laptop.\nThis is different from the [IPMI QEMU simulator environment](racker-sim/) which is preferred as it fully utilizes Racker.\nHowever, for quick development of Racker/Lokomotive this is how to run it:\n\n```\ncd /var/tmp/\nmkdir mycluster # \"prepare.sh create\" must run in an empty folder with just the controller_macs/worker_macs files\ncd mycluster\necho 0c:42:a1:11:11:11 \u003e controller_macs\necho 0c:42:a1:11:11:22 \u003e worker_macs\n# compile the right Lokomotive branch used in Racker (see installer/conf.yaml)\nsudo rm -r /opt/racker/terraform/\nsudo mkdir -p /opt/racker/terraform\nsudo cp -r /home/$USER/kinvolk/lokomotive/assets/terraform-modules/matchbox-flatcar/* /opt/racker/terraform\nPATH=\"$PATH:/home/$USER/kinvolk/lokomotive\" /home/$USER/kinvolk/racker/bootstrap/prepare.sh create\n[…]\nPATH=\"$PATH:/home/$USER/kinvolk/lokomotive\" lokoctl cluster apply # or any other things you want to do\n[…]\n# later destroy it again:\nPATH=\"$PATH:/home/$USER/kinvolk/lokomotive\" /home/$USER/kinvolk/racker/bootstrap/prepare.sh destroy\n```\n\nIt will create two bridges, one for the internal PXE and one for the network with Internet access (using NAT).\nMatchbox and dnsmasq are started as containers (when using Podman matchbox is a user container and dnsmasq a root container).\nThe `/opt/racker-state/` folder gets populated with the Flatcar image and the Matchbox configuration.\n\n## Code of Conduct\n\nPlease refer to the Kinvolk [Code of Conduct](https://github.com/kinvolk/contribution/blob/master/CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkinvolk%2Fracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkinvolk%2Fracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkinvolk%2Fracker/lists"}