kubes 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +52 -0
  4. data/docs/_docs/dsl/resources/secret.md +19 -2
  5. data/docs/_docs/generators.md +4 -4
  6. data/docs/_docs/helpers/aws/advanced/secrets.md +131 -0
  7. data/docs/_docs/helpers/aws/advanced/ssm.md +78 -0
  8. data/docs/_docs/helpers/aws/advanced.md +10 -0
  9. data/docs/_docs/helpers/aws/secrets.md +18 -88
  10. data/docs/_docs/helpers/aws/ssm.md +20 -38
  11. data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
  12. data/docs/_docs/helpers/google/advanced.md +10 -0
  13. data/docs/_docs/helpers/google/secrets.md +18 -27
  14. data/docs/_docs/helpers.md +16 -2
  15. data/docs/_docs/intro.md +2 -11
  16. data/docs/_docs/layering/mix.md +99 -0
  17. data/docs/_docs/layering.md +2 -0
  18. data/docs/_docs/patterns/multiple-envs.md +55 -0
  19. data/docs/_docs/variables/advanced.md +62 -0
  20. data/docs/_docs/variables/basic.md +137 -0
  21. data/docs/_docs/variables.md +23 -0
  22. data/docs/_docs/vs/custom.md +109 -0
  23. data/docs/_docs/vs/helm.md +243 -0
  24. data/docs/_docs/vs/kustomize.md +167 -0
  25. data/docs/_docs/vs.md +10 -0
  26. data/docs/_includes/intro/features.md +10 -0
  27. data/docs/_includes/layering/layers.md +2 -4
  28. data/docs/_includes/sidebar.html +39 -0
  29. data/docs/_includes/vs/article.md +1 -0
  30. data/docs/_includes/vs/kubes/layering.md +10 -0
  31. data/docs/_includes/vs/kubes/structure.md +24 -0
  32. data/docs/_reference/kubes-new-help.md +15 -0
  33. data/docs/_reference/kubes-new-helper.md +25 -0
  34. data/docs/_reference/kubes-new-resource.md +56 -0
  35. data/docs/_reference/kubes-new-variable.md +20 -0
  36. data/docs/_reference/kubes-new.md +6 -38
  37. data/kubes.gemspec +2 -2
  38. data/lib/kubes/auth/base.rb +21 -0
  39. data/lib/kubes/auth/ecr.rb +1 -15
  40. data/lib/kubes/auth/gcr.rb +24 -0
  41. data/lib/kubes/auth.rb +4 -1
  42. data/lib/kubes/cli/help/new/helper.md +4 -0
  43. data/lib/kubes/cli/help/{new.md → new/resource.md} +3 -3
  44. data/lib/kubes/cli/new/helper.rb +24 -0
  45. data/lib/kubes/cli/new/resource.rb +97 -0
  46. data/lib/kubes/cli/new/variable.rb +16 -0
  47. data/lib/kubes/cli/new.rb +12 -94
  48. data/lib/kubes/command.rb +1 -1
  49. data/lib/kubes/compiler/decorator/base.rb +1 -1
  50. data/lib/kubes/compiler/dsl/core/base.rb +6 -9
  51. data/lib/kubes/compiler/layering.rb +21 -7
  52. data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
  53. data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
  54. data/lib/kubes/compiler/strategy/base.rb +59 -2
  55. data/lib/kubes/compiler/strategy/dsl.rb +0 -29
  56. data/lib/kubes/compiler/strategy/erb.rb +10 -22
  57. data/lib/kubes/compiler/strategy.rb +7 -6
  58. data/lib/kubes/compiler/util/normalize.rb +6 -3
  59. data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
  60. data/lib/kubes/plugin.rb +14 -0
  61. data/lib/kubes/util/sh.rb +1 -1
  62. data/lib/kubes/version.rb +1 -1
  63. data/lib/kubes.rb +4 -3
  64. data/lib/templates/new/helper/file.rb +2 -0
  65. data/lib/templates/new/{dsl → resource/dsl}/backend_config.rb +0 -0
  66. data/lib/templates/new/{dsl → resource/dsl}/config_map.rb +0 -0
  67. data/lib/templates/new/{dsl → resource/dsl}/daemon_set.rb +0 -0
  68. data/lib/templates/new/{dsl → resource/dsl}/deployment.rb +0 -0
  69. data/lib/templates/new/{dsl → resource/dsl}/ingress.rb +0 -0
  70. data/lib/templates/new/{dsl → resource/dsl}/job.rb +0 -0
  71. data/lib/templates/new/{dsl → resource/dsl}/managed_certificate.rb +0 -0
  72. data/lib/templates/new/{dsl → resource/dsl}/namespace.rb +0 -0
  73. data/lib/templates/new/{dsl → resource/dsl}/network_policy.rb +0 -0
  74. data/lib/templates/new/{dsl → resource/dsl}/pod.rb +0 -0
  75. data/lib/templates/new/{dsl → resource/dsl}/role.rb +0 -0
  76. data/lib/templates/new/{dsl → resource/dsl}/role_binding.rb +0 -0
  77. data/lib/templates/new/{dsl → resource/dsl}/secret.rb +0 -0
  78. data/lib/templates/new/{dsl → resource/dsl}/service.rb +0 -0
  79. data/lib/templates/new/{dsl → resource/dsl}/service_account.rb +0 -0
  80. data/lib/templates/new/{yaml → resource/yaml}/backend_config.yaml +0 -0
  81. data/lib/templates/new/{yaml → resource/yaml}/config_map.yaml +0 -0
  82. data/lib/templates/new/{yaml → resource/yaml}/daemon_set.yaml +0 -0
  83. data/lib/templates/new/{yaml → resource/yaml}/deployment.yaml +0 -0
  84. data/lib/templates/new/{yaml → resource/yaml}/ingress.yaml +0 -0
  85. data/lib/templates/new/{yaml → resource/yaml}/job.yaml +0 -0
  86. data/lib/templates/new/{yaml → resource/yaml}/managed_certificate.yaml +0 -0
  87. data/lib/templates/new/{yaml → resource/yaml}/namespace.yaml +0 -0
  88. data/lib/templates/new/{yaml → resource/yaml}/network_policy.yaml +0 -0
  89. data/lib/templates/new/{yaml → resource/yaml}/pod.yaml +0 -0
  90. data/lib/templates/new/{yaml → resource/yaml}/role.yaml +0 -0
  91. data/lib/templates/new/{yaml → resource/yaml}/role_binding.yaml +0 -0
  92. data/lib/templates/new/{yaml → resource/yaml}/secret.yaml +0 -0
  93. data/lib/templates/new/{yaml → resource/yaml}/service.yaml +0 -0
  94. data/lib/templates/new/{yaml → resource/yaml}/service_account.yaml +0 -0
  95. data/lib/templates/new/variable/file.rb +1 -0
  96. data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
  97. data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
  98. data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
  99. data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
  100. data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
  101. data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
  102. data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
  103. data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
  104. data/spec/kubes/compiler_spec.rb +1 -1
  105. data/spec/kubes/dsl/network_policy_spec.rb +1 -1
  106. data/spec/kubes/dsl/pod_spec.rb +1 -1
  107. metadata +81 -48
@@ -0,0 +1,243 @@
1
+ ---
2
+ title: Kubes vs Helm
3
+ nav_text: Helm
4
+ categories: vs
5
+ ---
6
+
7
+ Though both Kubes and Helm can be used to deploy applications to Kubernetes, they work quite differently. Kubernetes is more focused on deploying your application. Helm is more like a package manager.
8
+
9
+ {% include vs/article.md %}
10
+
11
+ ## Project Structures
12
+
13
+ ### Helm Project Structure
14
+
15
+ Here's an example of Helm project structure:
16
+
17
+ ├── Chart.yaml
18
+ ├── templates
19
+ │ ├── _helpers.tpl
20
+ │ ├── deployment.yaml
21
+ │ └── service.yaml
22
+ └── values.yaml
23
+
24
+ The Kubernetes YAML files reside in the templates folder. The `values.yaml` contains the default configuration values for the YAML files.
25
+
26
+ {% include vs/kubes/structure.md %}
27
+
28
+ ## Multiple Environments: Variables vs Layering
29
+
30
+ Both Helm and Kubes allow you to use the same code to create multiple environments. They take different approaches, though.
31
+
32
+ ### Helm Variables
33
+
34
+ Helm supports creating multiple environments like dev and prod by using different variables files. Here are example commands:
35
+
36
+ helm install chart-dev . --namespace chart-dev --create-namespace -f values/dev.yaml
37
+ helm install chart-prod . --namespace chart-prod --create-namespace -f values/prod.yaml
38
+
39
+ To create different environments in different namespaces with helm, you use the namespace CLI options. Helm creates the namespace outside of YAML, so it's lifecycle is not managed. The `--create-namespace` option is only necessary once. To use different variable values, you use the `-f` option. You can specify as many variables files as you wish.
40
+
41
+ The commands can become verbose, as you have to remember to type the CLI options.
42
+
43
+ {% include vs/kubes/layering.md %}
44
+
45
+ ## Templating Support
46
+
47
+ Both Helm and Kubes support templating logic.
48
+
49
+ ### Helm Templating
50
+
51
+ The templating language is a mixture of the [Go template language](https://godoc.org/text/template) and the [Sprig template library](https://masterminds.github.io/sprig/). Here's an example of Helm templating.
52
+
53
+ templates/deployment.yaml
54
+
55
+ ```yaml
56
+ {% raw %}apiVersion: apps/v1
57
+ kind: Deployment
58
+ metadata:
59
+ name: {{ include "mychart.fullname" . }}
60
+ labels:
61
+ {{- include "mychart.labels" . | nindent 4 }}
62
+ spec:
63
+ {{- if not .Values.autoscaling.enabled }}
64
+ replicas: {{ .Values.replicaCount }}
65
+ {{- end }}
66
+ selector:
67
+ matchLabels:
68
+ {{- include "mychart.selectorLabels" . | nindent 6 }}
69
+ template:
70
+ metadata:
71
+ {{- with .Values.podAnnotations }}
72
+ annotations:
73
+ {{- toYaml . | nindent 8 }}
74
+ {{- end }}
75
+ labels:
76
+ {{- include "mychart.selectorLabels" . | nindent 8 }}
77
+ spec:
78
+ containers:
79
+ - name: {{ .Chart.Name }}
80
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
81
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
82
+ ports:
83
+ - name: http
84
+ containerPort: 80
85
+ protocol: TCP{% endraw %}
86
+ ```
87
+
88
+ ### Kubes Templating
89
+
90
+ Kubes uses ERB Ruby for templating. Here's an example.
91
+
92
+ .kubes/resources/web/deployment.yaml
93
+
94
+ ```yaml
95
+ apiVersion: apps/v1
96
+ kind: Deployment
97
+ metadata:
98
+ name: web
99
+ labels:
100
+ role: web
101
+ spec:
102
+ replicas: 1 # overridden on a env basis
103
+ selector:
104
+ matchLabels:
105
+ role: web
106
+ template:
107
+ metadata:
108
+ labels:
109
+ role: web
110
+ spec:
111
+ containers:
112
+ - name: web
113
+ image: <%= docker_image %>
114
+ ```
115
+
116
+ The `docker_image` method is a built-in helper. It returns the Docker image built from your Dockerfile or a configured pre-built image. See: [Docker Image Docs]({% link _docs/intro/docker-image.md %}).
117
+
118
+ One of the reasons why the Kubes YAML template is more straightforward is because Kubes also supports layering. So logic can be moved to different layered YAML files that get merged.
119
+
120
+ ## Define Custom Helpers
121
+
122
+ Both Helm and Kubes support custom user-defined helpers. We'll take a look at examples from each tool.
123
+
124
+ ### Helm Helpers
125
+
126
+ With Helm, you can define custom helpers in `templates/_helpers.tpl`. Example:
127
+
128
+ templates/_helpers.tpl
129
+
130
+ ```go{% raw %}
131
+ {{- define "demo.serviceAccountName" -}}
132
+ {{- if .Values.serviceAccount.create }}
133
+ {{- default (include "demo.fullname" .) .Values.serviceAccount.name }}
134
+ {{- else }}
135
+ {{- default "default" .Values.serviceAccount.name }}
136
+ {{- end }}
137
+ {{- end }}{% endraw %}
138
+ ```
139
+
140
+ The helper methods need to be defined in the go-lang templating language, hence the need for curly brackets.
141
+
142
+ ### Kubes Helpers
143
+
144
+ With Kubes, to define template helper methods, it's just Ruby code. Example:
145
+
146
+ .kubes/helpers/my_helpers.rb
147
+
148
+ ```ruby
149
+ module MyHelpers
150
+ def database_endpoint
151
+ case Kubes.env
152
+ when "dev"
153
+ "dev-db.cbuqdmc3nqvb.us-west-2.rds.amazonaws.com"
154
+ when "prod"
155
+ "prod-db.cbuqdmc3nqvb.us-west-2.rds.amazonaws.com"
156
+ end
157
+ end
158
+ end
159
+ ```
160
+
161
+ The custom helper definitions are a lot more natural.
162
+
163
+ ## Custom Hooks
164
+
165
+ Both Helm and Kubes support hooks. This allows you to hook into the deploy lifecycle and add your own custom business logic.
166
+
167
+ Helm supports a wide variety of hooks for the install, delete, upgrade, and rollback. The hooks run at the helm-level.
168
+
169
+ Kubes also supports hook as the kubes-level; this is similar to the helm-level. Kubes also provide finer-grain control hooks at the kubectl-level.
170
+
171
+ Overally, Helm and Kubes hooks work quite differently. We'll take a look at **some** examples:
172
+
173
+ ### Helm Hook Example
174
+
175
+ Helm hooks are Kubernetes Job resources with a special `helm.sh/hook` annotation. Example:
176
+
177
+ templates/job.yaml
178
+
179
+ ```yaml
180
+ {% raw %}apiVersion: batch/v1
181
+ kind: Job
182
+ metadata:
183
+ name: "{{ .Release.Name }}"
184
+ annotations:
185
+ "helm.sh/hook": post-install # This is what defines this resource as a hook.
186
+ spec:
187
+ template:
188
+ metadata:
189
+ name: "{{ .Release.Name }}"
190
+ spec:
191
+ restartPolicy: Never
192
+ containers:
193
+ - name: post-install-job
194
+ image: "alpine:3.3"
195
+ command: ["/bin/sleep","{{ default "10" .Values.sleepyTime }}"]{% endraw %}
196
+ ```
197
+
198
+ So Helm hooks are just Kubernetes jobs and run on the cluster.
199
+
200
+ ### Kubes Hook Example
201
+
202
+ Kube hooks are scripts that run on the same machine that kubes is running on. Here's an example:
203
+
204
+ .kubes/config/hooks/kubectl.rb
205
+
206
+ ```ruby
207
+ before("apply",
208
+ on: "web/deployment",
209
+ execute: "echo 'before apply hook test'",
210
+ )
211
+ ```
212
+
213
+ The hook will simply run the `echo` command on the same machine as what kubes is running on. The scope is much more fine-grain. We can target any role and resource kind. For example:
214
+
215
+ # hook can run here
216
+ kubectl apply -f .kubes/output/shared/namespace.yaml
217
+ # hook can run here
218
+ kubectl apply -f .kubes/output/web/service.yaml
219
+ # hook can run here
220
+ kubectl apply -f .kubes/output/web/deployment.yaml
221
+ # hook can run here
222
+
223
+ ### Hook Differences
224
+
225
+ We showed examples of hooks with both Helm and Kubes. We already covered one of the differences:
226
+
227
+ * Code: Helm hooks are written as Kubernetes resources. Kubes hooks are written as Ruby code that can shell out to scripts or call an inline [Ruby code]({% link _docs/config/hooks/ruby.md %}).
228
+ * Context: Helm runs as a Kubernetes job. Kubes hooks run on the same machine as kubes itself.
229
+ * Fine-Grain Control: With Kubes we can target the hook at each kubectl resource. Kubes also supports the coarser-grain hooks at the kubes-level. These are like helm hooks.
230
+
231
+ For more info on hooks, check out the [Kubes Hooks Docs](https://kubes.guru/docs/config/hooks/).
232
+
233
+ ## Additional Features
234
+
235
+ Helm and Kubes are quite different tools. Helm is more like a package manager. Kubes is more focused on deploying your specific application and adds additional convenient tooling.
236
+
237
+ Helm can package up your applications and then helps distribute them via a helm server. It's a full-fledge package management system.
238
+
239
+ Kubes supports the deployment workflow. It can build the docker image from your Dockerfile use it to deploy to Kubernetes. Kubes also has additional convenience CLI commands like [exec]({% link _reference/kubes-exec.md %}) and [logs]({% link _reference/kubes-logs.md %}) to work with Kubernetes containers.
240
+
241
+ ## Summary
242
+
243
+ Helm and Kubes are quite different. Helm is a full-fledge package management. Kubes is a more focused on deployment. Both tools support templating logic to help keep your code DRY. Additionally, Kubes supports layering to merge YAML files together for DRYness. Kubes also helps you build your Docker images.
@@ -0,0 +1,167 @@
1
+ ---
2
+ title: Kubes vs Kustomize
3
+ nav_text: Kustomize
4
+ categories: vs
5
+ ---
6
+
7
+ Though both Kubes and Kustomize build YAML files, they are quite different beasts. Kustomize is more like a `kubectl` feature that decorates YAML. Kubes is more like a tool. Kubes also builds YAML, but it also provides additional features.
8
+
9
+ Kustomize lets you customize your Kubernetes YAML files with additional `kustomization.yaml` files. The kustomization.yaml files contain configs that tell `kubectl` how to decorate existing Kubernetes YAML files in a template-free way.
10
+
11
+ Kubes lets you create Kubernetes files more directly. It handles layering and merging YAML files via a conventional structure. It also supports additional conveniences like building Docker images, CLI Customizations, Hooks, etc.
12
+
13
+ {% include vs/article.md %}
14
+
15
+ ## Project Structures
16
+
17
+ ### Kustomize Project Structure
18
+
19
+ Kustomize doesn't define a strict a project folder structure. You define any project structure you wish and use `kustomization.yaml` files to connect things together. Here's a possible Kustomize example project structure:
20
+
21
+ ├── base
22
+ │ ├── deployment.yaml
23
+ │ ├── kustomization.yaml
24
+ │ └── service.yaml
25
+ └── overlays
26
+ ├── dev
27
+ │ ├── deployment.yaml
28
+ │ ├── kustomization.yaml
29
+ │ └── namespace.yaml
30
+ └── prod
31
+ ├── deployment.yaml
32
+ ├── kustomization.yaml
33
+ └── namespace.yaml
34
+
35
+ The provided structure allows you to use the same code to create different environments with overlays. The `overlays/dev/kustomization.yaml` file stitches the structure together.
36
+
37
+ overlays/dev/kustomization.yaml:
38
+
39
+ ```yaml
40
+ apiVersion: kustomize.config.k8s.io/v1beta1
41
+ kind: Kustomization
42
+ bases:
43
+ - ../../base
44
+ patchesStrategicMerge:
45
+ - deployment.yaml
46
+ namespace: demo-dev
47
+ resources:
48
+ - ./namespace.yaml
49
+ ```
50
+
51
+ {% include vs/kubes/structure.md %}
52
+
53
+ ## Multiple Environments: Overlays vs Layering
54
+
55
+ Both Kustomize and Kubes allow you to use the same code to create multiple environments. They take different approaches, though.
56
+
57
+ ### Kustomize Overlays
58
+
59
+ Kustomize achieves multiple environments via `kustomization.yaml` and manually specifying and wiring how the files should merge. To create different dev and prod environments, we use overlays:
60
+
61
+ kubectl apply -k overlays/dev
62
+ kubectl apply -k overlays/prod
63
+
64
+ {% include vs/kubes/layering.md %}
65
+
66
+ ## DRY Differences
67
+
68
+ ## DRY with Kustomize
69
+
70
+ Both Kubes and Kustomize try to achieve DRY YAML code. It tries to avoid YAML duplication.
71
+
72
+ Kustomize takes a purist viewpoint. You use `kustomization.yaml` to decorate original YAML. The original files are untouched and left as-is. Here are example overlays files.
73
+
74
+ overlays/dev/kustomization.yaml:
75
+
76
+ ```yaml
77
+ apiVersion: kustomize.config.k8s.io/v1beta1
78
+ kind: Kustomization
79
+ bases:
80
+ - ../../base
81
+ patchesStrategicMerge:
82
+ - deployment.yaml
83
+ namespace: demo-dev
84
+ resources:
85
+ - ./namespace.yaml
86
+ ```
87
+
88
+ overlays/prod/kustomization.yaml:
89
+
90
+ ```yaml
91
+ apiVersion: kustomize.config.k8s.io/v1beta1
92
+ kind: Kustomization
93
+ bases:
94
+ - ../../base
95
+ patchesStrategicMerge:
96
+ - deployment.yaml
97
+ namespace: demo-prod
98
+ resources:
99
+ - ./namespace.yaml
100
+ ```
101
+
102
+ While duplication is reduced since the original `base/deployment.yaml` is left untouched, there is duplication in the `kustomization.yaml` files.
103
+
104
+ ## DRY with Kubes
105
+
106
+ With Kubes, DRY has handled by layering and templating support. Let's first take a look at how layering removes duplication.
107
+
108
+ Let's focus on `deployment.yaml` to explain and understand layering. Here are the files that get layered.
109
+
110
+ .kubes/resources/base/all.yaml # common YAML for all files
111
+ .kubes/resources/base/deployment.yaml # common YAML for deployment kind
112
+ .kubes/resources/web/deployment.yaml
113
+ .kubes/resources/web/deployment/dev.yaml # env-specific that overrides YAML
114
+
115
+ Each file is merged together and produces a resulting YAML file:
116
+
117
+ .kubes/output/web/deployment.yaml
118
+
119
+ Additionally, you can use ERB templating to keep things DRY. Here's an example:
120
+
121
+ .kubes/resources/shared/namespace.yaml
122
+
123
+ ```yaml
124
+ apiVersion: v1
125
+ kind: Namespace
126
+ metadata:
127
+ name: demo-<%= Kubes.env %>
128
+ labels:
129
+ app: demo
130
+ ```
131
+
132
+ Notice the `<%= Kubes.env %>` templating logic. When is `KUBES_ENV=dev`, then `name: demo-dev`. When is `KUBES_ENV=prod`, then `name: demo-prod`.
133
+
134
+ You can even define your own custom helpers for even more control. See: [Helpers Docs](https://kubes.guru/docs/helpers/custom/)
135
+
136
+ ## Kubes Features
137
+
138
+ Kubes does a lot more than build YAML files. Here's a list of features:
139
+
140
+ {% include intro/features.md %}
141
+
142
+ ## Kubes Kustomize Support
143
+
144
+ All of that being said, Kubes also supports Kustomize. So if you’re a Kustomize user, you can use it with Kubes. Here's an example Kustomize structure with Kubes.
145
+
146
+ .kubes/resources
147
+ ├── base
148
+ │ ├── deployment.yaml
149
+ │ ├── kustomization.yaml
150
+ │ └── service.yaml
151
+ └── overlays
152
+ ├── dev
153
+ │ └── kustomization.yaml
154
+ └── prod
155
+ └── kustomization.yaml
156
+
157
+ In Kustomize mode, Kubes will call `kubectl apply -k`. Here's an example:
158
+
159
+ kubes deploy overlays/dev
160
+
161
+ This calls:
162
+
163
+ kubectl apply -k .kubes/output/overlays/dev
164
+
165
+ ## Summary
166
+
167
+ Kustomize and Kubes are quite different. Kustomize is more of a feature to kubectl and takes on a purist view on changing YAML files for deployment. Kubes has similar merging concepts as Kustomize in the form of layering. Kustomize is more about control things with additional `kustomization.yaml` configurations. Whereas, Kubes takes more of a convention-over-configuration approach, so it just works without having to do extra prewiring work. Kubes additionally helps you build your Docker images.
data/docs/_docs/vs.md ADDED
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: Kubes vs. Other Tools
3
+ ---
4
+
5
+ Here are some useful comparisons to help you compare Kubes vs other tools in the ecosystem:
6
+
7
+ {% assign docs = site.docs | where: "categories","vs" %}
8
+ {% for doc in docs -%}
9
+ * [{{ doc.nav_text }}]({{ doc.url }})
10
+ {% endfor %}
@@ -0,0 +1,10 @@
1
+ * Automation: [Builds the Docker image]({% link _docs/config/docker.md %}) and updates the compiled YAML files
2
+ * 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.
3
+ * Layering: Use the same Kubernetes YAML to build multiple environments like dev and prod with [layering]({% link _docs/layering.md %}).
4
+ * Generators: Kubes ships with a few generators to help you get building with Kubernetes quickly. See: [Generator Docs]({% link _docs/generators.md %}).
5
+ * CLI Customizations: You can customize the [cli args]({% link _docs/config/args/kubectl.md %}).
6
+ * Hooks: You can also run [hooks]({% link _docs/config/hooks.md %}) before and after [kubes]({% link _docs/config/hooks/kubes.md %}) and [kubectl]({% link _docs/config/hooks/kubectl.md %}) commands.
7
+ * 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.
8
+ * 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 %}).
9
+ * 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 %}).
10
+ * 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 %}).
@@ -1,6 +1,6 @@
1
1
  Kubes Layering in it's full form allows you to keep your resource definitions DRY and create different environments with the same code.
2
2
 
3
- ## Structure
3
+ ## Project Structure
4
4
 
5
5
  Here's an example structure, so we can understand how layering works.
6
6
 
@@ -25,9 +25,7 @@ To explain the layering, here's the general processing order that Kubes takes.
25
25
  2. Then Kubes will process your `.kubes/resources/ROLE` definitions.
26
26
  3. Lastly, Kubes processes any post-layers in the `.kubes/resources/ROLE/KIND` folders.
27
27
 
28
- Note, both YAML and DSL forms support layering.
29
-
30
- Layering only combines resources definitions with the same form. For example, the DSL form `base/all.rb` will not be combined with YAML form `web/deployment.yaml`.
28
+ Note, both YAML and DSL forms support layering. They can be mixed together.
31
29
 
32
30
  ## Full Layering
33
31
 
@@ -28,6 +28,14 @@
28
28
  <li><a href="{% link _docs/learn/dsl/next-steps.md %}">Next Steps</a></li>
29
29
  </ul>
30
30
  </li>
31
+ <li><a href="{% link _docs/vs.md %}">Kubes vs Others</a>
32
+ <ul>
33
+ {% assign docs = site.docs | where: "categories","vs" %}
34
+ {% for doc in docs -%}
35
+ <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
36
+ {% endfor %}
37
+ </ul>
38
+ </li>
31
39
  </ul>
32
40
  <h2><a href="{% link docs.md %}">Docs</a></h2>
33
41
  <ul id="docs">
@@ -83,6 +91,7 @@
83
91
  <ul>
84
92
  <li><a href="{% link _docs/layering/yaml.md %}">YAML</a></li>
85
93
  <li><a href="{% link _docs/layering/dsl.md %}">DSL</a></li>
94
+ <li><a href="{% link _docs/layering/mix.md %}">Mix</a></li>
86
95
  <li><a href="{% link _docs/layering/merge.md %}">Merge Behavior</a></li>
87
96
  </ul>
88
97
  </li>
@@ -99,6 +108,14 @@
99
108
  <li><a href="{% link _docs/dsl/multiple-resources.md %}">Multiple Resources</a>
100
109
  </ul>
101
110
  </li>
111
+ <li><a href="{% link _docs/variables.md %}">Variables</a>
112
+ <ul>
113
+ {% assign docs = site.docs | where: "categories","variables" %}
114
+ {% for doc in docs -%}
115
+ <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
116
+ {% endfor %}
117
+ </ul>
118
+ </li>
102
119
  <li><a href="{% link _docs/helpers.md %}">Helpers</a>
103
120
  <ul>
104
121
  <li><a href="{% link _docs/helpers/custom.md %}">Custom</a></li>
@@ -106,7 +123,18 @@
106
123
  <ul>
107
124
  {% assign docs = site.docs | where: "categories","helpers-aws" %}
108
125
  {% for doc in docs -%}
126
+ {% if doc.nav_text == "Advanced" %}
127
+ <li><a href='{{ doc.url }}'>{{ doc.nav_text }}</a>
128
+ <ul>
129
+ {% assign docs = site.docs | where: "categories","advanced-helpers-aws" %}
130
+ {% for doc in docs -%}
131
+ <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
132
+ {% endfor %}
133
+ </ul>
134
+ </li>
135
+ {% else %}
109
136
  <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
137
+ {% endif %}
110
138
  {% endfor %}
111
139
  </ul>
112
140
  </li>
@@ -114,7 +142,18 @@
114
142
  <ul>
115
143
  {% assign docs = site.docs | where: "categories","helpers-google" %}
116
144
  {% for doc in docs -%}
145
+ {% if doc.nav_text == "Advanced" %}
146
+ <li><a href='{{ doc.url }}'>{{ doc.nav_text }}</a>
147
+ <ul>
148
+ {% assign docs = site.docs | where: "categories","advanced-helpers-google" %}
149
+ {% for doc in docs -%}
150
+ <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
151
+ {% endfor %}
152
+ </ul>
153
+ </li>
154
+ {% else %}
117
155
  <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
156
+ {% endif %}
118
157
  {% endfor %}
119
158
  </ul>
120
159
  </li>
@@ -0,0 +1 @@
1
+ This article also covers more differences in detail: [Kustomize vs Helm vs Kubes: Kubernetes Deploy Tools](https://blog.boltops.com/2020/11/05/kustomize-vs-helm-vs-kubes-kubernetes-deploy-tools)
@@ -0,0 +1,10 @@
1
+ ### Kubes Layering
2
+
3
+ To deploy and create multiple environments like dev and prod with the same YAML, we use a different KUBES_ENV setting:
4
+
5
+ KUBES_ENV=dev kubes deploy
6
+ KUBES_ENV=prod kubes deploy
7
+
8
+ The layering is achieved thanks to the conventional project structure. You don't have to do any extra work, you just create pre-process base layer files or post-process environment specific layer files.
9
+
10
+ * [Kubes Layering Docs]({% link _docs/layering.md %})
@@ -0,0 +1,24 @@
1
+ ### Kubes Project Structure
2
+
3
+ On the other hand, Kubes defines a conventional project structure. Here's a project directory example:
4
+
5
+ .kubes
6
+ └── resources
7
+ ├── base
8
+ │ ├── all.yaml
9
+ │ └── deployment.yaml
10
+ ├── shared
11
+ │ └── namespace.yaml
12
+ └── web
13
+ ├── deployment
14
+ │ ├── dev.yaml
15
+ │ └── prod.yaml
16
+ ├── deployment.yaml
17
+ └── service.yaml
18
+
19
+ A Kubes project structure also supports introduces a role concept or folder. The folder structure only shows a web role for simplicity. You can always add more roles. For example:
20
+
21
+ .kubes/resources/ROLE/deployment.yaml
22
+ .kubes/resources/clock/deployment.yaml
23
+ .kubes/resources/web/deployment.yaml
24
+ .kubes/resources/worker/deployment.yaml
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: kubes new help
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new help [COMMAND]
9
+
10
+ ## Description
11
+
12
+ Describe subcommands or one specific subcommand
13
+
14
+
15
+
@@ -0,0 +1,25 @@
1
+ ---
2
+ title: kubes new helper
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new helper
9
+
10
+ ## Description
11
+
12
+ Generates kubes helper file.
13
+
14
+ ## Examples
15
+
16
+ $ kubes new helper custom
17
+ create .kubes/helpers/custom_helper.rb
18
+
19
+
20
+ ## Options
21
+
22
+ ```
23
+ y, [--force] # Bypass overwrite are you sure prompt for existing files
24
+ ```
25
+
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: kubes new resource
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new resource
9
+
10
+ ## Description
11
+
12
+ Generates Kubes Kubernetes resource definition.
13
+
14
+ ## Examples
15
+
16
+ $ kubes new resource ingress
17
+ create .kubes/resources/web/ingress.yaml
18
+ $ kubes new resource service_account
19
+ create .kubes/resources/shared/service_account.yaml
20
+ $
21
+
22
+ ## Supported Resources
23
+
24
+ Here's a list of some of the supported resources.
25
+
26
+ backend_config
27
+ config_map
28
+ daemon_set
29
+ deployment
30
+ ingress
31
+ job
32
+ managed_certificate
33
+ namespace
34
+ network_policy
35
+ pod
36
+ role_binding
37
+ role
38
+ secret
39
+ service_account
40
+ service
41
+
42
+ Refer to the source code to all the resources that the generator supports:
43
+ https://github.com/boltops-tools/kubes/blob/master/lib/templates/new/resource/yaml
44
+
45
+
46
+ ## Options
47
+
48
+ ```
49
+ a, [--app=APP] # App name
50
+ # Default: demo
51
+ y, [--force] # Bypass overwrite are you sure prompt for existing files
52
+ r, [--role=ROLE] # Role. IE: web, clock, worker, migrate, etc. Defaults to convention: web or shared when not set
53
+ t, [--type=TYPE] # Type: dsl or yaml
54
+ # Default: yaml
55
+ ```
56
+
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: kubes new variable
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new variable
9
+
10
+ ## Description
11
+
12
+ Generates kubes variable file.
13
+
14
+
15
+ ## Options
16
+
17
+ ```
18
+ y, [--force] # Bypass overwrite are you sure prompt for existing files
19
+ ```
20
+