kubes 0.4.7 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/README.md +54 -8
- data/docs/_docs/config/hooks/kubes.md +1 -0
- data/docs/_docs/config/reference.md +1 -0
- data/docs/_docs/config/skip.md +1 -1
- data/docs/_docs/dsl/multiple-resources.md +6 -4
- data/docs/_docs/dsl/resources/job.md +62 -0
- data/docs/_docs/dsl/resources/secret.md +19 -2
- data/docs/_docs/extra-env/dsl.md +2 -2
- data/docs/_docs/extra-env/yaml.md +1 -1
- data/docs/_docs/generators.md +41 -0
- data/docs/_docs/helpers.md +17 -3
- data/docs/_docs/helpers/aws/advanced.md +10 -0
- data/docs/_docs/helpers/aws/advanced/secrets.md +131 -0
- data/docs/_docs/helpers/aws/advanced/ssm.md +78 -0
- data/docs/_docs/helpers/aws/secrets.md +18 -88
- data/docs/_docs/helpers/aws/ssm.md +20 -38
- data/docs/_docs/helpers/google/advanced.md +10 -0
- data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
- data/docs/_docs/helpers/google/gke.md +33 -0
- data/docs/_docs/helpers/google/secrets.md +18 -27
- data/docs/_docs/helpers/google/service-account.md +8 -0
- data/docs/_docs/intro.md +2 -9
- data/docs/_docs/intro/docker-image.md +66 -0
- data/docs/_docs/intro/how-kubes-works.md +7 -11
- data/docs/_docs/layering.md +2 -0
- data/docs/_docs/layering/merge.md +1 -1
- data/docs/_docs/layering/mix.md +99 -0
- data/docs/_docs/learn/dsl/delete.md +10 -2
- data/docs/_docs/learn/dsl/review-project.md +2 -2
- data/docs/_docs/learn/yaml/delete.md +10 -2
- data/docs/_docs/learn/yaml/review-project.md +2 -2
- data/docs/_docs/patterns/clock-web-worker.md +3 -3
- data/docs/_docs/patterns/migrations.md +1 -1
- data/docs/_docs/patterns/multiple-envs.md +55 -0
- data/docs/_docs/variables.md +23 -0
- data/docs/_docs/variables/advanced.md +62 -0
- data/docs/_docs/variables/basic.md +137 -0
- data/docs/_docs/vs.md +10 -0
- data/docs/_docs/vs/custom.md +109 -0
- data/docs/_docs/vs/helm.md +243 -0
- data/docs/_docs/vs/kustomize.md +167 -0
- data/docs/_docs/yaml.md +2 -2
- data/docs/_includes/commands.html +2 -2
- data/docs/_includes/intro/features.md +11 -0
- data/docs/_includes/layering/layers.md +2 -4
- data/docs/_includes/sidebar.html +41 -0
- data/docs/_includes/vs/article.md +1 -0
- data/docs/_includes/vs/kubes/layering.md +10 -0
- data/docs/_includes/vs/kubes/structure.md +24 -0
- data/docs/_reference/kubes-delete.md +1 -1
- data/docs/_reference/kubes-exec.md +17 -1
- data/docs/_reference/kubes-init.md +2 -2
- data/docs/_reference/kubes-logs.md +2 -1
- data/docs/_reference/kubes-new-help.md +15 -0
- data/docs/_reference/kubes-new-helper.md +25 -0
- data/docs/_reference/kubes-new-resource.md +56 -0
- data/docs/_reference/kubes-new-variable.md +20 -0
- data/docs/_reference/kubes-new.md +26 -0
- data/docs/_reference/kubes-prune.md +22 -0
- data/docs/reference.md +2 -0
- data/kubes.gemspec +2 -2
- data/lib/kubes.rb +5 -3
- data/lib/kubes/auth.rb +4 -1
- data/lib/kubes/auth/base.rb +21 -0
- data/lib/kubes/auth/ecr.rb +1 -15
- data/lib/kubes/auth/gcr.rb +24 -0
- data/lib/kubes/cli.rb +9 -1
- data/lib/kubes/cli/apply.rb +0 -1
- data/lib/kubes/cli/build.rb +6 -0
- data/lib/kubes/cli/compile.rb +7 -0
- data/lib/kubes/cli/deploy.rb +1 -6
- data/lib/kubes/cli/exec.rb +5 -1
- data/lib/kubes/cli/help/exec.md +15 -0
- data/lib/kubes/cli/help/new/helper.md +4 -0
- data/lib/kubes/cli/help/new/resource.md +30 -0
- data/lib/kubes/cli/init.rb +1 -1
- data/lib/kubes/cli/new.rb +15 -0
- data/lib/kubes/cli/new/helper.rb +24 -0
- data/lib/kubes/cli/new/resource.rb +97 -0
- data/lib/kubes/cli/new/variable.rb +16 -0
- data/lib/kubes/cli/prune.rb +4 -2
- data/lib/kubes/cli/sequence.rb +1 -0
- data/lib/kubes/command.rb +7 -0
- data/lib/kubes/compiler.rb +19 -21
- data/lib/kubes/compiler/decorator/base.rb +1 -1
- data/lib/kubes/compiler/dsl/core/base.rb +6 -9
- data/lib/kubes/compiler/dsl/syntax/job.rb +217 -0
- data/lib/kubes/compiler/layering.rb +21 -7
- data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
- data/lib/kubes/compiler/shared/helpers.rb +11 -2
- data/lib/kubes/compiler/shared/helpers/deprecated.rb +37 -0
- data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
- data/lib/kubes/compiler/strategy.rb +7 -6
- data/lib/kubes/compiler/strategy/base.rb +59 -2
- data/lib/kubes/compiler/strategy/dsl.rb +0 -29
- data/lib/kubes/compiler/strategy/erb.rb +10 -22
- data/lib/kubes/compiler/util/normalize.rb +6 -3
- data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
- data/lib/kubes/config.rb +14 -1
- data/lib/kubes/core.rb +6 -0
- data/lib/kubes/docker/strategy/image_name.rb +1 -1
- data/lib/kubes/hooks/builder.rb +20 -4
- data/lib/kubes/hooks/concern.rb +1 -1
- data/lib/kubes/kubectl/batch.rb +7 -33
- data/lib/kubes/kubectl/ordering.rb +42 -0
- data/lib/kubes/plugin.rb +14 -0
- data/lib/kubes/util/sh.rb +1 -1
- data/lib/kubes/version.rb +1 -1
- data/lib/templates/base/.kubes/config.rb.tt +1 -1
- data/lib/templates/base/.kubes/config/env/dev.rb +1 -1
- data/lib/templates/base/.kubes/config/env/prod.rb +1 -1
- data/lib/templates/dsl/.kubes/resources/web/deployment.rb +1 -1
- data/lib/templates/new/helper/file.rb +2 -0
- data/lib/templates/new/resource/dsl/backend_config.rb +10 -0
- data/lib/templates/new/resource/dsl/config_map.rb +5 -0
- data/lib/templates/new/resource/dsl/daemon_set.rb +11 -0
- data/lib/templates/new/resource/dsl/deployment.rb +4 -0
- data/lib/templates/new/resource/dsl/ingress.rb +3 -0
- data/lib/templates/new/resource/dsl/job.rb +2 -0
- data/lib/templates/new/resource/dsl/managed_certificate.rb +2 -0
- data/lib/templates/new/resource/dsl/namespace.rb +2 -0
- data/lib/templates/new/resource/dsl/network_policy.rb +7 -0
- data/lib/templates/new/resource/dsl/pod.rb +6 -0
- data/lib/templates/new/resource/dsl/role.rb +4 -0
- data/lib/templates/new/resource/dsl/role_binding.rb +7 -0
- data/lib/templates/new/resource/dsl/secret.rb +5 -0
- data/lib/templates/new/resource/dsl/service.rb +2 -0
- data/lib/templates/new/resource/dsl/service_account.rb +1 -0
- data/lib/templates/new/resource/yaml/backend_config.yaml +10 -0
- data/lib/templates/new/resource/yaml/config_map.yaml +9 -0
- data/lib/templates/new/resource/yaml/daemon_set.yaml +11 -0
- data/lib/templates/new/resource/yaml/deployment.yaml +19 -0
- data/lib/templates/new/resource/yaml/ingress.yaml +12 -0
- data/lib/templates/new/resource/yaml/job.yaml +19 -0
- data/lib/templates/new/resource/yaml/managed_certificate.yaml +7 -0
- data/lib/templates/new/resource/yaml/namespace.yaml +6 -0
- data/lib/templates/new/resource/yaml/network_policy.yaml +20 -0
- data/lib/templates/new/resource/yaml/pod.yaml +11 -0
- data/lib/templates/new/resource/yaml/role.yaml +13 -0
- data/lib/templates/new/resource/yaml/role_binding.yaml +11 -0
- data/lib/templates/new/resource/yaml/secret.yaml +9 -0
- data/lib/templates/new/resource/yaml/service.yaml +14 -0
- data/lib/templates/new/resource/yaml/service_account.yaml +4 -0
- data/lib/templates/new/variable/file.rb +1 -0
- data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
- data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +1 -1
- data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
- data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
- data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
- data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
- data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
- data/spec/kubes/cli/prune_spec.rb +1 -0
- data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
- data/spec/kubes/compiler_spec.rb +6 -2
- data/spec/kubes/dsl/network_policy_spec.rb +1 -1
- data/spec/kubes/dsl/pod_spec.rb +1 -1
- metadata +98 -25
@@ -41,6 +41,8 @@ metadata:
|
|
41
41
|
|
42
42
|
The role permissions are currently always added to the existing permissions. So removing roles that were previously added does not remove them.
|
43
43
|
|
44
|
+
## Variables
|
45
|
+
|
44
46
|
ServiceAccount#initialize options:
|
45
47
|
|
46
48
|
Variable | Description | Default
|
@@ -50,3 +52,9 @@ gsa | The Google Service Account name. The conventional name is APP-ENV. IE: dem
|
|
50
52
|
ksa | The Kubernetes Service Account name. The conventional name is APP. IE: demo | APP
|
51
53
|
namespace | The Kubernetes namespace. Defaults to the APP-ENV. IE: demo-dev. | APP-ENV
|
52
54
|
roles | Google IAM roles to add. This adds permissions to the Google service account. | []
|
55
|
+
|
56
|
+
Relevant environment variables:
|
57
|
+
|
58
|
+
Name | Description
|
59
|
+
---|---
|
60
|
+
GOOGLE_PROJECT | Google project id. This is required as it's used to build the full service account name.
|
data/docs/_docs/intro.md
CHANGED
@@ -6,13 +6,6 @@ title: What is Kubes?
|
|
6
6
|
|
7
7
|
<div class="video-box"><div class="video-container"><iframe src="https://www.youtube.com/embed/M4zHL0mfKNU" frameborder="0" allowfullscreen=""></iframe></div></div>
|
8
8
|
|
9
|
-
## Features
|
9
|
+
## Features
|
10
10
|
|
11
|
-
|
12
|
-
* Syntactic Sugar: Use an [ERB/YAML]({% link _docs/yaml.md %}) or a [DSL]({% link _docs/dsl.md %}) to write your Kubernetes YAML files. You can use a mix of DSL and YAML definitions in the `.kubes/resources` folder.
|
13
|
-
* Layering: Use the same Kubernetes YAML to build multiple environments like dev and prod with [layering]({% link _docs/layering.md %}).
|
14
|
-
* CLI Customizations: You can customize the [cli args]({% link _docs/config/args/kubectl.md %}). You can also run [hooks]({% link _docs/config/hooks/kubectl.md %}) before and after kubectl commands.
|
15
|
-
* Automated Suffix Hashes: Automatically appends a suffix hash to ConfigMap and Secret resources. More details in [ConfigMap]({% link _docs/dsl/resources/config_map.md %}) and [Secret]({% link _docs/dsl/resources/secret.md %}) docs.
|
16
|
-
* Kustomize Support: If you’re a kustomization user, you can use it with Kubes. More details in [Kustomize Support Docs]({% link _docs/misc/kustomize.md %}).
|
17
|
-
* Auto Context Switching: Map dev to a specific kubectl context and prod to another kubectl context and Kubes can switch them automatically so you won't have to remember. More details in [Auto Context Docs]({% link _docs/misc/auto-context.md %}).
|
18
|
-
* Ordering: Kubes run kubectl apply to create resources in the [correct order]({% link _docs/intro/ordering.md %}). For deleting, it kubes will run `kubectl delete` in the correct reverse order. The order is also [customizable]({% link _docs/intro/ordering/custom.md %}).
|
11
|
+
{% include intro/features.md %}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
title: Docker Image
|
3
|
+
---
|
4
|
+
|
5
|
+
With Kubes, you can use the `docker_image` helper method to select which image to use. It can use images from these sources:
|
6
|
+
|
7
|
+
1. CLI Option: The `--image` option specified with the CLI command
|
8
|
+
2. Kubes Config: Specified by `config.image` in the `.kubes/config.rb`
|
9
|
+
3. Built Docker Image: The image built from Dockerfile
|
10
|
+
|
11
|
+
The CLI option has the highest precedence, and the Built Docker image has the lowest precedence.
|
12
|
+
|
13
|
+
## 1. CLI Option
|
14
|
+
|
15
|
+
Kubes uses the image from the `--image` option if specified. It's a quick way to override the Docker image used by Kubes. Example:
|
16
|
+
|
17
|
+
kubes deploy --image repo/image:tag
|
18
|
+
|
19
|
+
When the `--image` option is set, Kubes skips the Docker build phase.
|
20
|
+
|
21
|
+
## 2. Kubes Config
|
22
|
+
|
23
|
+
If you set the `config.image` in the Kubes config, Kubes will use this prebuilt Docker image instead. Example:
|
24
|
+
|
25
|
+
.kubes/config.rb:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
Kubes.configure do |config|
|
29
|
+
config.image = "nginx"
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
When `config.image` is set, Kubes skips the Docker build phase.
|
34
|
+
|
35
|
+
## 3. Built Docker Image
|
36
|
+
|
37
|
+
Kubes can use a Docker image built from your Dockerfile. This is the default behavior of Kubes, as long as the CLI Option and the Kubes Config option is not set.
|
38
|
+
|
39
|
+
## Template Example
|
40
|
+
|
41
|
+
Here's an example usage of the `docker_image` helper.
|
42
|
+
|
43
|
+
.kubes/resources/web/deployment.yaml
|
44
|
+
|
45
|
+
```yaml
|
46
|
+
apiVersion: apps/v1
|
47
|
+
kind: Deployment
|
48
|
+
metadata:
|
49
|
+
name: web
|
50
|
+
labels:
|
51
|
+
role: web
|
52
|
+
spec:
|
53
|
+
selector:
|
54
|
+
matchLabels:
|
55
|
+
role: web
|
56
|
+
template:
|
57
|
+
metadata:
|
58
|
+
labels:
|
59
|
+
role: web
|
60
|
+
spec:
|
61
|
+
containers:
|
62
|
+
- name: web
|
63
|
+
image: <%= docker_image %>
|
64
|
+
```
|
65
|
+
|
66
|
+
When running `kubes deploy`, Kubes will replace `<%= docker_image %>` with the Docker image from one of the sources described above.
|
@@ -10,20 +10,16 @@ In fact, you can use Kubes to build the files first, and then run `kubectl` dire
|
|
10
10
|
kubes docker push
|
11
11
|
kubes compile # compiles the .kubes/resources files to .kubes/output
|
12
12
|
|
13
|
-
Now, use `kubectl` directly
|
13
|
+
Now, use `kubectl` directly and apply them in the proper order:
|
14
14
|
|
15
|
-
kubectl apply
|
16
|
-
|
17
|
-
You can also selectively apply specific files:
|
18
|
-
|
19
|
-
kubectl apply -f .kubes/output/web/deployment.yaml
|
15
|
+
kubectl apply -f .kubes/output/shared/namespace.yaml
|
20
16
|
kubectl apply -f .kubes/output/web/service.yaml
|
17
|
+
kubectl apply -f .kubes/output/web/deployment.yaml
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
kubes apply
|
25
|
-
|
26
|
-
The deploy command, does all 3 steps: builds the docker image, compiles the `.kubes/resources` files, and runs kubectl apply.
|
19
|
+
The deploy command simpifily does all 3 steps: build, compile, and apply.
|
27
20
|
|
28
21
|
kubes deploy
|
29
22
|
|
23
|
+
You can also run the `kubectl apply` only. The `kube apply` command compiles but will skip the docker build stage if it's already been built.
|
24
|
+
|
25
|
+
kubes apply
|
data/docs/_docs/layering.md
CHANGED
@@ -6,3 +6,5 @@ Kubes supports layering files together so you can use the same Kubernetes files
|
|
6
6
|
|
7
7
|
* [YAML Layering]({% link _docs/layering/yaml.md %})
|
8
8
|
* [DSL Layering]({% link _docs/layering/dsl.md %})
|
9
|
+
* [Mix Layering]({% link _docs/layering/mix.md %})
|
10
|
+
* [Merge Behavior]({% link _docs/layering/merge.md %})
|
@@ -67,7 +67,7 @@ The merging of simple String is a straightforward replacement.
|
|
67
67
|
.kubes/resources/web/deployment.rb
|
68
68
|
|
69
69
|
```ruby
|
70
|
-
image
|
70
|
+
image docker_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
|
71
71
|
# ...
|
72
72
|
```
|
73
73
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
---
|
2
|
+
title: Mixed Layering
|
3
|
+
---
|
4
|
+
|
5
|
+
You can mix and match the YAML and DSL forms together and layering still works.
|
6
|
+
|
7
|
+
## Project Structure
|
8
|
+
|
9
|
+
Here's an example structure, so we can understand how layering works.
|
10
|
+
|
11
|
+
.kubes/resources/
|
12
|
+
├── base
|
13
|
+
│ ├── all.yaml
|
14
|
+
│ └── deployment.yaml
|
15
|
+
└── web
|
16
|
+
├── deployment
|
17
|
+
│ ├── dev.yaml
|
18
|
+
│ └── prod.yaml
|
19
|
+
├── deployment.rb
|
20
|
+
└── service.yaml
|
21
|
+
|
22
|
+
Notice, how deployment.rb is defined as a DSL. The layers will still be merged like so:
|
23
|
+
|
24
|
+
.kubes/resources/base/all.yaml
|
25
|
+
.kubes/resources/base/deployment.yaml
|
26
|
+
.kubes/resources/web/deployment.rb
|
27
|
+
.kubes/resources/web/deployment/dev.rb
|
28
|
+
|
29
|
+
## Resources Files
|
30
|
+
|
31
|
+
.kubes/resources/base/all.yaml
|
32
|
+
|
33
|
+
```yaml
|
34
|
+
metadata:
|
35
|
+
namespace: demo-<%= Kubes.env %>
|
36
|
+
labels:
|
37
|
+
app: demo
|
38
|
+
```
|
39
|
+
|
40
|
+
.kubes/resources/base/deployment.yaml
|
41
|
+
|
42
|
+
```yaml
|
43
|
+
metadata:
|
44
|
+
labels:
|
45
|
+
app: demo
|
46
|
+
spec:
|
47
|
+
selector:
|
48
|
+
matchLabels:
|
49
|
+
app: demo
|
50
|
+
template:
|
51
|
+
metadata:
|
52
|
+
labels:
|
53
|
+
app: demo
|
54
|
+
```
|
55
|
+
|
56
|
+
.kubes/resources/web/deployment.rb
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
name "web"
|
60
|
+
labels(role: "web")
|
61
|
+
image "nginx"
|
62
|
+
```
|
63
|
+
|
64
|
+
.kubes/resources/web/deployment/dev.yaml
|
65
|
+
|
66
|
+
```yaml
|
67
|
+
spec:
|
68
|
+
replicas: 2
|
69
|
+
```
|
70
|
+
|
71
|
+
## Output
|
72
|
+
|
73
|
+
The result is the merged layered files.
|
74
|
+
|
75
|
+
```yaml
|
76
|
+
metadata:
|
77
|
+
namespace: demo-dev
|
78
|
+
labels:
|
79
|
+
app: demo
|
80
|
+
role: web
|
81
|
+
name: web
|
82
|
+
spec:
|
83
|
+
selector:
|
84
|
+
matchLabels:
|
85
|
+
app: demo
|
86
|
+
role: web
|
87
|
+
template:
|
88
|
+
metadata:
|
89
|
+
labels:
|
90
|
+
app: demo
|
91
|
+
role: web
|
92
|
+
spec:
|
93
|
+
containers:
|
94
|
+
- image: nginx
|
95
|
+
name: web
|
96
|
+
replicas: 2
|
97
|
+
apiVersion: apps/v1
|
98
|
+
kind: Deployment
|
99
|
+
```
|
@@ -6,11 +6,19 @@ Let's now delete the app and clean up:
|
|
6
6
|
|
7
7
|
kubes delete
|
8
8
|
|
9
|
-
You will be prompted to confirm before deletion.
|
9
|
+
You will be prompted to confirm before deletion.
|
10
10
|
|
11
11
|
$ kubes delete
|
12
|
+
Compiled .kubes/resources files to .kubes/output
|
13
|
+
Will run:
|
14
|
+
kubectl delete -f .kubes/output/web/deployment.yaml
|
15
|
+
kubectl delete -f .kubes/output/web/service.yaml
|
16
|
+
kubectl delete -f .kubes/output/shared/namespace.yaml
|
17
|
+
This will delete resources. Are you sure? (y/N)
|
18
|
+
|
19
|
+
Confirm to delete the resources:
|
20
|
+
|
12
21
|
This will delete resources. Are you sure? (y/N) y
|
13
|
-
Compiled .kubes/resources files
|
14
22
|
=> kubectl delete -f .kubes/output/web/service.yaml
|
15
23
|
service "demo-web" deleted
|
16
24
|
=> kubectl delete -f .kubes/output/web/deployment.yaml
|
@@ -29,10 +29,10 @@ labels(role: "web")
|
|
29
29
|
namespace "default"
|
30
30
|
|
31
31
|
replicas 1
|
32
|
-
image
|
32
|
+
image docker_image # IE: user/demo:kubes-2020-06-13T19-55-16-43afc6e
|
33
33
|
```
|
34
34
|
|
35
|
-
The DSL form is more concise than the YAML form. Also, notice the use of the `
|
35
|
+
The DSL form is more concise than the YAML form. Also, notice the use of the `docker_image` helper. The `docker_image` is a kubes helper method that refers to the latest Docker image built. This spares you from updating the image manually.
|
36
36
|
|
37
37
|
## Base Folder
|
38
38
|
|
@@ -6,11 +6,19 @@ Let's now delete the app and clean up:
|
|
6
6
|
|
7
7
|
kubes delete
|
8
8
|
|
9
|
-
You will be prompted to confirm before deletion.
|
9
|
+
You will be prompted to confirm before deletion.
|
10
10
|
|
11
11
|
$ kubes delete
|
12
|
+
Compiled .kubes/resources files to .kubes/output
|
13
|
+
Will run:
|
14
|
+
kubectl delete -f .kubes/output/web/deployment.yaml
|
15
|
+
kubectl delete -f .kubes/output/web/service.yaml
|
16
|
+
kubectl delete -f .kubes/output/shared/namespace.yaml
|
17
|
+
This will delete resources. Are you sure? (y/N)
|
18
|
+
|
19
|
+
Confirm to delete the resources:
|
20
|
+
|
12
21
|
This will delete resources. Are you sure? (y/N) y
|
13
|
-
Compiled .kubes/resources files
|
14
22
|
=> kubectl delete -f .kubes/output/web/service.yaml
|
15
23
|
service "demo-web" deleted
|
16
24
|
=> kubectl delete -f .kubes/output/web/deployment.yaml
|
@@ -46,10 +46,10 @@ spec:
|
|
46
46
|
spec:
|
47
47
|
containers:
|
48
48
|
- name: web
|
49
|
-
image: <%=
|
49
|
+
image: <%= docker_image %>
|
50
50
|
```
|
51
51
|
|
52
|
-
Notice the `<%=
|
52
|
+
Notice the `<%= docker_image %>`. Kubes processes the YAML files with ERB templating and replaces these tags. The `docker_image` is a kubes helper method that refers to the latest Docker image built by Kubes. This spares you updating the image manually.
|
53
53
|
|
54
54
|
## Base Folder
|
55
55
|
|
@@ -31,7 +31,7 @@ namespace "default"
|
|
31
31
|
labels(role: "web")
|
32
32
|
|
33
33
|
replicas 1
|
34
|
-
image
|
34
|
+
image docker_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
35
35
|
command "bin/clock"
|
36
36
|
```
|
37
37
|
|
@@ -43,7 +43,7 @@ namespace "default"
|
|
43
43
|
labels(role: "web")
|
44
44
|
|
45
45
|
replicas 1
|
46
|
-
image
|
46
|
+
image docker_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
47
47
|
```
|
48
48
|
|
49
49
|
.kubes/resources/demo-worker/deployment.rb
|
@@ -54,7 +54,7 @@ namespace "default"
|
|
54
54
|
labels(role: "web")
|
55
55
|
|
56
56
|
replicas 2
|
57
|
-
image
|
57
|
+
image docker_image # IE: user/demo-clock:kubes-2020-06-13T19-55-16-43afc6e
|
58
58
|
command "bin/worker"
|
59
59
|
```
|
60
60
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
---
|
2
|
+
title: Multiple Enviroments with Layering
|
3
|
+
nav_text: Multiple Enviroments
|
4
|
+
categories: patterns
|
5
|
+
---
|
6
|
+
|
7
|
+
You can use Kubes to easily create multiple enviroments with the same YAML configs. This is thanks to [Kubes Layering]({% link _docs/layering.md %}). We'll walk through an example to help understand how it works.
|
8
|
+
|
9
|
+
## Creating Multiple Enviroments
|
10
|
+
|
11
|
+
To create multiple enviroments like dev and prod just change KUBES_ENV. Example:
|
12
|
+
|
13
|
+
KUBES_ENV=dev kubes deploy
|
14
|
+
KUBES_ENV=prod kubes deploy
|
15
|
+
|
16
|
+
Different env files will be layered and merged to produce YAML files specific to each environment.
|
17
|
+
|
18
|
+
## Project Structure
|
19
|
+
|
20
|
+
Here's an example structure, so we can understand how layering works to create multiple enviroments.
|
21
|
+
|
22
|
+
.kubes/resources/
|
23
|
+
├── base
|
24
|
+
│ ├── all.yaml
|
25
|
+
│ └── deployment.yaml
|
26
|
+
└── web
|
27
|
+
├── deployment
|
28
|
+
│ ├── dev.yaml
|
29
|
+
│ └── prod.yaml
|
30
|
+
├── deployment.yaml
|
31
|
+
└── service.yaml
|
32
|
+
|
33
|
+
## Concrete Example
|
34
|
+
|
35
|
+
Let's look at a concrete web/deployment.yaml.
|
36
|
+
|
37
|
+
Here are the files that get layered when `KUBES_ENV=dev`:
|
38
|
+
|
39
|
+
.kubes/resources/base/all.yaml
|
40
|
+
.kubes/resources/base/deployment.yaml
|
41
|
+
.kubes/resources/web/deployment.yaml
|
42
|
+
.kubes/resources/web/deployment/dev.yaml
|
43
|
+
|
44
|
+
And when `KUBES_ENV=prod`:
|
45
|
+
|
46
|
+
.kubes/resources/base/all.yaml
|
47
|
+
.kubes/resources/base/deployment.yaml
|
48
|
+
.kubes/resources/web/deployment.yaml
|
49
|
+
.kubes/resources/web/deployment/prod.yaml
|
50
|
+
|
51
|
+
Layering allows us to have common settings that are processed before your main `.kubes/resources/web/deployment.yaml` YAML manifest. And then add **environment** specific YAML files that get merged.
|
52
|
+
|
53
|
+
## Variables and Helpers
|
54
|
+
|
55
|
+
Additional, you can use variables and helpers to provide environment specific values.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
title: Variables
|
3
|
+
---
|
4
|
+
|
5
|
+
You can set variables to be made available to the templates. Generally, it is recommended to use Basic layering.
|
6
|
+
|
7
|
+
{% assign docs = site.docs | where: "categories","variables" %}
|
8
|
+
{% for doc in docs -%}
|
9
|
+
* [{{ doc.title }}]({{ doc.url }})
|
10
|
+
{% endfor %}
|
11
|
+
|
12
|
+
## Generator
|
13
|
+
|
14
|
+
To help you get started quickly, you can generate starter variable code.
|
15
|
+
|
16
|
+
$ kubes new variable
|
17
|
+
create .kubes/variables/dev.rb
|
18
|
+
|
19
|
+
.kubes/variables/dev.rb
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
@example = "dev-value"
|
23
|
+
```
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
title: Advanced Variables
|
3
|
+
nav_text: Advanced
|
4
|
+
categories: variables
|
5
|
+
---
|
6
|
+
|
7
|
+
Basic variables layering should provides enough flexibility and is generally recommended. This page covers more advanced variables layering.
|
8
|
+
|
9
|
+
## Advanced Layering Example
|
10
|
+
|
11
|
+
Here's a more complex structure to demonstrate advanced layering.
|
12
|
+
|
13
|
+
.kubes/variables
|
14
|
+
├── base
|
15
|
+
│ └── deployment.rb
|
16
|
+
├── base.rb
|
17
|
+
├── dev.rb
|
18
|
+
├── prod.rb
|
19
|
+
└── web
|
20
|
+
├── deployment
|
21
|
+
│ ├── dev.rb
|
22
|
+
│ └── prod.rb
|
23
|
+
└── deployment.rb
|
24
|
+
|
25
|
+
## Concrete Example
|
26
|
+
|
27
|
+
Let's look at a concrete web/deployment.yaml.
|
28
|
+
|
29
|
+
Here are the files that get layered when `KUBES_ENV=dev`:
|
30
|
+
|
31
|
+
.kubes/variables/base.rb
|
32
|
+
.kubes/variables/dev.rb
|
33
|
+
.kubes/variables/base/deployment.rb
|
34
|
+
.kubes/variables/web/deployment.rb
|
35
|
+
.kubes/variables/web/deployment/dev.rb
|
36
|
+
|
37
|
+
And when `KUBES_ENV=prod`:
|
38
|
+
|
39
|
+
.kubes/variables/base.rb
|
40
|
+
.kubes/variables/prod.rb
|
41
|
+
.kubes/variables/base/deployment.rb
|
42
|
+
.kubes/variables/web/deployment.rb
|
43
|
+
.kubes/variables/web/deployment/prod.rb
|
44
|
+
|
45
|
+
With advanced layering you can target a specific role and kind. So variables are only scoped to the resources you want.
|
46
|
+
|
47
|
+
## Full Layering Table
|
48
|
+
|
49
|
+
Here's a table showing the the full layering.
|
50
|
+
|
51
|
+
Folder/Pattern | Example
|
52
|
+
------------------|--------------------------------------------
|
53
|
+
base.rb | base.rb
|
54
|
+
ENV.rb | dev.rb
|
55
|
+
base/all.rb | base/all.rb
|
56
|
+
base/all/ENV.rb | base/all/dev.rb
|
57
|
+
base/KIND.rb | base/deployment.rb
|
58
|
+
base/KIND/base.rb | base/deployment/base.rb
|
59
|
+
base/KIND/ENV.rb | base/deployment/dev.rb
|
60
|
+
ROLE/KIND.rb | web/deployment.rb
|
61
|
+
ROLE/KIND/base.rb | web/deployment/base.rb
|
62
|
+
ROLE/KIND/ENV.rb | web/deployment/dev.rb
|