{"id":18889501,"url":"https://github.com/eoli3n/kubernetes-the-less-hard-way","last_synced_at":"2026-05-03T21:32:57.998Z","repository":{"id":113440180,"uuid":"306126817","full_name":"eoli3n/kubernetes-the-less-hard-way","owner":"eoli3n","description":"Bootstrap Kubernetes the (less) hard way on premise with ansible playbooks.","archived":false,"fork":false,"pushed_at":"2020-11-17T20:59:49.000Z","size":246,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-30T18:41:47.970Z","etag":null,"topics":["ansible","ansible-playbooks","bootstrap","cluster","containers","k8s","kubernetes","onpremise"],"latest_commit_sha":null,"homepage":"","language":"HTML","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/eoli3n.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}},"created_at":"2020-10-21T19:27:40.000Z","updated_at":"2023-01-31T11:36:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"1917c460-3c69-4a8b-9fe0-860efe35e687","html_url":"https://github.com/eoli3n/kubernetes-the-less-hard-way","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eoli3n/kubernetes-the-less-hard-way","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoli3n%2Fkubernetes-the-less-hard-way","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoli3n%2Fkubernetes-the-less-hard-way/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoli3n%2Fkubernetes-the-less-hard-way/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoli3n%2Fkubernetes-the-less-hard-way/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eoli3n","download_url":"https://codeload.github.com/eoli3n/kubernetes-the-less-hard-way/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoli3n%2Fkubernetes-the-less-hard-way/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32586187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"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":["ansible","ansible-playbooks","bootstrap","cluster","containers","k8s","kubernetes","onpremise"],"created_at":"2024-11-08T07:49:13.690Z","updated_at":"2026-05-03T21:32:57.981Z","avatar_url":"https://github.com/eoli3n.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"IN PROGRESS\n\n# Kubernetes The (Less) Hard Way\n\nAnsible playbooks to learn how to host highly available Kubernetes cluster on premise with no SPOF.  \n- [Hard Way](ansible/hard-way) is kind of between [Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way) and [KubeSpray](https://github.com/kubernetes-sigs/kubespray), it automates cluster install from scratch: it is a sandbox to learn how each components works.  \n- [RKE](ansible/rke) automates production ready cluster install with [Rancher Kubernetes Engine](https://rancher.com/docs/rke/latest/en/) on top of [RancherOS hosts](https://rancher.com/docs/os/v1.x/en/). It has distributed persistent storage, container registry, true high availability with no Single Point Of Failure, ...  \n\n## VMs provisionning\n\n| Hostname          | OS for Hard Way     | OS for Rancher |\n|-------------------|---------------------|----------------|\n| k8s-controller1   | Ubuntu Server 20.04 | RancherOS      |\n| k8s-controller2   | Ubuntu Server 20.04 | RancherOS      |\n| k8s-controller3   | Ubuntu Server 20.04 | RancherOS      |\n| k8s-worker1       | Ubuntu Server 20.04 | RancherOS      |\n| k8s-worker2       | Ubuntu Server 20.04 | RancherOS      |\n| k8s-worker3       | Ubuntu Server 20.04 | RancherOS      |\n| k8s-loadbalancer1 | Debian 10           | Debian 10      |\n| k8s-loadbalancer2 | Debian 10           | Debian 10      |\n| k8s-storage1      | Debian 10           | Debian 10      |\n| k8s-storage2      | Debian 10           | Debian 10      |\n| k8s-storage3      | Debian 10           | Debian 10      |\n\n## Network and DNS\n\nAll hosts needs a private IP on the same subnet.  \nCreate DNS or ``hosts`` file entries for each VM.  \nEach VMs and your client should be able to resolve all hostnames.  \n\n## Inventory\n\n```\ncp ansible/hosts.template ansible/hosts\n```\nAdd all hostnames in ``ansible/hosts``.\n\n## Firewall\n\nAll trafic between VMs should not be filtered.  \nTo access services from outside, you should open in your firewall:  \n\n| Service        | Port           | Destination |\n|----------------|----------------|-------------|\n| ssh            | 22/tcp         | *           |\n| kube-apiserver | 6443/tcp       | k8s-haproxy |\n| ingress        | 80/tcp 443/tcp | k8s-haproxy |\n\n## Run Ansible playbooks\n\nPlease read playbooks before running.  \n\nInstall SSH, authorize your SSH public key, then test if VMs are reachable.  \n```\nansible all -m ping\n```\n\n##### Hard way\nRead [hard-way](ansible/hard-way).\n\n##### RKE way\nRead [rke](ansible/rke).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoli3n%2Fkubernetes-the-less-hard-way","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feoli3n%2Fkubernetes-the-less-hard-way","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoli3n%2Fkubernetes-the-less-hard-way/lists"}