porkadot 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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