{"id":20256717,"url":"https://github.com/kerbaras/cloudlab","last_synced_at":"2026-05-08T12:32:02.027Z","repository":{"id":206857690,"uuid":"717822708","full_name":"kerbaras/cloudlab","owner":"kerbaras","description":"Infrastructure repository for my cloud-lab","archived":false,"fork":false,"pushed_at":"2023-11-13T20:43:29.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-14T03:45:24.740Z","etag":null,"topics":["argocd","cloud","gitops","homelab","k0s","kubernetes","labs","terraform"],"latest_commit_sha":null,"homepage":"https://home.kerbaras.com","language":"HCL","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/kerbaras.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}},"created_at":"2023-11-12T17:55:51.000Z","updated_at":"2023-11-12T20:36:28.000Z","dependencies_parsed_at":"2023-12-10T11:43:59.057Z","dependency_job_id":null,"html_url":"https://github.com/kerbaras/cloudlab","commit_stats":{"total_commits":19,"total_committers":1,"mean_commits":19.0,"dds":0.0,"last_synced_commit":"d31df8cd52bb0c63fa6b3078f65c5e368f3dfa32"},"previous_names":["kerbaras/cloudlab"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kerbaras%2Fcloudlab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kerbaras%2Fcloudlab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kerbaras%2Fcloudlab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kerbaras%2Fcloudlab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kerbaras","download_url":"https://codeload.github.com/kerbaras/cloudlab/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241715023,"owners_count":20007913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["argocd","cloud","gitops","homelab","k0s","kubernetes","labs","terraform"],"created_at":"2024-11-14T10:47:42.043Z","updated_at":"2026-05-08T12:31:57.005Z","avatar_url":"https://github.com/kerbaras.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cloudlab\n\nInfrastructure repository for my [cloud-lab](https://home.kerbaras.com)\n\n## Overview\n\nInfrastructure as Code for my cloud-based lab. This repository contains provisioning and configuration definitions in Terraform and Kustomization for a Kubernetes Cluster Environment.\n\n\u003e [!IMPORTANT]\n\u003e This project is still in the experimental stage and it's used to run experiments and learn new technologies. It's not intended to be used in production environments.\n\u003e For more information check [the roadmap](#roadmap).\n\n## Technology Stack\n\n| Logo                                                                                                        | Name                                              | Description                         |\n| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ----------------------------------- |\n| \u003cimg width=\"32\" src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/terraform/terraform-original.svg\"/\u003e | [Terraform](https://www.terraform.io/)            | Infrastructure as Code              |\n| \u003cimg width=\"32\" src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/kubernetes/kubernetes-plain.svg\"/\u003e  | [Kubernetes](https://kubernetes.io/)              | Container Orchestration             |\n| \u003cimg width=\"32\" src=\"https://img.stackshare.io/service/12670/kustomize.png\"/\u003e                               | [Kustomize](https://kustomize.io/)                | Kubernetes Configuration Management |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/15859888?s=200\u0026v=4\"/\u003e                          | [Helm](https://helm.sh/)                          | Kubernetes Package Manager          |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/30269780?s=200\u0026v=4\"/\u003e                          | [ArgoCD](https://argoproj.github.io/argo-cd/)     | GitOps Continuous Delivery          |\n| \u003cimg width=\"32\" src=\"https://github.com/jetstack/cert-manager/raw/master/logo/logo.png\"/\u003e                   | [Cert-Manager](https://cert-manager.io/)          | Kubernetes Certificate Management   |\n| \u003cimg width=\"32\" src=\"https://k0sproject.io/images/k0s-logo.svg\"/\u003e                                           | [k0s](https://k0sproject.io/)                     | Kubernetes Distribution             |\n| \u003cimg width=\"32\" src=\"https://longhorn.io/img/logos/longhorn-icon-white.png\"/\u003e                               | [Longhorn](https://longhorn.io/)                  | Kubernetes Storage Orchestration    |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/60239468?s=200\u0026v=4\"/\u003e                          | [MetalLB](https://metallb.universe.tf/)           | Kubernetes Load Balancer            |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/79531940?s=200\u0026v=4\"/\u003e                          | [Emissary Ingress](https://www.getambassador.io/) | Kubernetes API Gateway              |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/25301026?s=200\u0026v=4\"/\u003e                          | [Linkerd](https://linkerd.io/)                    | Kubernetes Service Mesh             |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/3380462?s=200\u0026v=4\"/\u003e                           | [Prometheus](https://prometheus.io/)              | Kubernetes Monitoring               |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/7195757?s=200\u0026v=4\"/\u003e                           | [Grafana](https://grafana.com/)                   | Kubernetes Observability            |\n| \u003cimg width=\"32\" src=\"https://github.com/grafana/loki/raw/main/docs/sources/logo.png?raw=true\"/\u003e             | [Loki](https://grafana.com/oss/loki/)             | Kubernetes Log Aggregation          |\n| \u003cimg width=\"32\" src=\"https://raw.githubusercontent.com//bastienwirtz/homer/main/public/logo.png\"/\u003e          | [Homer](https://github.com/bastienwirtz/homer)    | Kubernetes Dashboard                |\n| \u003cimg width=\"32\" src=\"https://avatars.githubusercontent.com/u/22225832?s=200\u0026v=4\"/\u003e                          | [Portainer](https://www.portainer.io/)            | Kubernetes Dashboard                |\n\n### Hardware\n\nSo far the lab is running on [Hertzner](https://www.hetzner.com/) with the following nodes:\n\n- AX41-NVMe:\n  - CPU: AMD Ryzen 5 3600 6-Core\n  - RAM: 64 GB DDR4\n  - Storage: 2 x 512 GB NVMe SSD\n\n### Features\n\n- [x] Kubernetes Cluster: Using [k0s](https://k0sproject.io/) as Kubernetes distribution\n- [x] GitOps Continuous Delivery: Using [ArgoCD](https://argoproj.github.io/argo-cd/) as GitOps Continuous Delivery\n- [x] Application Dashboard: Using [Homer](https://github.com/bastienwirtz/homer)\n- [x] Kubernetes Dashboard: Using [Portainer](https://www.portainer.io/)\n- [x] Single Sign-On: Using [Zitadel](https://zitadel.com/)\n  - [ ] Kubernetes OIDC Authentication\n  - [ ] Private Application Authentication\n  - [ ] Private Docker Registry Authentication\n- [x] Kubernetes Storage Orchestration: Using [Longhorn](https://longhorn.io/)\n- [ ] Monitoring and Alerting\n- [ ] Virtual Private Network\n- [ ] NAT Load Balancer\n- [ ] Virtual Private Cloud\n- [ ] Virtual Machine Orchestration\n\n## Getting Started\n\nSo far this is not supported out of the box. Provisioning is handled by Terraform, but some resources need to be created manually.\n\n### Bootstrap the Cluster\n\n```bash\ncd k0s\nk0sctl apply -c k0sctl.yaml\n```\n\n### Provisioning Infrastructure\n\n```bash\ncd terraform\nterraform init\nterraform apply --var-file=cloudlab.tfvars\n```\n\n### Deploying Applications\n\nApplications are handled by ArgoCD. To deploy an application, create a new folder under `apps/{my-app}` and add a `kustomization.yaml` file.\nThen add the application to the `applications.tf` file and deploy it using terraform.\n\nThe app folder follows the following structure:\n\n```\napps\n└── my-app\n    ├── base\n    │   ├── kustomization.yaml\n    │   └── deplyment.yaml\n    └── overlays\n        ├── dev\n        │   ├── kustomization.yaml\n        │   └── app.env\n        └── prod\n            ├── kustomization.yaml\n            └── app.yaml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkerbaras%2Fcloudlab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkerbaras%2Fcloudlab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkerbaras%2Fcloudlab/lists"}