{"id":13821371,"url":"https://github.com/k8spin/k8spin-operator","last_synced_at":"2025-04-13T02:12:46.353Z","repository":{"id":49286852,"uuid":"277584528","full_name":"k8spin/k8spin-operator","owner":"k8spin","description":"K8Spin multi-tenant operator - OSS","archived":false,"fork":false,"pushed_at":"2025-03-22T17:34:46.000Z","size":1695,"stargazers_count":218,"open_issues_count":13,"forks_count":16,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-13T02:12:44.065Z","etag":null,"topics":["hacktoberfest","k8spin","kopf","kubernetes","multi-tenancy","multi-tenant","operator"],"latest_commit_sha":null,"homepage":"https://k8spin.cloud","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k8spin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-07-06T15:49:13.000Z","updated_at":"2024-11-27T22:07:38.000Z","dependencies_parsed_at":"2024-12-13T20:11:11.050Z","dependency_job_id":"add30ca5-2652-4b54-a058-3f7f2b9ee56e","html_url":"https://github.com/k8spin/k8spin-operator","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8spin%2Fk8spin-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8spin%2Fk8spin-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8spin%2Fk8spin-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k8spin%2Fk8spin-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k8spin","download_url":"https://codeload.github.com/k8spin/k8spin-operator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248654094,"owners_count":21140236,"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":["hacktoberfest","k8spin","kopf","kubernetes","multi-tenancy","multi-tenant","operator"],"created_at":"2024-08-04T08:01:20.880Z","updated_at":"2025-04-13T02:12:46.312Z","avatar_url":"https://github.com/k8spin.png","language":"Python","funding_links":[],"categories":["kubernetes"],"sub_categories":[],"readme":"# K8Spin Operator\n\n![Build Status](https://action-badges.now.sh/k8spin/k8spin-operator)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Derek](https://alexellis.o6s.io/badge?repo=k8spin-operator\u0026owner=k8spin)](https://github.com/alexellis/derek/)\n\n[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/k8spin.svg?style=social\u0026label=Follow%20%40k8spin)](https://twitter.com/k8spin)\n[![Join the chat at https://slack.kubernetes.io](https://img.shields.io/badge/style-register-green.svg?style=social\u0026label=Slack)](https://slack.kubernetes.io)\n\nKubernetes multi-tenant operator. Enables multi-tenant capabilities in your Kubernetes Cluster.\n\n[![Logo](docs/logo.png)](https://k8spin.cloud)\n\n------\n\n## Features\n\nThe main features included in the Operator:\n\n- **Enable Multi-Tenant:** Adds three new hierarchy concepts *(Organizations, Tenants, and Spaces)*.\n- **Secure and scalable cluster management delegation:** Cluster Admins creates Organizations\nthen delegating its access to users and groups.\n- **Cluster budget management:** Assigning resources in the organization definition makes it possible to\nunderstand how many resources are allocated to a user, team, or the whole company.\n\n## Concepts\n\nK8Spin manages the multi-tenant feature with three simple concepts:\n\n- **Organization**: Created by a cluster administrator, hosts **tenants**. Cluster administrator\ncan set compute quotas for the whole Organization and grant permissions to users and/or groups.\n- **Tenant**: A tenant can be created by an Organization administrator hosting **spaces**. The Tenant administrator\ncan fix compute quotas and assign roles to users and/or groups. Tenants resources should fit into\nOrganization resources.\n- **Space**: Tenant administrators can create Spaces. Space is an abstraction layer on top of\na Namespace. A tenant administrator should assign quotas and roles to Space. Space resources should fit\ninto Tenant resources.\n\n## TL;DR\n\nClone this repo, cd into it and:\n\n### Install with Helm 3\n\nTake a look to the [K8Spin helm chart documentation](deployments/helm/k8spin-operator/README.md).\n\n```bash\n# Create a local cluster\n$ kind create cluster\n# Deploy cert-manager\n$ helm repo add jetstack https://charts.jetstack.io\n$ helm repo update\n$ helm install cert-manager jetstack/cert-manager --version v1.1.0 --set installCRDs=true\n$ kubectl wait --for=condition=Available deployment --timeout=2m -n cert-manager --all\n# Deploy K8Spin operator\n$ export HELM_EXPERIMENTAL_OCI=\"1\"\n$ helm chart pull ghcr.io/k8spin/k8spin-operator-chart:v1.1.0\nv1.1.0: Pulling from ghcr.io/k8spin/k8spin-operator-chart\nref:     ghcr.io/k8spin/k8spin-operator-chart:v1.1.0\nname:    k8spin-operator\nversion: v1.1.0\nStatus: Downloaded newer chart for ghcr.io/k8spin/k8spin-operator-chart:v1.1.0\n$ helm chart export ghcr.io/k8spin/k8spin-operator-chart:v1.1.0\n$ helm install k8spin-operator ./k8spin-operator\n$ kubectl wait --for=condition=Available deployment --timeout=2m --all\n```\n\n### Install with kubectl\n\n```bash\n# Create a local cluster\n$ kind create cluster\n# Deploy cert-manager\n$ kubectl apply -f deployments/kubernetes/cert-manager/cert-manager.yaml\n$ kubectl wait --for=condition=Available deployment --timeout=2m -n cert-manager --all\n# Deploy K8Spin operator\n$ kubectl apply -f ./deployments/kubernetes/crds/ -n default\n$ kubectl apply -f ./deployments/kubernetes/roles/ -n default\n$ kubectl apply -f ./deployments/kubernetes/ -n default\n$ kubectl wait --for=condition=Available deployment --timeout=2m -n default --all\n```\n\nNow you are ready to use the operator\n\n```bash\n$ kubectl apply -f examples/org-1.yaml\norganization.k8spin.cloud/example created\n$ kubectl apply -f examples/tenant-1.yaml\ntenant.k8spin.cloud/crm created\n$ kubectl apply -f examples/space-1.yaml\nspace.k8spin.cloud/dev created\n```\n\nAs cluster-admin check organizations:\n\n```bash\n$ kubectl get org\nNAME      AGE\nexample   86s\n```\n\nIf you have installed the [K8Spin kubectl plugin](docs/kubectl-plugin.md):\n\n```bash\n$ kubectl k8spin get org\nName                CPU                 Memory\nexample             10                  10Gi\n```\n\nAs `example` organization admin get available tenants:\n\n```bash\nkubectl get tenants -n org-example --as Angel --as-group \"K8Spin.cloud\"\nNAME   AGE\ncrm    7m31s\n```\n\nAs `crm` tenant admin get spaces:\n\n```bash\n$ kubectl get spaces -n org-example-tenant-crm --as Angel --as-group \"K8Spin.cloud\"\nNAME   AGE\ndev    9m24s\n```\n\nRun a workload in the dev space:\n\n```bash\n$ kubectl run nginx --image nginxinc/nginx-unprivileged --replicas=2 -n org-example-tenant-crm-space-dev --as Angel --as-group \"K8Spin.cloud\"\npod/nginx created\n```\n\nDiscover workloads in the dev space as space viewer:\n\n```bash\n$ kubectl get pods -n org-example-tenant-crm-space-dev --as Pau\nNAME    READY   STATUS    RESTARTS   AGE\nnginx   1/1     Running   0          66s\n```\n\n## Documentation\n\nDiscover all the power of this operator [reading all the documentation](docs)\n\n## Contributing\n\nWe would love you to contribute to `@k8spin/k8spin-operator`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information.\n\n## Using k8spin at work or in production?\n\nSee [ADOPTERS.md](ADOPTERS.md) for what companies are doing with k8spin today.\n\n## License\n\nThe scripts and documentation in this project are released under the [GNU GPLv3](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8spin%2Fk8spin-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk8spin%2Fk8spin-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk8spin%2Fk8spin-operator/lists"}