porkadot 0.21.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +32 -0
  3. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +23 -0
  4. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +23 -0
  5. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +9 -0
  6. data/lib/porkadot/assets/kubelet/setup-containerd.sh.erb +8 -1
  7. data/lib/porkadot/assets/kubelet-default/install.sh.erb +14 -0
  8. data/lib/porkadot/assets/kubelet.rb +32 -0
  9. data/lib/porkadot/assets/kubernetes/install.secrets.sh.erb +8 -0
  10. data/lib/porkadot/assets/kubernetes/install.sh.erb +8 -1
  11. data/lib/porkadot/assets/kubernetes/kustomization.yaml.erb +7 -0
  12. data/lib/porkadot/assets/kubernetes/manifests/{coredns.yaml.erb → addons/coredns/coredns.yaml.erb} +2 -1
  13. data/lib/porkadot/assets/kubernetes/manifests/{dns-horizontal-autoscaler.yaml.erb → addons/coredns/dns-horizontal-autoscaler.yaml.erb} +0 -2
  14. data/lib/porkadot/assets/kubernetes/manifests/addons/coredns/kustomization.yaml.erb +3 -0
  15. data/lib/porkadot/assets/kubernetes/manifests/{flannel.yaml.erb → addons/flannel/flannel.yaml.erb} +39 -10
  16. data/lib/porkadot/assets/kubernetes/manifests/addons/flannel/kustomization.yaml.erb +2 -0
  17. data/lib/porkadot/assets/kubernetes/manifests/{kubelet-rubber-stamp.yaml.erb → addons/kubelet-rubber-stamp/kubelet-rubber-stamp.yaml.erb} +1 -1
  18. data/lib/porkadot/assets/kubernetes/manifests/addons/kubelet-rubber-stamp/kustomization.yaml.erb +2 -0
  19. data/lib/porkadot/assets/kubernetes/manifests/addons/kustomization.yaml.erb +4 -0
  20. data/lib/porkadot/assets/kubernetes/manifests/{000-metallb.yaml.erb → addons/metallb/000-metallb.yaml.erb} +0 -0
  21. data/lib/porkadot/assets/kubernetes/manifests/addons/metallb/kustomization.yaml.erb +6 -0
  22. data/lib/porkadot/assets/kubernetes/manifests/{metallb.config.yaml.erb → addons/metallb/metallb.config.yaml.erb} +1 -2
  23. data/lib/porkadot/assets/kubernetes/manifests/addons/metallb/metallb.yaml +480 -0
  24. data/lib/porkadot/assets/kubernetes/manifests/{metallb.yaml.erb → addons/metallb/metallb.yaml.erb} +41 -4
  25. data/lib/porkadot/assets/kubernetes/manifests/addons/storage-version-migrator/kustomization.yaml.erb +2 -0
  26. data/lib/porkadot/assets/kubernetes/manifests/{storage-version-migrator.yaml.erb → addons/storage-version-migrator/storage-version-migrator.yaml.erb} +0 -0
  27. data/lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb +32 -0
  28. data/lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb +20 -6
  29. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +20 -6
  30. data/lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb +0 -1
  31. data/lib/porkadot/assets/kubernetes/manifests/kustomization.yaml.erb +8 -0
  32. data/lib/porkadot/assets/kubernetes.rb +91 -18
  33. data/lib/porkadot/assets.rb +13 -3
  34. data/lib/porkadot/cmd/cli.rb +27 -0
  35. data/lib/porkadot/cmd/etcd.rb +68 -0
  36. data/lib/porkadot/cmd/install.rb +15 -0
  37. data/lib/porkadot/config.rb +9 -5
  38. data/lib/porkadot/configs/addons.rb +21 -0
  39. data/lib/porkadot/configs/certs.rb +3 -0
  40. data/lib/porkadot/configs/etcd.rb +35 -2
  41. data/lib/porkadot/configs/kubelet.rb +26 -0
  42. data/lib/porkadot/configs/kubernetes.rb +27 -10
  43. data/lib/porkadot/const.rb +3 -0
  44. data/lib/porkadot/default.yaml +24 -6
  45. data/lib/porkadot/install/kubelet.rb +137 -0
  46. data/lib/porkadot/install/kubernetes.rb +2 -2
  47. data/lib/porkadot/version.rb +1 -1
  48. data/lib/porkadot.rb +2 -2
  49. data/porkadot.gemspec +1 -0
  50. metadata +38 -14
  51. data/lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb +0 -13
  52. data/lib/porkadot/configs/cni.rb +0 -22
  53. data/lib/porkadot/configs/loadbalancer.rb +0 -26
@@ -2,6 +2,8 @@ module Porkadot; module Install
2
2
  class KubeletList
3
3
  KUBE_TEMP = File.join(Porkadot::Install::KUBE_TEMP, 'kubelet')
4
4
  KUBE_SECRETS_TEMP = File.join(Porkadot::Install::KUBE_TEMP, '.kubelet')
5
+ KUBE_DEFAULT_TEMP = File.join(Porkadot::Install::KUBE_TEMP, '.default')
6
+ ETCD_TEMP = '/opt/porkadot'
5
7
  include SSHKit::DSL
6
8
  attr_reader :global_config
7
9
  attr_reader :logger
@@ -40,6 +42,30 @@ module Porkadot; module Install
40
42
  end
41
43
  end
42
44
 
45
+ def setup_default hosts: nil, force: false
46
+ unless hosts
47
+ hosts = []
48
+ self.kubelets.each do |_, v|
49
+ hosts << v
50
+ end
51
+ end
52
+
53
+ on(hosts) do |host|
54
+ execute(:mkdir, '-p', Porkadot::Install::KUBE_TEMP)
55
+ if test("[ -d #{KUBE_TEMP} ]")
56
+ execute(:rm, '-rf', KUBE_TEMP)
57
+ execute(:rm, '-rf', KUBE_SECRETS_TEMP)
58
+ end
59
+ upload! host.global_config.kubelet_default.target_path, KUBE_TEMP, recursive: true
60
+ upload! host.global_config.kubelet_default.target_secrets_path, KUBE_SECRETS_TEMP, recursive: true
61
+ execute(:cp, '-r', KUBE_SECRETS_TEMP + '/*', KUBE_TEMP)
62
+
63
+ as user: 'root' do
64
+ execute(:bash, File.join(KUBE_TEMP, 'install.sh'))
65
+ end
66
+ end
67
+ end
68
+
43
69
  def install hosts: nil, force: false
44
70
  unless hosts
45
71
  hosts = []
@@ -68,6 +94,114 @@ module Porkadot; module Install
68
94
  end
69
95
  end
70
96
 
97
+ def backup_etcd host: nil, path: "./backup/etcd.db"
98
+ unless host
99
+ self.kubelets.each do |_, v|
100
+ if v.etcd?
101
+ host = v
102
+ end
103
+ end
104
+ end
105
+
106
+ on(:local) do |local|
107
+ execute(:mkdir, '-p', File.dirname(path))
108
+ end
109
+
110
+ options = self.etcd_options
111
+ on(host) do |host|
112
+ execute(:mkdir, '-p', KUBE_TEMP)
113
+ execute(:"/opt/bin/etcdctl", *options, "snapshot", "save", "#{KUBE_TEMP}/etcd.db")
114
+ download! "#{KUBE_TEMP}/etcd.db", path
115
+ end
116
+ end
117
+
118
+ def restore_etcd path: "./backup/etcd.db"
119
+ require 'date'
120
+ hosts = []
121
+ self.kubelets.each do |_, v|
122
+ hosts << v if v.etcd?
123
+ end
124
+
125
+ options = self.etcd_options
126
+ on(hosts) do |host|
127
+ if test("[ -d #{KUBE_TEMP} ]")
128
+ execute(:rm, '-rf', KUBE_TEMP)
129
+ execute(:rm, '-rf', KUBE_SECRETS_TEMP)
130
+ end
131
+ execute(:mkdir, '-p', KUBE_TEMP)
132
+ upload! path, "#{KUBE_TEMP}/etcd.db"
133
+
134
+ as user: 'root' do
135
+ execute(:mkdir, '-p', ETCD_TEMP)
136
+ if test('[ -d /var/lib/etcd ]')
137
+ execute(:mv, '/var/lib/etcd', "${ETCD_TEMP}/data-#{DateTime.now.to_s}")
138
+ end
139
+ execute(:"/opt/bin/etcdctl", *options, "snapshot", "restore", "#{KUBE_TEMP}/etcd.db")
140
+ end
141
+ end
142
+ end
143
+
144
+ def start_etcd hosts: nil
145
+ unless hosts
146
+ hosts = []
147
+ self.kubelets.each do |_, v|
148
+ hosts << v if v.etcd?
149
+ end
150
+ end
151
+
152
+ on(hosts) do |host|
153
+ as user: 'root' do
154
+ execute(:mkdir, '-p', ETCD_TEMP)
155
+
156
+ result = capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd')
157
+ with(container_runtime_endpoint: "unix:///run/containerd/containerd.sock") do
158
+ if result.empty?
159
+ info 'Trying to start etcd'
160
+ execute(:mv, "${ETCD_TEMP}/etcd-server.yaml", "/etc/kubernetes/manifests/etcd-server.yaml")
161
+ else
162
+ info 'etcd is already started...'
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
168
+
169
+ def stop_etcd hosts: nil
170
+ unless hosts
171
+ hosts = []
172
+ self.kubelets.each do |_, v|
173
+ hosts << v if v.etcd?
174
+ end
175
+ end
176
+
177
+ on(hosts) do |host|
178
+ as user: 'root' do
179
+ execute(:mkdir, '-p', ETCD_TEMP)
180
+
181
+ info "Waiting for etcd to stop..."
182
+ with(container_runtime_endpoint: "unix:///run/containerd/containerd.sock") do
183
+ unless capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd').empty?
184
+ execute(:mv, "/etc/kubernetes/manifests/etcd-server.yaml", "${ETCD_TEMP}/etcd-server.yaml")
185
+ while capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd') != ''
186
+ info 'Still waiting for stopping etcd...'
187
+ sleep 5
188
+ end
189
+ end
190
+ end
191
+ info 'etcd was stopped.'
192
+ end
193
+ end
194
+ end
195
+
196
+ def etcd_options
197
+ %w(
198
+ --cacert /etc/etcd/pki/ca.crt
199
+ --cert /etc/etcd/pki/etcd.crt
200
+ --key /etc/etcd/pki/etcd.key
201
+ --endpoints=https://127.0.0.1:2379
202
+ )
203
+ end
204
+
71
205
  def [](name)
72
206
  self.kubelets[name]
73
207
  end
@@ -87,5 +221,8 @@ module Porkadot; module Install
87
221
  super(@connection)
88
222
  end
89
223
 
224
+ def etcd?
225
+ return self.config.raw.labels && self.config.raw.labels[Porkadot::ETCD_MEMBER_LABEL]
226
+ end
90
227
  end
91
228
  end; end
@@ -24,10 +24,10 @@ module Porkadot; module Install
24
24
  end
25
25
  upload! config.target_path, KUBE_TEMP, recursive: true
26
26
  upload! config.target_secrets_path, KUBE_SECRETS_TEMP, recursive: true
27
- execute(:cp, '-r', KUBE_SECRETS_TEMP + '/*', KUBE_TEMP)
28
27
 
29
28
  # as user: 'root' do
30
- with KUBECONFIG: File.join(KUBE_TEMP, 'kubeconfig.yaml') do
29
+ with KUBECONFIG: File.join(KUBE_SECRETS_TEMP, 'kubeconfig.yaml') do
30
+ execute(:bash, File.join(KUBE_SECRETS_TEMP, 'install.secrets.sh'))
31
31
  execute(:bash, File.join(KUBE_TEMP, 'install.sh'))
32
32
  end
33
33
  end
@@ -1,3 +1,3 @@
1
1
  module Porkadot
2
- VERSION = "0.21.0"
2
+ VERSION = "0.23.0"
3
3
  end
data/lib/porkadot.rb CHANGED
@@ -20,8 +20,7 @@ require 'porkadot/configs/kubernetes'
20
20
  require 'porkadot/configs/etcd'
21
21
  require 'porkadot/configs/bootstrap'
22
22
  require 'porkadot/configs/kubernetes'
23
- require 'porkadot/configs/loadbalancer'
24
- require 'porkadot/configs/cni'
23
+ require 'porkadot/configs/addons'
25
24
 
26
25
  require 'porkadot/assets/certs'
27
26
  require 'porkadot/assets/kubelet'
@@ -38,4 +37,5 @@ require 'porkadot/cmd/render/certs'
38
37
  require 'porkadot/cmd/render'
39
38
  require 'porkadot/cmd/install/bootstrap'
40
39
  require 'porkadot/cmd/install'
40
+ require 'porkadot/cmd/etcd'
41
41
  require 'porkadot/cmd'
data/porkadot.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_dependency "thor", "~> 1.0"
37
37
  spec.add_dependency "hashie", "~> 4.1"
38
38
  spec.add_dependency "sshkit", "~> 1.20"
39
+ spec.add_dependency "net-ssh", "= 7.0.1"
39
40
  spec.add_development_dependency "bundler", "~> 2.0"
40
41
  spec.add_development_dependency "rake", "~> 13.0"
41
42
  spec.add_development_dependency "minitest", "~> 5.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: porkadot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OTSUKA, Yuanying
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-25 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.20'
55
+ - !ruby/object:Gem::Dependency
56
+ name: net-ssh
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 7.0.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 7.0.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -133,6 +147,7 @@ files:
133
147
  - lib/porkadot/assets/etcd.rb
134
148
  - lib/porkadot/assets/etcd/etcd-server.yaml.erb
135
149
  - lib/porkadot/assets/etcd/install.sh.erb
150
+ - lib/porkadot/assets/kubelet-default/install.sh.erb
136
151
  - lib/porkadot/assets/kubelet.rb
137
152
  - lib/porkadot/assets/kubelet/bootstrap-kubelet.conf.erb
138
153
  - lib/porkadot/assets/kubelet/config.yaml.erb
@@ -142,42 +157,51 @@ files:
142
157
  - lib/porkadot/assets/kubelet/kubelet.service.erb
143
158
  - lib/porkadot/assets/kubelet/setup-containerd.sh.erb
144
159
  - lib/porkadot/assets/kubernetes.rb
160
+ - lib/porkadot/assets/kubernetes/install.secrets.sh.erb
145
161
  - lib/porkadot/assets/kubernetes/install.sh.erb
146
162
  - lib/porkadot/assets/kubernetes/kubeconfig.yaml.erb
147
- - lib/porkadot/assets/kubernetes/manifests/000-metallb.yaml.erb
148
- - lib/porkadot/assets/kubernetes/manifests/coredns.yaml.erb
149
- - lib/porkadot/assets/kubernetes/manifests/dns-horizontal-autoscaler.yaml.erb
150
- - lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb
163
+ - lib/porkadot/assets/kubernetes/kustomization.yaml.erb
164
+ - lib/porkadot/assets/kubernetes/manifests/addons/coredns/coredns.yaml.erb
165
+ - lib/porkadot/assets/kubernetes/manifests/addons/coredns/dns-horizontal-autoscaler.yaml.erb
166
+ - lib/porkadot/assets/kubernetes/manifests/addons/coredns/kustomization.yaml.erb
167
+ - lib/porkadot/assets/kubernetes/manifests/addons/flannel/flannel.yaml.erb
168
+ - lib/porkadot/assets/kubernetes/manifests/addons/flannel/kustomization.yaml.erb
169
+ - lib/porkadot/assets/kubernetes/manifests/addons/kubelet-rubber-stamp/kubelet-rubber-stamp.yaml.erb
170
+ - lib/porkadot/assets/kubernetes/manifests/addons/kubelet-rubber-stamp/kustomization.yaml.erb
171
+ - lib/porkadot/assets/kubernetes/manifests/addons/kustomization.yaml.erb
172
+ - lib/porkadot/assets/kubernetes/manifests/addons/metallb/000-metallb.yaml.erb
173
+ - lib/porkadot/assets/kubernetes/manifests/addons/metallb/kustomization.yaml.erb
174
+ - lib/porkadot/assets/kubernetes/manifests/addons/metallb/metallb.config.yaml.erb
175
+ - lib/porkadot/assets/kubernetes/manifests/addons/metallb/metallb.yaml
176
+ - lib/porkadot/assets/kubernetes/manifests/addons/metallb/metallb.yaml.erb
177
+ - lib/porkadot/assets/kubernetes/manifests/addons/storage-version-migrator/kustomization.yaml.erb
178
+ - lib/porkadot/assets/kubernetes/manifests/addons/storage-version-migrator/storage-version-migrator.yaml.erb
151
179
  - lib/porkadot/assets/kubernetes/manifests/kube-apiserver.secrets.yaml.erb
152
180
  - lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb
153
181
  - lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.secrets.yaml.erb
154
182
  - lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb
155
183
  - lib/porkadot/assets/kubernetes/manifests/kube-proxy.yaml.erb
156
184
  - lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb
157
- - lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb
158
185
  - lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb
159
- - lib/porkadot/assets/kubernetes/manifests/metallb.config.yaml.erb
160
- - lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb
161
- - lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb
186
+ - lib/porkadot/assets/kubernetes/manifests/kustomization.yaml.erb
162
187
  - lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb
163
- - lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb
164
188
  - lib/porkadot/cmd.rb
165
189
  - lib/porkadot/cmd/cli.rb
190
+ - lib/porkadot/cmd/etcd.rb
166
191
  - lib/porkadot/cmd/install.rb
167
192
  - lib/porkadot/cmd/install/bootstrap.rb
168
193
  - lib/porkadot/cmd/render.rb
169
194
  - lib/porkadot/cmd/render/certs.rb
170
195
  - lib/porkadot/config.rb
196
+ - lib/porkadot/configs/addons.rb
171
197
  - lib/porkadot/configs/bootstrap.rb
172
198
  - lib/porkadot/configs/certs.rb
173
199
  - lib/porkadot/configs/certs/etcd.rb
174
200
  - lib/porkadot/configs/certs/front_proxy.rb
175
201
  - lib/porkadot/configs/certs/k8s.rb
176
- - lib/porkadot/configs/cni.rb
177
202
  - lib/porkadot/configs/etcd.rb
178
203
  - lib/porkadot/configs/kubelet.rb
179
204
  - lib/porkadot/configs/kubernetes.rb
180
- - lib/porkadot/configs/loadbalancer.rb
181
205
  - lib/porkadot/const.rb
182
206
  - lib/porkadot/default.yaml
183
207
  - lib/porkadot/install/base.rb
@@ -209,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
233
  - !ruby/object:Gem::Version
210
234
  version: '0'
211
235
  requirements: []
212
- rubygems_version: 3.1.2
236
+ rubygems_version: 3.3.7
213
237
  signing_key:
214
238
  specification_version: 4
215
239
  summary: Porkadot is a CLI tool to deploy Kubernetes cluster.
@@ -1,13 +0,0 @@
1
- <% require 'securerandom' -%>
2
- <% k8s = global_config.k8s -%>
3
- ---
4
- apiVersion: v1
5
- stringData:
6
- secretkey: <%= SecureRandom.base64(128) %>
7
- kind: Secret
8
- metadata:
9
- name: memberlist
10
- namespace: metallb-system
11
- labels:
12
- app: metallb
13
- type: Opaque
@@ -1,22 +0,0 @@
1
-
2
- module Porkadot; module Configs
3
- class Cni
4
- include Porkadot::ConfigUtils
5
- attr_reader :type
6
-
7
- def initialize config
8
- @config = config
9
- @type = config.raw.cni.type
10
- @raw = config.raw.cni.send(config.raw.cni.type.to_sym)
11
- end
12
-
13
- def target_path
14
- File.join(self.config.assets_dir, 'kubernetes')
15
- end
16
-
17
- def manifests_path
18
- File.join(self.target_path, 'manifests')
19
- end
20
-
21
- end
22
- end; end
@@ -1,26 +0,0 @@
1
-
2
- module Porkadot; module Configs
3
- class Lb
4
- include Porkadot::ConfigUtils
5
- attr_reader :type
6
-
7
- def initialize config
8
- @config = config
9
- @type = config.raw.lb.type
10
- @raw = config.raw.lb.send(config.raw.lb.type.to_sym)
11
- end
12
-
13
- def target_path
14
- File.join(self.config.assets_dir, 'kubernetes')
15
- end
16
-
17
- def manifests_path
18
- File.join(self.target_path, 'manifests')
19
- end
20
-
21
- def lb_config
22
- return self.raw.config
23
- end
24
-
25
- end
26
- end; end