mkit 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +8 -4
- data/lib/mkit/app/controllers/services_controller.rb +0 -7
- data/lib/mkit/app/mkit_server.rb +13 -1
- data/lib/mkit/app/model/service.rb +0 -17
- data/lib/mkit/app/model/service_port.rb +25 -8
- data/lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb +19 -22
- data/lib/mkit/exceptions.rb +5 -0
- data/lib/mkit/version.rb +1 -1
- data/lib/mkit.rb +3 -0
- data/mkit.gemspec +3 -3
- data/samples/apps/rabbitmq.yml +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '03388845cec9ae0e648bd0692ce1f3b0608127bfd3f4da3019ca78fa8c188d1c'
|
4
|
+
data.tar.gz: 9aa7ded98a1198a4f3dc81a313cd4eddee05df42ec0da5e3e48eb53ab639fd3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55978a84196d4bd5f72ef0f8fa745d5f74a24d4e6ecb62d4b52bc5076b8b1a63a9e3fdfc2c80a07f8b8d6a7d19fae99b6d2b2f7365a2258678d46380c60e4803
|
7
|
+
data.tar.gz: c1c2dea9ae37f80db6a8bca1c63b3556e5642b84d882e96fd323f483df767600ee5b58e72ba930af6ec086641d41eeee0252bfec567fff182cfc4fcfe45157fc
|
data/README.md
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
This is micro kubernetes(tm) on Ruby(tm), a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API.
|
4
4
|
|
5
|
-
It contains
|
5
|
+
It contains an internal DNS and uses HAProxy for routing/balancing/fail-over for Pods access.
|
6
6
|
The database is a simple sqlite3 db and the server is a Sinatra based application.
|
7
7
|
|
8
|
-
|
8
|
+
A client is also included to access the API, e.g. `mkitc ps`.
|
9
9
|
|
10
|
-
The daemon is responsible for HAProxy pods routing configuration. It also provides the cluster DNS and manages the internal host interface.
|
10
|
+
The daemon is responsible for HAProxy pods routing configuration. It also provides the cluster DNS and manages the internal host interface and the docker instances.
|
11
11
|
|
12
12
|
## Requirements
|
13
13
|
|
@@ -107,7 +107,11 @@ service:
|
|
107
107
|
name: rabbitmq # unique
|
108
108
|
image: rabbitmq:3-management-alpine # image
|
109
109
|
network: bridge # docker network - it will be created if it does not exists
|
110
|
-
ports: # haproxy port mapping
|
110
|
+
ports: # haproxy port mapping
|
111
|
+
# <external_port>:[internal_port]:<tcp|http>:[round_robin (default)|leastconn]
|
112
|
+
# to define a range on `external_port`, leave `internal_port` blank
|
113
|
+
# - 5000-5100::tcp:round_robin
|
114
|
+
# range on `internal_port` is not supported
|
111
115
|
- 5672:5672:tcp:round_robin
|
112
116
|
- 80:15672:http:round_robin
|
113
117
|
resources:
|
@@ -41,9 +41,6 @@ class ServicesController < MKIt::Server
|
|
41
41
|
srv.update!(yaml.to_o)
|
42
42
|
end
|
43
43
|
format_response(srv)
|
44
|
-
rescue MKIt::BaseException => e
|
45
|
-
MKItLogger.debug e
|
46
|
-
error e.error_code, e.message
|
47
44
|
end
|
48
45
|
|
49
46
|
# curl -X DELETE localhost:4567/services/1
|
@@ -62,9 +59,6 @@ class ServicesController < MKIt::Server
|
|
62
59
|
srv = Service.create(yaml.to_o)
|
63
60
|
end
|
64
61
|
format_response(srv)
|
65
|
-
rescue MKIt::BaseException => e
|
66
|
-
MKItLogger.debug e
|
67
|
-
error e.error_code, e.message
|
68
62
|
end
|
69
63
|
|
70
64
|
#
|
@@ -84,4 +78,3 @@ class ServicesController < MKIt::Server
|
|
84
78
|
format_response(srv)
|
85
79
|
end
|
86
80
|
end
|
87
|
-
|
data/lib/mkit/app/mkit_server.rb
CHANGED
@@ -3,6 +3,18 @@ require 'mkit/exceptions'
|
|
3
3
|
module MKIt
|
4
4
|
class Server < Sinatra::Base
|
5
5
|
set :default_content_type, :json
|
6
|
-
|
6
|
+
set :dump_errors, true
|
7
|
+
set :show_exceptions, false
|
8
|
+
set :raise_errors, false
|
9
|
+
|
10
|
+
error MKIt::BaseException do |e|
|
11
|
+
MKItLogger.debug e
|
12
|
+
error e.error_code, e.message
|
13
|
+
end
|
14
|
+
|
15
|
+
error do |e|
|
16
|
+
MKItLogger.debug e
|
17
|
+
error 500, e.message
|
18
|
+
end
|
7
19
|
end
|
8
20
|
end
|
@@ -9,11 +9,7 @@ require 'mkit/status'
|
|
9
9
|
require 'mkit/utils'
|
10
10
|
require 'mkit/ctypes'
|
11
11
|
require 'mkit/app/model/pool'
|
12
|
-
require 'mkit/app/model/service'
|
13
|
-
require 'mkit/app/model/pod'
|
14
12
|
require 'mkit/app/model/dns_host'
|
15
|
-
require 'mkit/app/helpers/erb_helper'
|
16
|
-
require 'mkit/app/helpers/docker_helper'
|
17
13
|
require 'mkit/app/helpers/haproxy'
|
18
14
|
|
19
15
|
#
|
@@ -199,19 +195,6 @@ class Service < ActiveRecord::Base
|
|
199
195
|
#
|
200
196
|
# ha proxy configs & template
|
201
197
|
#
|
202
|
-
def public_ports
|
203
|
-
self.service_port.each.map{|p| p.external_port}.uniq
|
204
|
-
end
|
205
|
-
|
206
|
-
def ports_by_external(external_port)
|
207
|
-
self.service_port.where('external_port = ?', external_port)
|
208
|
-
end
|
209
|
-
|
210
|
-
def ports_mode_by_external(external_port)
|
211
|
-
ports = self.service_port.where('external_port = ?', external_port).first
|
212
|
-
ports.mode if ports
|
213
|
-
end
|
214
|
-
|
215
198
|
def update_proxy
|
216
199
|
MkitJob.publish(topic: :update_proxy_config, application_id: self.id, data: proxy_config)
|
217
200
|
end
|
@@ -1,30 +1,47 @@
|
|
1
1
|
require 'mkit/app/model/service'
|
2
|
+
require 'mkit/exceptions'
|
2
3
|
|
3
4
|
class ServicePort < ActiveRecord::Base
|
4
5
|
belongs_to :service
|
5
6
|
|
7
|
+
CONFIG_EXPRESSION=/^(.*?):(.*?):(tcp|http):(.*?)$/
|
8
|
+
|
6
9
|
def self.create(service:, config:)
|
7
10
|
sp = ServicePort.new(service: service, version: service.version)
|
8
11
|
sp.parse_config(config)
|
9
12
|
sp
|
10
13
|
end
|
11
14
|
|
12
|
-
# haproxy support for port range - leave
|
15
|
+
# haproxy support for port range - leave dest blank
|
13
16
|
# service:
|
14
17
|
# ports:
|
15
|
-
# # src:dest:tcp|http:
|
18
|
+
# # src:dest:tcp|http:round_robin|leastconn
|
16
19
|
# - 5532:5432:tcp:round_robin
|
20
|
+
# - 5532-6000::tcp:round_robin
|
17
21
|
# model:
|
18
22
|
# service_ports:
|
19
23
|
# - external: 5432
|
20
24
|
# internal: 5432
|
21
25
|
# mode: tcp|http
|
22
|
-
# load_bal:
|
26
|
+
# load_bal: round_robin
|
23
27
|
def parse_config(config)
|
24
|
-
ports = config.
|
25
|
-
|
26
|
-
|
27
|
-
self.
|
28
|
-
self.
|
28
|
+
ports = config.match(CONFIG_EXPRESSION)
|
29
|
+
raise MKIt::InvalidPortsConfiguration.new("no match with config expression $#{CONFIG_EXPRESSION}") if ports.nil?
|
30
|
+
|
31
|
+
self.external_port = ports[1]
|
32
|
+
self.internal_port = ports[2]
|
33
|
+
self.mode = ports[3]
|
34
|
+
self.load_bal = ports[4]
|
35
|
+
end
|
36
|
+
|
37
|
+
def load_balance
|
38
|
+
case self.load_bal
|
39
|
+
when /^round_robin$/
|
40
|
+
"roundrobin"
|
41
|
+
when /^leastconn$/
|
42
|
+
"leastconn"
|
43
|
+
else
|
44
|
+
"roundrobin"
|
45
|
+
end
|
29
46
|
end
|
30
47
|
end
|
@@ -1,30 +1,27 @@
|
|
1
1
|
#
|
2
2
|
# MKIt generated file
|
3
3
|
#
|
4
|
-
<%
|
4
|
+
<% service_port.each { |port|%>
|
5
5
|
#
|
6
|
-
# start <%=name%>-<%=external_port%>
|
6
|
+
# start <%=name%>-<%=port.external_port%>
|
7
7
|
#
|
8
|
-
frontend <%=name%>-<%=external_port%>-front
|
9
|
-
bind <%=lease.ip%>:<%=external_port%>
|
10
|
-
mode <%=
|
8
|
+
frontend <%=name%>-<%=port.external_port%>-front
|
9
|
+
bind <%=lease.ip%>:<%=port.external_port%>
|
10
|
+
mode <%=port.mode%>
|
11
11
|
#
|
12
|
-
use_backend <%=name%>-<%=external_port%>-back
|
12
|
+
use_backend <%=name%>-<%=port.external_port%>-back
|
13
13
|
|
14
|
-
backend <%=name%>-<%=external_port%>-back
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
<%end%>
|
23
|
-
<%
|
24
|
-
<%port.service.pod.each { | pod | %>
|
25
|
-
server <%=pod.name%> <%=pod.ip%>:<%=port.internal_port%> <%if port.mode == 'http'%>cookie A<%end%> check<%}%><%}%>
|
26
|
-
#
|
27
|
-
# end of <%=name%>-<%=external_port%>
|
14
|
+
backend <%=name%>-<%=port.external_port%>-back
|
15
|
+
mode <%=port.mode%>
|
16
|
+
balance <%=port.load_balance%>
|
17
|
+
<%if port.mode == 'http'%>
|
18
|
+
option httpclose
|
19
|
+
option forwardfor
|
20
|
+
cookie JSESSIONID prefix
|
21
|
+
<%end%><%port.service.pod.each { | pod | %>
|
22
|
+
server <%=pod.name%> <%=pod.ip%><%unless port.internal_port.nil? || port.internal_port.empty? then%><%=":#{port.internal_port}"%> <%if port.mode == 'http'%>cookie A<%end%> check<%end%>
|
23
|
+
<%}%>
|
28
24
|
#
|
29
|
-
|
30
|
-
|
25
|
+
# end of <%=name%>-<%=port.external_port%>
|
26
|
+
#
|
27
|
+
<%}%>
|
data/lib/mkit/exceptions.rb
CHANGED
@@ -17,6 +17,11 @@ module MKIt
|
|
17
17
|
super(400, message)
|
18
18
|
end
|
19
19
|
end
|
20
|
+
class InvalidPortsConfiguration < BaseException
|
21
|
+
def initialize(message = nil)
|
22
|
+
super(400, message)
|
23
|
+
end
|
24
|
+
end
|
20
25
|
class ServiceNotFoundException < StandardError; end
|
21
26
|
class PodNotFoundException < StandardError; end
|
22
27
|
class AppAlreadyDeployedException < StandardError; end
|
data/lib/mkit/version.rb
CHANGED
data/lib/mkit.rb
CHANGED
data/mkit.gemspec
CHANGED
@@ -6,12 +6,12 @@ require "mkit/version"
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = 'mkit'
|
9
|
-
s.summary = '
|
9
|
+
s.summary = 'Micro Kubernets on Ruby'
|
10
10
|
s.bindir = 'bin'
|
11
|
-
s.homepage = '
|
11
|
+
s.homepage = 'https://github.com/valexsantos/mkit'
|
12
12
|
s.license = 'Apache-2.0'
|
13
13
|
s.rubyforge_project = ''
|
14
|
-
s.description = '
|
14
|
+
s.description = 'Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very) minimalistic k8 cluster with a nice REST API'
|
15
15
|
# s.require_paths = ["."]
|
16
16
|
s.author = 'Vasco Santos'
|
17
17
|
s.email = ['valexsantos@gmail.com']
|
data/samples/apps/rabbitmq.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasco Santos
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ping
|
@@ -290,7 +290,8 @@ dependencies:
|
|
290
290
|
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
292
|
version: 0.2.2
|
293
|
-
description:
|
293
|
+
description: Micro k8s on Ruby - a simple tool to deploy containers to mimic a (very)
|
294
|
+
minimalistic k8 cluster with a nice REST API
|
294
295
|
email:
|
295
296
|
- valexsantos@gmail.com
|
296
297
|
executables:
|
@@ -367,11 +368,11 @@ files:
|
|
367
368
|
- samples/daemontools/log/run
|
368
369
|
- samples/daemontools/run
|
369
370
|
- samples/systemd/mkitd.service
|
370
|
-
homepage:
|
371
|
+
homepage: https://github.com/valexsantos/mkit
|
371
372
|
licenses:
|
372
373
|
- Apache-2.0
|
373
374
|
metadata: {}
|
374
|
-
post_install_message:
|
375
|
+
post_install_message:
|
375
376
|
rdoc_options: []
|
376
377
|
require_paths:
|
377
378
|
- lib
|
@@ -386,8 +387,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
386
387
|
- !ruby/object:Gem::Version
|
387
388
|
version: '0'
|
388
389
|
requirements: []
|
389
|
-
rubygems_version: 3.
|
390
|
-
signing_key:
|
390
|
+
rubygems_version: 3.3.5
|
391
|
+
signing_key:
|
391
392
|
specification_version: 4
|
392
|
-
summary:
|
393
|
+
summary: Micro Kubernets on Ruby
|
393
394
|
test_files: []
|