kubes 0.7.8 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/docs/.gitignore +1 -0
  4. data/docs/Gemfile +2 -0
  5. data/docs/_config.yml +8 -0
  6. data/docs/_docs/config/app-overrides.md +7 -0
  7. data/docs/_docs/config/boot.md +46 -0
  8. data/docs/_docs/config/env.md +29 -2
  9. data/docs/_docs/config/hooks/docker.md +2 -0
  10. data/docs/_docs/config/hooks/generator.md +16 -0
  11. data/docs/_docs/config/hooks/kubectl.md +2 -0
  12. data/docs/_docs/config/hooks/kubes.md +2 -0
  13. data/docs/_docs/config/reference.md +2 -2
  14. data/docs/_docs/config/skip.md +22 -0
  15. data/docs/_docs/helpers/aws/iam-role.md +1 -0
  16. data/docs/_docs/helpers/google/gke.md +1 -1
  17. data/docs/_docs/install/dependencies.md +18 -0
  18. data/docs/_docs/install/gem.md +6 -0
  19. data/docs/_docs/install/standalone/centos.md +70 -0
  20. data/docs/_docs/install/standalone/details/permissions.md +44 -0
  21. data/docs/_docs/install/standalone/details/uninstall.md +16 -0
  22. data/docs/_docs/install/standalone/details.md +20 -0
  23. data/docs/_docs/install/standalone/macosx.md +45 -0
  24. data/docs/_docs/install/standalone/ubuntu.md +48 -0
  25. data/docs/_docs/install/standalone.md +43 -0
  26. data/docs/_docs/install.md +8 -0
  27. data/docs/_docs/learn/dsl/install.md +1 -1
  28. data/docs/_docs/learn/yaml/install.md +1 -1
  29. data/docs/_docs/patterns/central-deployer.md +38 -0
  30. data/docs/_docs/variables/advanced.md +32 -1
  31. data/docs/_docs/variables/basic.md +1 -0
  32. data/docs/_docs/vs/custom.md +2 -0
  33. data/docs/_docs/vs/helm.md +2 -0
  34. data/docs/_docs/vs/kustomize.md +3 -1
  35. data/docs/_docs/vs.md +2 -0
  36. data/docs/_docs/yaml/erb-comment.md +89 -0
  37. data/docs/_includes/banner/foot.html +2 -0
  38. data/docs/_includes/banner/head.html +5 -0
  39. data/docs/_includes/config/app-overrides-cheatsheet.md +44 -0
  40. data/docs/_includes/config/hooks/generator.md +6 -0
  41. data/docs/_includes/content.html +1 -1
  42. data/docs/_includes/install/gem.md +7 -0
  43. data/docs/_includes/install/wrapper.md +9 -0
  44. data/docs/_includes/layering/layers.md +3 -0
  45. data/docs/_includes/learn/next-steps.md +11 -0
  46. data/docs/_includes/sidebar.html +28 -3
  47. data/docs/_includes/videos/learn/vs.md +4 -0
  48. data/docs/_includes/videos/learn.md +12 -0
  49. data/docs/_includes/videos/youtube.md +1 -0
  50. data/docs/_layouts/default.html +3 -0
  51. data/docs/_reference/kubes-new-hook.md +30 -0
  52. data/docs/_reference/kubes-new-variable.md +7 -0
  53. data/docs/_reference/kubes-new.md +1 -0
  54. data/docs/_sass/theme.scss +11 -0
  55. data/docs/bin/web +1 -1
  56. data/docs/js/scripts.js +7 -0
  57. data/kubes.gemspec +1 -0
  58. data/lib/kubes/booter.rb +26 -0
  59. data/lib/kubes/cli/help/new/hook.md +9 -0
  60. data/lib/kubes/cli/help/new/variable.md +6 -0
  61. data/lib/kubes/cli/init.rb +0 -1
  62. data/lib/kubes/cli/new/hook.rb +18 -0
  63. data/lib/kubes/cli/new.rb +4 -0
  64. data/lib/kubes/command.rb +1 -1
  65. data/lib/kubes/compiler/decorator/hashable.rb +1 -1
  66. data/lib/kubes/compiler/layering.rb +9 -0
  67. data/lib/kubes/compiler/shared/runtime_helpers.rb +8 -1
  68. data/lib/kubes/compiler/strategy/erb/comment.rb +46 -0
  69. data/lib/kubes/compiler/strategy/erb.rb +4 -0
  70. data/lib/kubes/compiler/strategy/result.rb +13 -1
  71. data/lib/kubes/compiler.rb +2 -0
  72. data/lib/kubes/config.rb +6 -2
  73. data/lib/kubes/core.rb +4 -0
  74. data/lib/kubes/kubectl/ordering.rb +9 -6
  75. data/lib/kubes/version.rb +1 -1
  76. data/lib/kubes.rb +3 -0
  77. data/lib/templates/new/hooks/docker.rb +9 -0
  78. data/lib/templates/new/hooks/kubectl.rb +11 -0
  79. data/lib/templates/new/hooks/kubes.rb +9 -0
  80. data/lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt +2 -0
  81. data/spec/kubes/compiler/decorator/post/deployment_spec.rb +1 -1
  82. metadata +51 -5
  83. data/docs/_docs/intro/install.md +0 -6
  84. data/docs/_includes/intro/install.md +0 -19
@@ -3,9 +3,9 @@ module Kubes::Compiler::Shared
3
3
  include Kubes::Compiler::Shared::Helpers
4
4
 
5
5
  def load_runtime_helpers
6
- load_custom_variables # also load custom variables
7
6
  load_plugin_helpers
8
7
  load_custom_helpers
8
+ load_custom_variables # also load custom variables
9
9
  end
10
10
 
11
11
  @@custom_helpers_loaded = false
@@ -68,6 +68,13 @@ module Kubes::Compiler::Shared
68
68
  "#{role}/#{kind}/base.rb",
69
69
  "#{role}/#{kind}/#{Kubes.env}.rb",
70
70
  ]
71
+ if Kubes.app
72
+ app_layers = ["#{Kubes.app}.rb"]
73
+ app_layers += layers.map do |path|
74
+ "#{Kubes.app}/#{path}"
75
+ end
76
+ layers += app_layers
77
+ end
71
78
 
72
79
  layers.each do |layer|
73
80
  path = "#{Kubes.root}/.kubes/variables/#{layer}"
@@ -0,0 +1,46 @@
1
+ # Processes the ERB files and looks for comments like
2
+ #
3
+ # #ERB if @testvar
4
+ # - "some yaml"
5
+ # #ERB end
6
+ #
7
+ class Kubes::Compiler::Strategy::Erb
8
+ class Comment
9
+ extend Memoist
10
+
11
+ def initialize(path)
12
+ @path = path
13
+ end
14
+
15
+ def lines
16
+ IO.readlines(@path)
17
+ end
18
+ memoize :lines
19
+
20
+ def process?
21
+ !!lines.detect { |l| l.include?('#ERB') }
22
+ end
23
+
24
+ def process
25
+ new_lines = lines.map do |line|
26
+ md = line.match(/(.*)#ERB(.*)/)
27
+ if md
28
+ "#{md[1]}<%#{md[2]} %>\n"
29
+ else
30
+ line
31
+ end
32
+ end
33
+ content = new_lines.join('')
34
+ IO.write(erb_path, content)
35
+ erb_path
36
+ end
37
+
38
+ def clean
39
+ FileUtils.rm_f(erb_path) unless ENV['KUBES_KEEP_ERB']
40
+ end
41
+
42
+ def erb_path
43
+ "#{@path}.erb"
44
+ end
45
+ end
46
+ end
@@ -17,7 +17,11 @@ class Kubes::Compiler::Strategy
17
17
  def render_result(path)
18
18
  return unless File.exist?(path)
19
19
 
20
+ comment = Comment.new(path)
21
+ path = comment.process if comment.process?
20
22
  yaml = RenderMePretty.result(path, context: self)
23
+ comment.clean if comment.process?
24
+
21
25
  result = yaml_load(path, yaml)
22
26
  # in case of blank yaml doc a Boolean false is returned. else Hash or Array is returned
23
27
  %w[Array Hash].include?(result.class.to_s) ? result : {}
@@ -21,8 +21,20 @@ class Kubes::Compiler::Strategy
21
21
  end
22
22
 
23
23
  def content
24
- result = @data.size == 1 ? @data.first : @data
24
+ data = filter_skip(@data)
25
+ return if data.empty?
26
+ result = data.size == 1 ? data.first : data
25
27
  yaml_dump(result)
26
28
  end
29
+
30
+ def skip?
31
+ content.nil?
32
+ end
33
+
34
+ def filter_skip(data)
35
+ data.reject do |item|
36
+ item.dig('kubes', 'skip')
37
+ end
38
+ end
27
39
  end
28
40
  end
@@ -38,6 +38,8 @@ module Kubes
38
38
  end
39
39
 
40
40
  def write(result)
41
+ return if config_skip?(result.filename)
42
+ return if result.skip?
41
43
  result.decorate!(:post)
42
44
  filename, content = result.filename, result.content
43
45
  dest = "#{Kubes.root}/.kubes/output/#{filename}"
data/lib/kubes/config.rb CHANGED
@@ -18,7 +18,7 @@ module Kubes
18
18
  # Auto-switching options
19
19
  config.kubectl = ActiveSupport::OrderedOptions.new
20
20
  config.kubectl.context = nil
21
- config.kubectl.context_keep = true # after switching context keep it
21
+ config.kubectl.context_keep = false # after switching context keep it
22
22
 
23
23
  # whether or not continue if the kubectl command fails
24
24
  config.kubectl.exit_on_fail = ActiveSupport::OrderedOptions.new
@@ -39,7 +39,7 @@ module Kubes
39
39
  config.skip = []
40
40
 
41
41
  config.state = ActiveSupport::OrderedOptions.new
42
- config.state.path = "#{Kubes.root}/.kubes/state/#{Kubes.env}/data.json"
42
+ config.state.path = ["#{Kubes.root}/.kubes/tmp/state", Kubes.app, "#{Kubes.env}/data.json"].compact.join('/')
43
43
 
44
44
  config.suffix_hash = true # append suffix hash to ConfigMap and Secret
45
45
 
@@ -95,6 +95,10 @@ module Kubes
95
95
  def load_configs
96
96
  evaluate_file(".kubes/config.rb")
97
97
  evaluate_file(".kubes/config/env/#{Kubes.env}.rb")
98
+ if Kubes.app
99
+ evaluate_file(".kubes/config/env/#{Kubes.app}.rb")
100
+ evaluate_file(".kubes/config/env/#{Kubes.app}/#{Kubes.env}.rb")
101
+ end
98
102
  Kubes::Plugin.plugins.each do |klass|
99
103
  # klass: IE: KubesAws, KubesGoogle
100
104
  name = klass.to_s.underscore.sub('kubes_','') # kubes_google => google
data/lib/kubes/core.rb CHANGED
@@ -2,6 +2,10 @@ module Kubes
2
2
  module Core
3
3
  extend Memoist
4
4
 
5
+ def app
6
+ ENV['KUBES_APP']
7
+ end
8
+
5
9
  def env
6
10
  ENV['KUBES_ENV'] || "dev"
7
11
  end
@@ -13,20 +13,23 @@ class Kubes::Kubectl
13
13
  "#{role_i}/#{kind_i}"
14
14
  end
15
15
 
16
- sorted = filter_files(sorted)
16
+ sorted = filter_skip(sorted)
17
17
 
18
18
  @name == "delete" ? sorted.reverse : sorted
19
19
  end
20
20
 
21
- def filter_files(sorted)
22
- skip = Kubes.config.skip
23
- skip += ENV['KUBES_SKIP'].split(' ') if ENV['KUBES_SKIP']
24
- return sorted if skip.empty?
21
+ def filter_skip(sorted)
25
22
  sorted.reject do |file|
26
- skip.detect { |text| file.include?(text) }
23
+ config_skip?(file)
27
24
  end
28
25
  end
29
26
 
27
+ def config_skip?(file)
28
+ skip = Kubes.config.skip
29
+ skip += ENV['KUBES_SKIP'].split(' ') if ENV['KUBES_SKIP']
30
+ !!skip.detect { |pattern| file.include?(pattern) }
31
+ end
32
+
30
33
  # type: kinds or roles
31
34
  # value: Examples: kind: deployment, role: web
32
35
  def index_for(type, value)
data/lib/kubes/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kubes
2
- VERSION = "0.7.8"
2
+ VERSION = "0.8.1"
3
3
  end
data/lib/kubes.rb CHANGED
@@ -5,6 +5,7 @@ $:.unshift(File.expand_path("../", __FILE__))
5
5
  require "kubes/autoloader"
6
6
  Kubes::Autoloader.setup
7
7
 
8
+ require "active_support"
8
9
  require "active_support/core_ext/class"
9
10
  require "active_support/core_ext/hash"
10
11
  require "active_support/core_ext/string"
@@ -30,3 +31,5 @@ module Kubes
30
31
  class MissingDockerImage < Error; end
31
32
  extend Core
32
33
  end
34
+
35
+ Kubes::Booter.boot
@@ -0,0 +1,9 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/docker/
2
+
3
+ before("build",
4
+ execute: "echo 'docker build before hook'",
5
+ )
6
+
7
+ after("build",
8
+ execute: "echo 'docker build after hook'",
9
+ )
@@ -0,0 +1,11 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/kubectl/
2
+
3
+ before("apply",
4
+ on: "web/deployment",
5
+ execute: "echo 'before apply hook test'",
6
+ )
7
+
8
+ after("delete",
9
+ on: "web/deployment",
10
+ execute: "echo 'after delete hook test'",
11
+ )
@@ -0,0 +1,9 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/kubes/
2
+
3
+ before("apply",
4
+ execute: "echo 'kubes before apply hook'",
5
+ )
6
+
7
+ after("apply",
8
+ execute: "echo 'kubes after apply hook'",
9
+ )
@@ -2,7 +2,9 @@ spec:
2
2
  selector:
3
3
  matchLabels:
4
4
  app: <%= app %>
5
+ env: <%= Kubes.env %>
5
6
  template:
6
7
  metadata:
7
8
  labels:
8
9
  app: <%= app %>
10
+ env: <%= Kubes.env %>
@@ -137,7 +137,7 @@ describe Kubes::Compiler::Decorator::Post do
137
137
  end
138
138
 
139
139
  context "order" do
140
- # spec to fix issue TODO: add issue number
140
+ # spec to fix issue https://github.com/boltops-tools/kubes/issues/49
141
141
  describe "name first" do
142
142
  let(:data) { fixture("configMap/volumes-name-first") }
143
143
  it "run" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-29 00:00:00.000000000 Z
11
+ date: 2022-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: nokogiri
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rainbow
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -273,14 +287,17 @@ files:
273
287
  - docs/_config.yml
274
288
  - docs/_docs/ci/cloudbuild.md
275
289
  - docs/_docs/config.md
290
+ - docs/_docs/config/app-overrides.md
276
291
  - docs/_docs/config/args.md
277
292
  - docs/_docs/config/args/docker.md
278
293
  - docs/_docs/config/args/kubectl.md
294
+ - docs/_docs/config/boot.md
279
295
  - docs/_docs/config/builder.md
280
296
  - docs/_docs/config/docker.md
281
297
  - docs/_docs/config/env.md
282
298
  - docs/_docs/config/hooks.md
283
299
  - docs/_docs/config/hooks/docker.md
300
+ - docs/_docs/config/hooks/generator.md
284
301
  - docs/_docs/config/hooks/kubectl.md
285
302
  - docs/_docs/config/hooks/kubes.md
286
303
  - docs/_docs/config/hooks/ruby.md
@@ -326,11 +343,20 @@ files:
326
343
  - docs/_docs/helpers/google/gke.md
327
344
  - docs/_docs/helpers/google/secrets.md
328
345
  - docs/_docs/helpers/google/service-account.md
346
+ - docs/_docs/install.md
347
+ - docs/_docs/install/dependencies.md
348
+ - docs/_docs/install/gem.md
349
+ - docs/_docs/install/standalone.md
350
+ - docs/_docs/install/standalone/centos.md
351
+ - docs/_docs/install/standalone/details.md
352
+ - docs/_docs/install/standalone/details/permissions.md
353
+ - docs/_docs/install/standalone/details/uninstall.md
354
+ - docs/_docs/install/standalone/macosx.md
355
+ - docs/_docs/install/standalone/ubuntu.md
329
356
  - docs/_docs/intro.md
330
357
  - docs/_docs/intro/concepts.md
331
358
  - docs/_docs/intro/docker-image.md
332
359
  - docs/_docs/intro/how-kubes-works.md
333
- - docs/_docs/intro/install.md
334
360
  - docs/_docs/intro/ordering.md
335
361
  - docs/_docs/intro/ordering/custom.md
336
362
  - docs/_docs/intro/structure.md
@@ -365,6 +391,7 @@ files:
365
391
  - docs/_docs/misc/separate-steps.md
366
392
  - docs/_docs/next-steps.md
367
393
  - docs/_docs/patterns.md
394
+ - docs/_docs/patterns/central-deployer.md
368
395
  - docs/_docs/patterns/clock-web-worker.md
369
396
  - docs/_docs/patterns/migrations.md
370
397
  - docs/_docs/patterns/multiple-envs.md
@@ -384,9 +411,14 @@ files:
384
411
  - docs/_docs/vs/helm.md
385
412
  - docs/_docs/vs/kustomize.md
386
413
  - docs/_docs/yaml.md
414
+ - docs/_docs/yaml/erb-comment.md
387
415
  - docs/_docs/yaml/multiple-files.md
388
416
  - docs/_docs/yaml/multiple-resources.md
417
+ - docs/_includes/banner/foot.html
418
+ - docs/_includes/banner/head.html
389
419
  - docs/_includes/commands.html
420
+ - docs/_includes/config/app-overrides-cheatsheet.md
421
+ - docs/_includes/config/hooks/generator.md
390
422
  - docs/_includes/config/hooks/options.md
391
423
  - docs/_includes/content.html
392
424
  - docs/_includes/dsl/methods.md
@@ -398,8 +430,9 @@ files:
398
430
  - docs/_includes/header.html
399
431
  - docs/_includes/helpers/base64.md
400
432
  - docs/_includes/helpers/generator.md
433
+ - docs/_includes/install/gem.md
434
+ - docs/_includes/install/wrapper.md
401
435
  - docs/_includes/intro/features.md
402
- - docs/_includes/intro/install.md
403
436
  - docs/_includes/js.html
404
437
  - docs/_includes/kubes-steps.md
405
438
  - docs/_includes/layering/layers.md
@@ -413,6 +446,9 @@ files:
413
446
  - docs/_includes/reference.md
414
447
  - docs/_includes/sidebar.html
415
448
  - docs/_includes/variables/generator.md
449
+ - docs/_includes/videos/learn.md
450
+ - docs/_includes/videos/learn/vs.md
451
+ - docs/_includes/videos/youtube.md
416
452
  - docs/_includes/vs/article.md
417
453
  - docs/_includes/vs/kubes/layering.md
418
454
  - docs/_includes/vs/kubes/structure.md
@@ -435,6 +471,7 @@ files:
435
471
  - docs/_reference/kubes-logs.md
436
472
  - docs/_reference/kubes-new-help.md
437
473
  - docs/_reference/kubes-new-helper.md
474
+ - docs/_reference/kubes-new-hook.md
438
475
  - docs/_reference/kubes-new-resource.md
439
476
  - docs/_reference/kubes-new-variable.md
440
477
  - docs/_reference/kubes-new.md
@@ -468,6 +505,7 @@ files:
468
505
  - docs/img/logos/kubes-white.png
469
506
  - docs/index.html
470
507
  - docs/js/app.js
508
+ - docs/js/scripts.js
471
509
  - docs/opal/app.rb
472
510
  - docs/opal/pager.rb
473
511
  - docs/opal/sidebar.rb
@@ -560,6 +598,7 @@ files:
560
598
  - lib/kubes/auth/gcr.rb
561
599
  - lib/kubes/autoloader.rb
562
600
  - lib/kubes/aws_services.rb
601
+ - lib/kubes/booter.rb
563
602
  - lib/kubes/cli.rb
564
603
  - lib/kubes/cli/apply.rb
565
604
  - lib/kubes/cli/base.rb
@@ -578,11 +617,14 @@ files:
578
617
  - lib/kubes/cli/help/deploy.md
579
618
  - lib/kubes/cli/help/exec.md
580
619
  - lib/kubes/cli/help/new/helper.md
620
+ - lib/kubes/cli/help/new/hook.md
581
621
  - lib/kubes/cli/help/new/resource.md
622
+ - lib/kubes/cli/help/new/variable.md
582
623
  - lib/kubes/cli/init.rb
583
624
  - lib/kubes/cli/logs.rb
584
625
  - lib/kubes/cli/new.rb
585
626
  - lib/kubes/cli/new/helper.rb
627
+ - lib/kubes/cli/new/hook.rb
586
628
  - lib/kubes/cli/new/resource.rb
587
629
  - lib/kubes/cli/new/variable.rb
588
630
  - lib/kubes/cli/prune.rb
@@ -628,6 +670,7 @@ files:
628
670
  - lib/kubes/compiler/strategy/base.rb
629
671
  - lib/kubes/compiler/strategy/dispatcher.rb
630
672
  - lib/kubes/compiler/strategy/erb.rb
673
+ - lib/kubes/compiler/strategy/erb/comment.rb
631
674
  - lib/kubes/compiler/strategy/erb/yaml_error.rb
632
675
  - lib/kubes/compiler/strategy/pass.rb
633
676
  - lib/kubes/compiler/strategy/result.rb
@@ -683,6 +726,9 @@ files:
683
726
  - lib/templates/dsl/.kubes/resources/web/deployment/prod.rb
684
727
  - lib/templates/dsl/.kubes/resources/web/service.rb
685
728
  - lib/templates/new/helper/file.rb
729
+ - lib/templates/new/hooks/docker.rb
730
+ - lib/templates/new/hooks/kubectl.rb
731
+ - lib/templates/new/hooks/kubes.rb
686
732
  - lib/templates/new/resource/dsl/backend_config.rb
687
733
  - lib/templates/new/resource/dsl/config_map.rb
688
734
  - lib/templates/new/resource/dsl/daemon_set.rb
@@ -796,7 +842,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
796
842
  - !ruby/object:Gem::Version
797
843
  version: '0'
798
844
  requirements: []
799
- rubygems_version: 3.1.6
845
+ rubygems_version: 3.2.32
800
846
  signing_key:
801
847
  specification_version: 4
802
848
  summary: 'Kubernetes Deployment Tool: build docker image, compile Kubernetes YAML
@@ -1,6 +0,0 @@
1
- ---
2
- title: Installation
3
- ---
4
-
5
- {% include intro/install.md %}
6
-
@@ -1,19 +0,0 @@
1
- ## RubyGems
2
-
3
- Install kubes via RubyGems.
4
-
5
- gem install kubes
6
-
7
- Ruby 2.7 and above is recommended.
8
-
9
- ## kubectl
10
-
11
- Kubes calls kubectl. Kubes has been tested with kubectl v1.15+. Generally, it should work with most versions of kubectl.
12
-
13
- ## docker
14
-
15
- Kubes calls docker. Kubes has been tested with docker 18.x-ce+. Generally, it should work with most versions of docker.
16
-
17
- ## gcloud
18
-
19
- If you are using the [gcloud builder](% link _docs/config/builder.md %), set up and configure the [gcloud cli](https://cloud.google.com/sdk/install).