mkit 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -15
- data/bin/mkitc +142 -15
- data/lib/mkit/app/controllers/services_controller.rb +0 -7
- data/lib/mkit/app/helpers/docker_helper.rb +3 -3
- data/lib/mkit/app/mkit_server.rb +13 -1
- data/lib/mkit/app/model/pool.rb +8 -9
- data/lib/mkit/app/model/service.rb +9 -28
- 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
- metadata +6 -5
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
|
|
@@ -16,9 +16,16 @@ The daemon is responsible for HAProxy pods routing configuration. It also provid
|
|
16
16
|
* Docker
|
17
17
|
* Linux (iproute2 package)
|
18
18
|
|
19
|
+
## Install
|
20
|
+
|
21
|
+
This is a simple ruby gem, so to install run
|
22
|
+
```
|
23
|
+
# gem install mkit
|
24
|
+
```
|
25
|
+
|
19
26
|
## Running
|
20
27
|
|
21
|
-
The `daemon` requires `root` user, you can run it directly on the repository root...
|
28
|
+
The `daemon` requires `root` user (due to `ip` and `haproxy`), you can run it directly on the repository root...
|
22
29
|
|
23
30
|
```
|
24
31
|
# ./mkitd --help
|
@@ -47,22 +54,23 @@ There's also samples on the samples dir, for daemontools and systemd.
|
|
47
54
|
### Accessing the API
|
48
55
|
|
49
56
|
* Create new service
|
50
|
-
* `mkitc
|
57
|
+
* `mkitc create samples/apps/rabbitmq.yml`
|
51
58
|
* Update service
|
52
|
-
* `mkitc
|
53
|
-
* Get
|
54
|
-
* `mkitc
|
59
|
+
* `mkitc update samples/apps/rabbitmq.yml`
|
60
|
+
* Get service
|
61
|
+
* `mkitc ps {id|service_name}`
|
55
62
|
* Delete service
|
56
|
-
* `mkitc
|
63
|
+
* `mkitc rm {id|service_name}`
|
57
64
|
* List services
|
58
|
-
* `mkitc
|
65
|
+
* `mkitc ps [-v (verbose)]`
|
59
66
|
* Control service
|
60
|
-
* `mkitc
|
61
|
-
* `mkitc
|
67
|
+
* `mkitc start {id|service_name}`
|
68
|
+
* `mkitc stop {id|service_name}`
|
62
69
|
|
63
70
|
Example:
|
64
71
|
|
65
72
|
```
|
73
|
+
$ mkitc ps postgres
|
66
74
|
id name addr ports status
|
67
75
|
4 postgres 10.210.198.10 tcp/5432 RUNNING
|
68
76
|
pods
|
@@ -98,15 +106,19 @@ CONFIG="/etc/haproxy/haproxy.d"
|
|
98
106
|
service:
|
99
107
|
name: rabbitmq # unique
|
100
108
|
image: rabbitmq:3-management-alpine # image
|
101
|
-
network: bridge # docker network
|
102
|
-
ports: # haproxy port mapping
|
109
|
+
network: bridge # docker network - it will be created if it does not exists
|
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
|
103
115
|
- 5672:5672:tcp:round_robin
|
104
116
|
- 80:15672:http:round_robin
|
105
117
|
resources:
|
106
118
|
max_replicas: 1
|
107
119
|
min_replicas: 1
|
108
120
|
volumes:
|
109
|
-
- docker://mkit_rabbitmq_data:/var/lib/rabbitmq # a docker volume
|
121
|
+
- docker://mkit_rabbitmq_data:/var/lib/rabbitmq # a docker volume - it will be created if it does not exists
|
110
122
|
- /var/log/rabbitmq/logs:/var/log/rabbitmq # a local volume
|
111
123
|
environment:
|
112
124
|
RABBITMQ_DEFAULT_USER: admin
|
data/bin/mkitc
CHANGED
@@ -2,30 +2,157 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
|
+
require 'optparse'
|
6
|
+
require 'yaml'
|
7
|
+
require 'net/http'
|
8
|
+
require 'json'
|
9
|
+
require 'net_http_unix'
|
10
|
+
require 'securerandom'
|
5
11
|
|
6
12
|
class MKItClient
|
7
13
|
|
8
|
-
|
9
|
-
|
10
|
-
puts
|
11
|
-
puts "usage: mkitc <verb> <path>"
|
12
|
-
puts " where <verb> is one of GET | POST | PUT | DELETE"
|
13
|
-
puts "e.g."
|
14
|
-
puts " mkitc GET applications"
|
15
|
-
puts
|
14
|
+
def initialize
|
15
|
+
@client = NetX::HTTPUnix.new("localhost",4567)
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
def parse_args(args)
|
19
|
+
request = nil
|
20
|
+
case args[0]
|
21
|
+
when /^ps$/
|
22
|
+
if args.include?('-v')
|
23
|
+
params = {verbose: 'true'}
|
24
|
+
args.delete('-v')
|
25
|
+
else
|
26
|
+
params = {}
|
27
|
+
end
|
28
|
+
case args.size
|
29
|
+
when 1
|
30
|
+
#mkitc ps [-v] GET services[?verbose=true]
|
31
|
+
request = { verb: :get, uri: '/services', params: params }
|
32
|
+
when 2
|
33
|
+
#mkitc ps {id} GET services/{id}
|
34
|
+
id = args[1]
|
35
|
+
request = { verb: :get, uri: "/services/#{id}" }
|
36
|
+
else
|
37
|
+
raise 'invalid parameters'
|
38
|
+
end
|
39
|
+
when /^config:show$/
|
40
|
+
#mkitc config:show {id} => GET services/{id}/config
|
41
|
+
#TODO
|
42
|
+
when /^stop$/
|
43
|
+
#mkitc stop {id} => PUT services/{id}/stop
|
44
|
+
case args.size
|
45
|
+
when 2
|
46
|
+
id = args[1]
|
47
|
+
request = { verb: :put, uri: "/services/#{id}/stop" }
|
48
|
+
else
|
49
|
+
raise 'invalid parameters'
|
50
|
+
end
|
51
|
+
when /^start$/
|
52
|
+
#mkitc start {id} => PUT services/{id}/start
|
53
|
+
case args.size
|
54
|
+
when 2
|
55
|
+
id = args[1]
|
56
|
+
request = { verb: :put, uri: "/services/#{id}/start" }
|
57
|
+
else
|
58
|
+
raise 'invalid parameters'
|
59
|
+
end
|
60
|
+
when /^rm$/
|
61
|
+
#mkitc rm {id} => DELETE services/{id}
|
62
|
+
case args.size
|
63
|
+
when 2
|
64
|
+
id = args[1]
|
65
|
+
request = { verb: :delete, uri: "/services/#{id}" }
|
66
|
+
else
|
67
|
+
raise 'invalid parameters'
|
68
|
+
end
|
69
|
+
when /^create$/
|
70
|
+
#mkitc create service.yaml => POST services service.yaml
|
71
|
+
case args.size
|
72
|
+
when 2
|
73
|
+
file = args[1]
|
74
|
+
request = { verb: :post, uri: "/services", file: file }
|
75
|
+
else
|
76
|
+
raise 'invalid parameters'
|
77
|
+
end
|
78
|
+
when /^update$/
|
79
|
+
#mkitc update service.yaml => PUT services/{id} service.yaml
|
80
|
+
case args.size
|
81
|
+
when 2
|
82
|
+
file = args[1]
|
83
|
+
yaml = YAML.load_file(file)
|
84
|
+
if yaml["service"].nil?
|
85
|
+
raise 'invalid configuration file'
|
86
|
+
else
|
87
|
+
id = yaml["service"]["name"]
|
88
|
+
request = { verb: :put, uri: "/services/#{id}", file: file }
|
89
|
+
end
|
90
|
+
else
|
91
|
+
raise 'invalid parameters'
|
92
|
+
end
|
93
|
+
else
|
94
|
+
raise "Usage: invalid parameters"
|
22
95
|
end
|
96
|
+
request
|
97
|
+
end
|
98
|
+
|
99
|
+
def doIt(args)
|
100
|
+
operation = parse_args(args)
|
101
|
+
puts request(operation).body
|
102
|
+
end
|
103
|
+
|
104
|
+
def request(request)
|
105
|
+
req = nil
|
106
|
+
uri = request[:uri]
|
107
|
+
unless request[:params].nil? || request[:params].empty?
|
108
|
+
uri = uri + '?' + request[:params].map{|k,v| "#{k}=#{v}"}.join('&')
|
109
|
+
end
|
110
|
+
case request[:verb]
|
111
|
+
when :post
|
112
|
+
req = Net::HTTP::Post.new(uri)
|
113
|
+
unless request[:file].nil?
|
114
|
+
(body, boundary) = attach(request[:file])
|
115
|
+
req.body = body
|
116
|
+
req["Content-Type"] = "multipart/form-data, boundary=#{boundary}"
|
117
|
+
end
|
118
|
+
when :put
|
119
|
+
req = Net::HTTP::Put.new(uri)
|
120
|
+
unless request[:file].nil?
|
121
|
+
(body, boundary) = attach(request[:file])
|
122
|
+
req.body = body
|
123
|
+
req["Content-Type"] = "multipart/form-data, boundary=#{boundary}"
|
124
|
+
end
|
125
|
+
when :patch
|
126
|
+
req = Net::HTTP::Patch.new(uri)
|
127
|
+
when :get
|
128
|
+
req = Net::HTTP::Get.new(uri)
|
129
|
+
when :delete
|
130
|
+
req = Net::HTTP::Delete.new(uri)
|
131
|
+
end
|
132
|
+
@client.request(req)
|
133
|
+
end
|
23
134
|
|
24
|
-
|
25
|
-
|
135
|
+
def attach(file)
|
136
|
+
boundary=SecureRandom.alphanumeric
|
137
|
+
body = []
|
138
|
+
body << "--#{boundary}\r\n"
|
139
|
+
body << "Content-Disposition: form-data; name=file; filename='#{File.basename(file)}'\r\n"
|
140
|
+
body << "Content-Type: text/plain\r\n"
|
141
|
+
body << "\r\n"
|
142
|
+
body << File.read(file)
|
143
|
+
body << "\r\n--#{boundary}--\r\n"
|
144
|
+
[ body.join, boundary]
|
26
145
|
end
|
27
146
|
end
|
28
147
|
|
148
|
+
#
|
149
|
+
# go
|
150
|
+
#
|
29
151
|
client = MKItClient.new
|
30
|
-
client.
|
152
|
+
client.doIt(ARGV.dup)
|
153
|
+
#
|
154
|
+
# if ARGV.any?
|
155
|
+
# parse args
|
156
|
+
# host, socket, config file
|
157
|
+
# end
|
31
158
|
|
@@ -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
|
-
|
@@ -38,9 +38,9 @@ module MKIt
|
|
38
38
|
MKIt::CmdRunner.run("docker network create #{network_name}")
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
x = MKIt::CmdRunner.run("docker network
|
43
|
-
|
41
|
+
def network_exists?(network_name)
|
42
|
+
x = MKIt::CmdRunner.run("docker network ls")
|
43
|
+
x.match(/\b#{network_name}\b/)
|
44
44
|
end
|
45
45
|
|
46
46
|
def dettach_network(network_id, instance_id)
|
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
|
data/lib/mkit/app/model/pool.rb
CHANGED
@@ -16,21 +16,20 @@ class Pool < ActiveRecord::Base
|
|
16
16
|
ips = range.split('-')
|
17
17
|
next_ip = ips[0]
|
18
18
|
next_ip = next_ip.to_i
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
ip_add = self.ip.split('.')
|
20
|
+
while next_ip <= ips[1].to_i + 1 do
|
21
|
+
if (lease.select{|l| l.ip == "#{ip_add[0]}.#{ip_add[1]}.#{ip_add[2]}.#{next_ip}"}.size == 0)
|
22
|
+
break
|
23
|
+
else
|
24
|
+
next_ip+=1
|
24
25
|
end
|
25
|
-
|
26
|
+
end
|
27
|
+
|
26
28
|
if next_ip > ips[1].to_i
|
27
29
|
self.status = MKIt::PoolStatus::EXAUSTED
|
28
30
|
self.save
|
29
31
|
raise PoolExaustedException.new
|
30
32
|
end
|
31
|
-
|
32
|
-
ip_add = self.ip.split('.')
|
33
|
-
|
34
33
|
"#{ip_add[0]}.#{ip_add[1]}.#{ip_add[2]}.#{next_ip}"
|
35
34
|
end
|
36
35
|
|
@@ -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
|
#
|
@@ -46,13 +42,6 @@ class Service < ActiveRecord::Base
|
|
46
42
|
status: MKIt::Status::CREATING
|
47
43
|
)
|
48
44
|
|
49
|
-
# docker network
|
50
|
-
if config.network.nil? || config.network.empty?
|
51
|
-
srv.pods_network="mkit"
|
52
|
-
else
|
53
|
-
srv.pods_network=config.network
|
54
|
-
end
|
55
|
-
|
56
45
|
# reserve pool ip
|
57
46
|
srv.lease = Pool.find_by_name(MKIt::Utils.me).reserve_for(srv)
|
58
47
|
|
@@ -91,6 +80,14 @@ class Service < ActiveRecord::Base
|
|
91
80
|
end
|
92
81
|
self.max_replicas = self.min_replicas if self.min_replicas > self.max_replicas
|
93
82
|
|
83
|
+
# docker network
|
84
|
+
if config.network.nil? || config.network.empty?
|
85
|
+
self.pods_network="mkit"
|
86
|
+
else
|
87
|
+
self.pods_network=config.network
|
88
|
+
end
|
89
|
+
self.create_pods_network
|
90
|
+
|
94
91
|
# haproxy ports
|
95
92
|
self.service_port = []
|
96
93
|
config.ports&.each do |p|
|
@@ -130,16 +127,13 @@ class Service < ActiveRecord::Base
|
|
130
127
|
end
|
131
128
|
|
132
129
|
def create_pods_network
|
133
|
-
|
134
|
-
create_network(self.pods_network) if netw.nil?
|
130
|
+
create_network(self.pods_network) if !network_exists?(self.pods_network)
|
135
131
|
end
|
136
132
|
|
137
133
|
def deploy_network
|
138
134
|
# create service interface...
|
139
135
|
self.lease.confirm
|
140
136
|
self.lease.up
|
141
|
-
# ...and pods network
|
142
|
-
self.create_pods_network
|
143
137
|
end
|
144
138
|
|
145
139
|
def add_volume(volume_config)
|
@@ -201,19 +195,6 @@ class Service < ActiveRecord::Base
|
|
201
195
|
#
|
202
196
|
# ha proxy configs & template
|
203
197
|
#
|
204
|
-
def public_ports
|
205
|
-
self.service_port.each.map{|p| p.external_port}.uniq
|
206
|
-
end
|
207
|
-
|
208
|
-
def ports_by_external(external_port)
|
209
|
-
self.service_port.where('external_port = ?', external_port)
|
210
|
-
end
|
211
|
-
|
212
|
-
def ports_mode_by_external(external_port)
|
213
|
-
ports = self.service_port.where('external_port = ?', external_port).first
|
214
|
-
ports.mode if ports
|
215
|
-
end
|
216
|
-
|
217
198
|
def update_proxy
|
218
199
|
MkitJob.publish(topic: :update_proxy_config, application_id: self.id, data: proxy_config)
|
219
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']
|
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
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,7 +368,7 @@ 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: {}
|
@@ -389,5 +390,5 @@ requirements: []
|
|
389
390
|
rubygems_version: 3.3.5
|
390
391
|
signing_key:
|
391
392
|
specification_version: 4
|
392
|
-
summary:
|
393
|
+
summary: Micro Kubernets on Ruby
|
393
394
|
test_files: []
|