---
title: Using Tanzu Build Service with Projects
owner: Build Service Team
---
[Projects Operator for Kubernetes] (Need a link) is a separate open source project from VMWare that works with Tanzu Build Service.
A `project` is a resource that simplifies kubernetes namespaces and RBAC to provide multi-tenancy for images, secrets, and builders.
The following procedures describe how to manage projects and project members with Build Service.
## <a id='projects-operator-installation'></a> Installing Projects Operator for Kubernetes
Tanzu Build Service installs a ClusterRole on the cluster named `build-service-user-role`. To allow Projects Operator to integrate with Build Service,
provide the ClusterRole `build-service-user-role` as the `CLUSTER_ROLE_REF` to use during Projects Operator installation.
## <a id='create-project'></a> Creating a Project
To create a new project:
kubectl create -f PROJECT-YAML
Where `PROJECT-YAML` is a YAML file of the form:
```
apiVersion: projects.vmware.com/v1alpha1
kind: Project
metadata:
name: my-project
spec:
access:
- kind: User
name: user-1@company.org
- kind: User
name: user-2@company.org
- kind: Group
name: group-1@company.org
- kind: User
name: oidc:oidc-backed-user
```
* `name`: The name of the project and the corresponding namespace.
* `access`: A list of subjects to grant access to.
* `access.[kind]`: The kind of the subject, either `User` or `Group`.
* `name`: The name the subject.
<p class='note'><strong>Note:</strong> If you are utilizing oidc for identity, names may need to be prefixed with the oidc prefix.</p>
To grant the current user sole ownership of the project, create a project with an empty access list.
For example:
```
apiVersion: projects.vmware.com/v1alpha1
kind: Project
metadata:
name: my-project
spec:
access: []
```
## <a id='lizt-projects'></a> Listing Projects
To view projects of which the user is a member:
kubectl create -f PROJECT-LIST-YAML
Where `PROJECT-LIST-YAML` is a YAML file of the form:
```
apiVersion: projects.vmware.com/v1alpha1
kind: ProjectAccess
metadata:
name: access-query
```
Get the status of the `ProjectAccess` resource to determine your available projects.
kubectl get projectaccess access-query -o yaml
Be sure to delete the resource after checking the status.
kubectl delete projectaccess access-query
## <a id='using-projects'></a> Using Projects
Projects will generate namespaces with an identical name and the appropriate RBAC policies.
Therefore, you can use projects by targeting the corresponding namespace.
<p class='note'><strong>Note:</strong> because Projects map to Kubernetes namespaces, you should not create projects with the same name as pre-existing Kubernetes namespaces.
## <a id='manage-project-members'></a> Adding and Removing Project Members
Any member of a project can add and remove other project members. Simply modify the project spec via `kubectl edit`, `kubectl update`, `kubectl patch`, or `kubectl apply`.
### <a id='list-members'></a> Listing Members of a Project
To list members of a project, simply get the status of the project resource.
kubectl get project my-project -o yaml
## <a id='delete-project'></a> Deleting a Project
To delete a project:
kubectl delete project my-project
Deleting a project will clean up and delete the corresponding namespace.