72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
---
 | 
						|
stage: Configure
 | 
						|
group: Configure
 | 
						|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
 | 
						|
---
 | 
						|
 | 
						|
# Multiple Kubernetes clusters for a single project
 | 
						|
 | 
						|
> - Introduced in [GitLab Premium](https://about.gitlab.com/pricing/) 10.3
 | 
						|
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35094) to GitLab Free in 13.2.
 | 
						|
 | 
						|
You can associate more than one Kubernetes cluster to your
 | 
						|
project. That way you can have different clusters for different environments,
 | 
						|
like development, staging, production, and so on.
 | 
						|
Add another cluster, like you did the first time, and make sure to
 | 
						|
[set an environment scope](#setting-the-environment-scope) that
 | 
						|
differentiates the new cluster from the rest.
 | 
						|
 | 
						|
## Setting the environment scope
 | 
						|
 | 
						|
When adding more than one Kubernetes cluster to your project, you need to differentiate
 | 
						|
them with an environment scope. The environment scope associates clusters with [environments](../../../ci/environments/index.md) similar to how the
 | 
						|
[environment-specific CI/CD variables](../../../ci/variables/index.md#limit-the-environment-scope-of-a-cicd-variable) work.
 | 
						|
 | 
						|
The default environment scope is `*`, which means all jobs, regardless of their
 | 
						|
environment, use that cluster. Each scope can be used only by a single cluster
 | 
						|
in a project, and a validation error occurs if otherwise. Also, jobs that don't
 | 
						|
have an environment keyword set can't access any cluster.
 | 
						|
 | 
						|
For example, let's say the following Kubernetes clusters exist in a project:
 | 
						|
 | 
						|
| Cluster     | Environment scope |
 | 
						|
| ----------- | ----------------- |
 | 
						|
| Development | `*`               |
 | 
						|
| Production  | `production`      |
 | 
						|
 | 
						|
And the following environments are set in
 | 
						|
[`.gitlab-ci.yml`](../../../ci/yaml/index.md):
 | 
						|
 | 
						|
```yaml
 | 
						|
stages:
 | 
						|
  - test
 | 
						|
  - deploy
 | 
						|
 | 
						|
test:
 | 
						|
  stage: test
 | 
						|
  script: sh test
 | 
						|
 | 
						|
deploy to staging:
 | 
						|
  stage: deploy
 | 
						|
  script: make deploy
 | 
						|
  environment:
 | 
						|
    name: staging
 | 
						|
    url: https://staging.example.com/
 | 
						|
 | 
						|
deploy to production:
 | 
						|
  stage: deploy
 | 
						|
  script: make deploy
 | 
						|
  environment:
 | 
						|
    name: production
 | 
						|
    url: https://example.com/
 | 
						|
```
 | 
						|
 | 
						|
The results:
 | 
						|
 | 
						|
- The Development cluster details are available in the `deploy to staging`
 | 
						|
  job.
 | 
						|
- The production cluster details are available in the `deploy to production`
 | 
						|
  job.
 | 
						|
- No cluster details are available in the `test` job because it doesn't
 | 
						|
  define any environment.
 |