{"id":14384211,"url":"https://github.com/openfun/kubic","last_synced_at":"2025-04-09T22:21:01.577Z","repository":{"id":153577971,"uuid":"629510401","full_name":"openfun/kubic","owner":"openfun","description":"A Kubernetes deployment as code to OVH or Scaleway, with Prometheus, ArgoCD and Hashicorp Vault","archived":false,"fork":false,"pushed_at":"2024-10-23T23:16:43.000Z","size":886,"stargazers_count":37,"open_issues_count":14,"forks_count":3,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-24T12:43:35.948Z","etag":null,"topics":["argocd","hashicorp-vault","kubernetes","ovh","prometheus","scaleway","terraform"],"latest_commit_sha":null,"homepage":"https://openfun.github.io/kubic/","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/openfun.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":"2023-04-18T13:09:53.000Z","updated_at":"2024-10-22T20:24:23.000Z","dependencies_parsed_at":"2023-10-04T18:23:20.516Z","dependency_job_id":"b8eba018-5fc4-436d-935a-700fc27c2b28","html_url":"https://github.com/openfun/kubic","commit_stats":null,"previous_names":["openfun/kubic"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfun%2Fkubic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfun%2Fkubic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfun%2Fkubic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfun%2Fkubic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openfun","download_url":"https://codeload.github.com/openfun/kubic/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248120060,"owners_count":21050886,"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","hashicorp-vault","kubernetes","ovh","prometheus","scaleway","terraform"],"created_at":"2024-08-28T18:01:13.323Z","updated_at":"2025-04-09T22:21:01.556Z","avatar_url":"https://github.com/openfun.png","language":"HCL","readme":"# Kubic - Kubernetes Infrastructure as Code\n\n[![Kubernetes](https://img.shields.io/static/v1?style=for-the-badge\u0026message=Kubernetes\u0026color=326CE5\u0026logo=Kubernetes\u0026logoColor=FFFFFF\u0026label=)](https://kubernetes.io)\n[![NGINX](https://img.shields.io/static/v1?style=for-the-badge\u0026message=NGINX\u0026color=009639\u0026logo=NGINX\u0026logoColor=FFFFFF\u0026label=)](https://kubernetes.github.io/ingress-nginx/)\n[![ArgoCD](https://img.shields.io/static/v1?style=for-the-badge\u0026message=ArgoCD\u0026color=EF7B4D\u0026logo=Argo\u0026logoColor=FFFFFF\u0026label=)](https://argo-cd.readthedocs.io)\n[![Vault](https://img.shields.io/static/v1?style=for-the-badge\u0026message=Vault\u0026color=000000\u0026logo=Vault\u0026logoColor=FFFFFF\u0026label=)](https://www.vaultproject.io)\n[![Terraform](https://img.shields.io/static/v1?style=for-the-badge\u0026message=Terraform\u0026color=7B42BC\u0026logo=Terraform\u0026logoColor=FFFFFF\u0026label=)](https://www.terraform.io)\n\nAvailable on:\n\n[![Scaleway](https://img.shields.io/static/v1?style=for-the-badge\u0026message=Scaleway\u0026color=4F0599\u0026logo=Scaleway\u0026logoColor=FFFFFF\u0026label=)](https://www.scaleway.com)\n[![OVH](https://img.shields.io/static/v1?style=for-the-badge\u0026message=OVH\u0026color=123F6D\u0026logo=OVH\u0026logoColor=FFFFFF\u0026label=)](https://www.ovh.com)\n\n## Overview\n\nKubic is a cutting edge, ready for production and multi cloud provider Kubernetes infrastructure as code. It integates an ingress controller, a certificate manager, a monitoring stack, a GitOps tool with complete secret management and a backup tool.\n\nThis Terraform aims at creating a managed k8s cluster setup with :\n\n- NGINX Ingress Controller\n- Cert-manager\n- Prometheus / Grafana\n- ArgoCD\n- Hashicorp Vault if needed\n- ArgoCD Vault Plugin if Vault is deployed\n- Velero for backuping the cluster\n\nThe cluster can be deployed either on OVHCloud or on Scaleway. New provider can be added by creating a new folder in the root of the repository, and by following the same architecture as the existing providers.\n\n## Repository architecture\n\n```bash\n.\n├── docs                  # Folder containing the documentation\n├── state_bucket          # Folder containing the Terraform to create a S3 bucket for the Terraform state\n├── vault                 # Folder containing the Terraform to configure Hashicorp Vault\n├── common                # Folder containing the Terraform which is common to all the providers\n├── ovh                   # Folder declaring Terraform to deploy a cluster on OVHCloud\n├── scaleway              # Folder declaring Terraform to deploy a cluster on Scaleway\n├── examples              # Folder containing examples of applications to deploy with ArgoCD\n├── .gitignore\n├── LICENSE\n└── README.md\n```\n\nAll files contained in the folder `common` are symbolicaly linked in the folders `ovh` and `scaleway` to avoid code duplication.\n\n## Getting started\n\n- Create you cluster:\n  - [Manual deployment](docs/cluster-manual.md)\n  - [Automatic deployment](docs/cluster-auto.md)\n- [Configure Hashicorp Vault](docs/hashicorp-vault.md)\n- [Configure ArgoCD](docs/argocd.md)\n- [Configure Velero](docs/velero.md)\n- [Standalone use](docs/standalone.md)\n\n## Contributing\n\nCurrently, only OVH and Scaleway are supported as providers. Here are the guidelines to add a new provider:\n\n- Create a new folder in the root of the repository, with the name of the provider;\n- Create a symlink for all files in `common` to your new folder;\n- Create a `terraform.tf` file containing:\n  - Terraform configuration with a `s3` backend;\n  - The `helm`, `kubernetes` and `kubectl` providers along with the provider(s) you need, correctly configured;\n- A `kubernetes.tf` file creating the cluster, with an output named `kubeconfig` that contains the actual kubeconfig for the cluster;\n- A `ingress-nginx.tf` file, deploying the [ingress-nginx ingress controller](https://kubernetes.github.io/ingress-nginx) and configuring it with an external IP (you may need to create a load balancer on your provider). The ingress IP should be a Terraform output named `ingress_ip`;\n  - This must also create a `null_resource` named `ingress-nginx` that will `depends_on` on the node pool of your cluster (this is to get a consistent dependency chain for Terraform)\n  - The controller must have at least the following configuration:\n\n```yaml\ncontroller:\n  metrics:\n    enabled: true\n    serviceMonitor:\n      additionalLabels:\n        release: prometheus\n      enabled: true\n  extraArgs:\n    enable-ssl-passthrough: true\n  admissionWebhooks:\n    timeoutSeconds: 30\n```\n\n- Edit the `docker-compose.yaml` and create a service (adapt merely the code) for your provider.\n","funding_links":[],"categories":["HCL"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfun%2Fkubic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenfun%2Fkubic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfun%2Fkubic/lists"}