mkit 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +137 -0
- data/LICENSE +21 -0
- data/README.md +126 -0
- data/Rakefile +54 -0
- data/bin/mkitc +31 -0
- data/bin/mkitd +55 -0
- data/config/database.yml +5 -0
- data/config/mkit_config.yml +15 -0
- data/config/mkitd_config.sh +5 -0
- data/db/migrate/001_setup.rb +105 -0
- data/db/migrate/002_mkit_jobs.rb +17 -0
- data/db/schema.rb +108 -0
- data/lib/mkit/app/controllers/mkitjobs_controller.rb +37 -0
- data/lib/mkit/app/controllers/pods_controller.rb +30 -0
- data/lib/mkit/app/controllers/services_controller.rb +87 -0
- data/lib/mkit/app/helpers/docker_helper.rb +75 -0
- data/lib/mkit/app/helpers/erb_helper.rb +18 -0
- data/lib/mkit/app/helpers/haproxy.rb +41 -0
- data/lib/mkit/app/helpers/interface_helper.rb +17 -0
- data/lib/mkit/app/helpers/services_helper.rb +54 -0
- data/lib/mkit/app/mkit_server.rb +8 -0
- data/lib/mkit/app/model/dns_host.rb +11 -0
- data/lib/mkit/app/model/lease.rb +26 -0
- data/lib/mkit/app/model/mkit_job.rb +48 -0
- data/lib/mkit/app/model/pod.rb +95 -0
- data/lib/mkit/app/model/pool.rb +60 -0
- data/lib/mkit/app/model/service.rb +266 -0
- data/lib/mkit/app/model/service_config.rb +16 -0
- data/lib/mkit/app/model/service_port.rb +30 -0
- data/lib/mkit/app/model/setting.rb +1 -0
- data/lib/mkit/app/model/volume.rb +53 -0
- data/lib/mkit/app/templates/docker/docker_run.sh.erb +1 -0
- data/lib/mkit/app/templates/haproxy/0000_defaults.cfg +23 -0
- data/lib/mkit/app/templates/haproxy/xapp_haproxy.cfg.erb +30 -0
- data/lib/mkit/cmd_runner.rb +27 -0
- data/lib/mkit/config/config.rb +18 -0
- data/lib/mkit/config/environment.rb +26 -0
- data/lib/mkit/config/initializers/001_hash.rb +11 -0
- data/lib/mkit/config/initializers/002_openstruct.rb +7 -0
- data/lib/mkit/config/load_default_configs.rb +29 -0
- data/lib/mkit/config/the_config.yml +3 -0
- data/lib/mkit/ctypes.rb +31 -0
- data/lib/mkit/docker_listener.rb +97 -0
- data/lib/mkit/exceptions.rb +30 -0
- data/lib/mkit/haproxy.rb +48 -0
- data/lib/mkit/job_manager.rb +53 -0
- data/lib/mkit/mkit_dns.rb +54 -0
- data/lib/mkit/mkit_interface.rb +31 -0
- data/lib/mkit/sagas/asaga.rb +11 -0
- data/lib/mkit/sagas/create_pod_saga.rb +28 -0
- data/lib/mkit/sagas/saga_manager.rb +10 -0
- data/lib/mkit/status.rb +47 -0
- data/lib/mkit/utils.rb +51 -0
- data/lib/mkit/version.rb +4 -0
- data/lib/mkit/workers/aworker.rb +11 -0
- data/lib/mkit/workers/haproxy_worker.rb +35 -0
- data/lib/mkit/workers/pod_worker.rb +39 -0
- data/lib/mkit/workers/service_worker.rb +27 -0
- data/lib/mkit/workers/worker_manager.rb +14 -0
- data/lib/mkit.rb +158 -0
- data/mkit.gemspec +40 -0
- data/mkitd +10 -0
- data/samples/apps/postgres.yml +22 -0
- data/samples/apps/rabbitmq.yml +19 -0
- data/samples/daemontools/log/run +44 -0
- data/samples/daemontools/run +42 -0
- data/samples/systemd/mkitd.service +12 -0
- metadata +393 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 03e23a426169a1815c4f92ef46461db9275e60aabe3ac62e9eb57d5a36e34ded
|
4
|
+
data.tar.gz: f05140fed7e69015dcfe19e2f9d52498a7cf260da0ffb31fbcbaddf505f204f0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dcfb2eca9b54bd5871c9899640abba32e6da653f3db94ba9701ccc7271225d0634c77361444c1683f1f71bb138afc4e3d86e416fb930a3f6bf74a6bd93449974
|
7
|
+
data.tar.gz: 9d3efacb12c9dc6959501101d3f2ad31b8367909beb36eb139d7a702e57ad05046363330d253dc6f39c163541c24d62f42ce780aca900ca82754054b93ed4404
|
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
#ruby '2.6.10'
|
4
|
+
|
5
|
+
gem 'net-ping'
|
6
|
+
gem 'dry-container'
|
7
|
+
gem 'sqlite3'
|
8
|
+
gem 'standalone_migrations'
|
9
|
+
|
10
|
+
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
|
11
|
+
gem 'rack', '>= 2.0.6'
|
12
|
+
gem 'pry'
|
13
|
+
gem 'rubydns'
|
14
|
+
gem 'async-dns'
|
15
|
+
# rest http server
|
16
|
+
gem 'sinatra'
|
17
|
+
gem 'thin' # socket server
|
18
|
+
gem 'net_http_unix' # socket client
|
19
|
+
#gem 'puma'
|
20
|
+
|
21
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionpack (7.0.8)
|
5
|
+
actionview (= 7.0.8)
|
6
|
+
activesupport (= 7.0.8)
|
7
|
+
rack (~> 2.0, >= 2.2.4)
|
8
|
+
rack-test (>= 0.6.3)
|
9
|
+
rails-dom-testing (~> 2.0)
|
10
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
11
|
+
actionview (7.0.8)
|
12
|
+
activesupport (= 7.0.8)
|
13
|
+
builder (~> 3.1)
|
14
|
+
erubi (~> 1.4)
|
15
|
+
rails-dom-testing (~> 2.0)
|
16
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
17
|
+
activemodel (7.0.8)
|
18
|
+
activesupport (= 7.0.8)
|
19
|
+
activerecord (7.0.8)
|
20
|
+
activemodel (= 7.0.8)
|
21
|
+
activesupport (= 7.0.8)
|
22
|
+
activesupport (7.0.8)
|
23
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
24
|
+
i18n (>= 1.6, < 2)
|
25
|
+
minitest (>= 5.1)
|
26
|
+
tzinfo (~> 2.0)
|
27
|
+
async (1.31.0)
|
28
|
+
console (~> 1.10)
|
29
|
+
nio4r (~> 2.3)
|
30
|
+
timers (~> 4.1)
|
31
|
+
async-dns (1.3.0)
|
32
|
+
async-io (~> 1.15)
|
33
|
+
async-io (1.38.0)
|
34
|
+
async
|
35
|
+
builder (3.2.4)
|
36
|
+
coderay (1.1.3)
|
37
|
+
concurrent-ruby (1.2.2)
|
38
|
+
console (1.23.2)
|
39
|
+
fiber-annotation
|
40
|
+
fiber-local
|
41
|
+
crass (1.0.6)
|
42
|
+
daemons (1.4.1)
|
43
|
+
dry-container (0.11.0)
|
44
|
+
concurrent-ruby (~> 1.0)
|
45
|
+
erubi (1.12.0)
|
46
|
+
eventmachine (1.2.7)
|
47
|
+
fiber-annotation (0.2.0)
|
48
|
+
fiber-local (1.0.0)
|
49
|
+
i18n (1.14.1)
|
50
|
+
concurrent-ruby (~> 1.0)
|
51
|
+
loofah (2.21.4)
|
52
|
+
crass (~> 1.0.2)
|
53
|
+
nokogiri (>= 1.12.0)
|
54
|
+
method_source (1.0.0)
|
55
|
+
minitest (5.20.0)
|
56
|
+
mustermann (3.0.0)
|
57
|
+
ruby2_keywords (~> 0.0.1)
|
58
|
+
net-ping (2.0.8)
|
59
|
+
net_http_unix (0.2.2)
|
60
|
+
nio4r (2.7.0)
|
61
|
+
nokogiri (1.15.4-x86_64-darwin)
|
62
|
+
racc (~> 1.4)
|
63
|
+
nokogiri (1.15.4-x86_64-linux)
|
64
|
+
racc (~> 1.4)
|
65
|
+
pry (0.14.2)
|
66
|
+
coderay (~> 1.1)
|
67
|
+
method_source (~> 1.0)
|
68
|
+
racc (1.7.3)
|
69
|
+
rack (2.2.8)
|
70
|
+
rack-protection (3.1.0)
|
71
|
+
rack (~> 2.2, >= 2.2.4)
|
72
|
+
rack-test (2.1.0)
|
73
|
+
rack (>= 1.3)
|
74
|
+
rails-dom-testing (2.2.0)
|
75
|
+
activesupport (>= 5.0.0)
|
76
|
+
minitest
|
77
|
+
nokogiri (>= 1.6)
|
78
|
+
rails-html-sanitizer (1.6.0)
|
79
|
+
loofah (~> 2.21)
|
80
|
+
nokogiri (~> 1.14)
|
81
|
+
railties (7.0.8)
|
82
|
+
actionpack (= 7.0.8)
|
83
|
+
activesupport (= 7.0.8)
|
84
|
+
method_source
|
85
|
+
rake (>= 12.2)
|
86
|
+
thor (~> 1.0)
|
87
|
+
zeitwerk (~> 2.5)
|
88
|
+
rake (13.1.0)
|
89
|
+
ruby2_keywords (0.0.5)
|
90
|
+
rubydns (2.0.2)
|
91
|
+
async-dns (~> 1.0)
|
92
|
+
sinatra (3.1.0)
|
93
|
+
mustermann (~> 3.0)
|
94
|
+
rack (~> 2.2, >= 2.2.4)
|
95
|
+
rack-protection (= 3.1.0)
|
96
|
+
tilt (~> 2.0)
|
97
|
+
sinatra-activerecord (2.0.27)
|
98
|
+
activerecord (>= 4.1)
|
99
|
+
sinatra (>= 1.0)
|
100
|
+
sqlite3 (1.6.8-x86_64-darwin)
|
101
|
+
sqlite3 (1.6.8-x86_64-linux)
|
102
|
+
standalone_migrations (7.1.2)
|
103
|
+
activerecord (>= 6.0.0, < 7.1.0)
|
104
|
+
nokogiri (~> 1.14)
|
105
|
+
railties (>= 6.0.0, < 7.1.0)
|
106
|
+
rake (>= 10.0)
|
107
|
+
thin (1.8.2)
|
108
|
+
daemons (~> 1.0, >= 1.0.9)
|
109
|
+
eventmachine (~> 1.0, >= 1.0.4)
|
110
|
+
rack (>= 1, < 3)
|
111
|
+
thor (1.3.0)
|
112
|
+
tilt (2.3.0)
|
113
|
+
timers (4.3.5)
|
114
|
+
tzinfo (2.0.6)
|
115
|
+
concurrent-ruby (~> 1.0)
|
116
|
+
zeitwerk (2.6.12)
|
117
|
+
|
118
|
+
PLATFORMS
|
119
|
+
x86_64-darwin-22
|
120
|
+
x86_64-linux
|
121
|
+
|
122
|
+
DEPENDENCIES
|
123
|
+
async-dns
|
124
|
+
dry-container
|
125
|
+
net-ping
|
126
|
+
net_http_unix
|
127
|
+
pry
|
128
|
+
rack (>= 2.0.6)
|
129
|
+
rubydns
|
130
|
+
sinatra
|
131
|
+
sinatra-activerecord
|
132
|
+
sqlite3
|
133
|
+
standalone_migrations
|
134
|
+
thin
|
135
|
+
|
136
|
+
BUNDLED WITH
|
137
|
+
2.4.10
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Vasco Santos
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# MKIt - Micro Kubernetes on Ruby
|
2
|
+
|
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
|
+
|
5
|
+
It contains a internal DNS and uses HAProxy for routing/balancing/fail-over for Pods access.
|
6
|
+
The database is a simple sqlite3 db and the server is a Sinatra based application.
|
7
|
+
|
8
|
+
The client is not done yet, only includes a simple wrapper to `curl`
|
9
|
+
|
10
|
+
The daemon is responsible for HAProxy pods routing configuration. It also provides the cluster DNS and manages the internal host interface.
|
11
|
+
|
12
|
+
## Requirements
|
13
|
+
|
14
|
+
* Ruby
|
15
|
+
* HAProxy
|
16
|
+
* Docker
|
17
|
+
* Linux (iproute2 package)
|
18
|
+
|
19
|
+
## Running
|
20
|
+
|
21
|
+
The `daemon` requires `root` user, you can run it directly on the repository root...
|
22
|
+
|
23
|
+
```
|
24
|
+
# ./mkitd --help
|
25
|
+
Usage: mkitd [options]
|
26
|
+
-c config-dir set the config dir (default is /etc/mkit)
|
27
|
+
-p port set the port (default is 4567)
|
28
|
+
-b bind specify bind address (e.g. /tmp/app.sock)
|
29
|
+
-s server specify rack server/handler
|
30
|
+
-q turn on quiet mode (default is off)
|
31
|
+
-x turn on the mutex lock (default is off)
|
32
|
+
-e env set the environment (default is development)
|
33
|
+
-o addr set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))
|
34
|
+
|
35
|
+
```
|
36
|
+
|
37
|
+
or after the `gem install mkit-<version>.gem`. The server and client will be installed on host.
|
38
|
+
|
39
|
+
```
|
40
|
+
# mkitd
|
41
|
+
...
|
42
|
+
0.65s info: MKIt is up and running! [ec=0xbe0] [pid=45804] [2023-12-29 15:46:04 +0000]
|
43
|
+
```
|
44
|
+
|
45
|
+
There's also samples on the samples dir, for daemontools and systemd.
|
46
|
+
|
47
|
+
### Accessing the API
|
48
|
+
|
49
|
+
* Create new service
|
50
|
+
* `mkitc POST services -F "file=@samples/apps/rabbitmq.yml"`
|
51
|
+
* Update service
|
52
|
+
* `mkitc PUT services/{id|service_name} -F "file=@samples/apps/rabbitmq.yml"`
|
53
|
+
* Get services
|
54
|
+
* `mkitc GET services/{id|service_name}[?verbose=true]`
|
55
|
+
* Delete service
|
56
|
+
* `mkitc DELETE services/{id|service_name}`
|
57
|
+
* List services
|
58
|
+
* `mkitc GET services?verbose=true`
|
59
|
+
* Control service
|
60
|
+
* `mkitc PUT services/{id|service_name}/start`
|
61
|
+
* `mkitc PUT services/{id|service_name}/stop`
|
62
|
+
|
63
|
+
Example:
|
64
|
+
|
65
|
+
```
|
66
|
+
id name addr ports status
|
67
|
+
4 postgres 10.210.198.10 tcp/5432 RUNNING
|
68
|
+
pods
|
69
|
+
id pod_id pod_name pod_ip status
|
70
|
+
19 4ce31a007211 5d148a16f3aa 172.17.0.2 RUNNING
|
71
|
+
```
|
72
|
+
The service `postgres` is available on IP `10.210.198.10:5432`
|
73
|
+
|
74
|
+
## Configuration
|
75
|
+
|
76
|
+
On startup, configuration files on `config` directory will be copied to `/etc/mkit`. HAProxy config dir and control commands are defined on `mkit_config.yml`
|
77
|
+
|
78
|
+
You must configure `haproxy` to use config directory. e.g. on Ubuntu
|
79
|
+
|
80
|
+
```
|
81
|
+
# /etc/default/haproxy
|
82
|
+
|
83
|
+
# Defaults file for HAProxy
|
84
|
+
#
|
85
|
+
# This is sourced by both, the initscript and the systemd unit file, so do not
|
86
|
+
# treat it as a shell script fragment.
|
87
|
+
|
88
|
+
# Change the config file location if needed
|
89
|
+
CONFIG="/etc/haproxy/haproxy.d"
|
90
|
+
|
91
|
+
# Add extra flags here, see haproxy(1) for a few options
|
92
|
+
#EXTRAOPTS="-de -m 16"
|
93
|
+
```
|
94
|
+
|
95
|
+
### Service
|
96
|
+
|
97
|
+
```
|
98
|
+
service:
|
99
|
+
name: rabbitmq # unique
|
100
|
+
image: rabbitmq:3-management-alpine # image
|
101
|
+
network: bridge # docker network
|
102
|
+
ports: # haproxy port mapping: <external_port>|<internal_port>|<tcp|http>|round_robin
|
103
|
+
- 5672:5672:tcp:round_robin
|
104
|
+
- 80:15672:http:round_robin
|
105
|
+
resources:
|
106
|
+
max_replicas: 1
|
107
|
+
min_replicas: 1
|
108
|
+
volumes:
|
109
|
+
- docker://mkit_rabbitmq_data:/var/lib/rabbitmq # a docker volume
|
110
|
+
- /var/log/rabbitmq/logs:/var/log/rabbitmq # a local volume
|
111
|
+
environment:
|
112
|
+
RABBITMQ_DEFAULT_USER: admin
|
113
|
+
RABBITMQ_DEFAULT_PASS: admin
|
114
|
+
RABBITMQ_DEFAULT_VHOST: mkit
|
115
|
+
```
|
116
|
+
|
117
|
+
## Development
|
118
|
+
|
119
|
+
* build the gem
|
120
|
+
* `rake package`
|
121
|
+
* console
|
122
|
+
* `rake console`
|
123
|
+
|
124
|
+
# Thanks
|
125
|
+
|
126
|
+
For my kids. :)
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
ENV["SINATRA_ENV"] ||= "development"
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'sinatra/activerecord/rake'
|
5
|
+
require 'standalone_migrations'
|
6
|
+
require 'rubygems/package_task'
|
7
|
+
require 'rubygems/specification'
|
8
|
+
require 'rake/testtask'
|
9
|
+
require 'pry'
|
10
|
+
require 'fileutils'
|
11
|
+
require 'bundler/setup'
|
12
|
+
require 'dry-container'
|
13
|
+
require 'sinatra/activerecord'
|
14
|
+
require 'rubydns'
|
15
|
+
require_relative 'lib/mkit/version.rb'
|
16
|
+
require_relative 'lib/mkit/utils'
|
17
|
+
require_relative 'lib/mkit'
|
18
|
+
|
19
|
+
$LOAD_PATH.unshift File.expand_path('lib')
|
20
|
+
rails_env=ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
|
21
|
+
# db migrations, use database config
|
22
|
+
ENV["DATABASE_URL"]=MKIt::Utils.db_config_to_uri(rails_env)
|
23
|
+
|
24
|
+
desc 'Builds the gem'
|
25
|
+
task :package do
|
26
|
+
sh %{gem build "mkit.gemspec"}
|
27
|
+
end
|
28
|
+
|
29
|
+
task :install => [:package] do
|
30
|
+
sh %{gem install mkit-#{MKIt::VERSION}.gem}
|
31
|
+
end
|
32
|
+
|
33
|
+
desc 'Copy rb to packaging dir'
|
34
|
+
task :build => [:init] do
|
35
|
+
FileUtils.cp_r('app', 'target/build', {:remove_destination=>true})
|
36
|
+
FileUtils.cp_r('config', 'target/build', {:remove_destination=>true})
|
37
|
+
FileUtils.cp_r('bin', 'target/build', {:remove_destination=>true})
|
38
|
+
FileUtils.cp_r('lib', 'target/build', {:remove_destination=>true})
|
39
|
+
FileUtils.cp_r('config.ru', 'target/build', {:remove_destination=>true})
|
40
|
+
end
|
41
|
+
|
42
|
+
desc 'Create build dirs'
|
43
|
+
task :init do
|
44
|
+
FileUtils.mkdir_p('target/build')
|
45
|
+
FileUtils.mkdir_p('target/package')
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "Rake Console"
|
49
|
+
task :console do
|
50
|
+
Pry.start
|
51
|
+
end
|
52
|
+
|
53
|
+
StandaloneMigrations::Tasks.load_tasks
|
54
|
+
|
data/bin/mkitc
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
class MKItClient
|
7
|
+
|
8
|
+
VERBS = %w{GET POST PUT DELETE}
|
9
|
+
def usage
|
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
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
if ARGV.size < 2 || VERBS.index(ARGV[0]).nil?
|
20
|
+
usage
|
21
|
+
exit 1
|
22
|
+
end
|
23
|
+
|
24
|
+
response = %x{curl -sL -X #{ARGV[0]} http://localhost:4567/#{ARGV[1]} #{ARGV[2]} #{ARGV[3]} #{ARGV[4]} #{ARGV[5]} #{ARGV[6]} #{ARGV[7]}}
|
25
|
+
puts response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
client = MKItClient.new
|
30
|
+
client.run
|
31
|
+
|
data/bin/mkitd
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
PARAMS_CONFIG = {}
|
7
|
+
|
8
|
+
def up
|
9
|
+
require 'sinatra'
|
10
|
+
require 'sinatra/base'
|
11
|
+
require 'mkit'
|
12
|
+
# defaults
|
13
|
+
PARAMS_CONFIG[:bind] ||= "localhost"
|
14
|
+
PARAMS_CONFIG[:port] ||= 4567
|
15
|
+
#
|
16
|
+
MKIt.startup(options: PARAMS_CONFIG)
|
17
|
+
|
18
|
+
use Rack::MethodOverride
|
19
|
+
use ServicesController
|
20
|
+
use MkitJobsController
|
21
|
+
|
22
|
+
# sinatra::base ignores in parameters
|
23
|
+
# set it here or via configure...
|
24
|
+
Sinatra::Application.run!({port: PARAMS_CONFIG[:port], bind: PARAMS_CONFIG[:bind] })
|
25
|
+
# MKIt::Server.run
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
#
|
30
|
+
if ARGV.any?
|
31
|
+
require 'optparse'
|
32
|
+
parser = OptionParser.new do |op|
|
33
|
+
op.on('-c config-dir', 'set the config dir (default is /etc/mkit)') { |val| PARAMS_CONFIG[:config_dir] = val }
|
34
|
+
op.on('-p port', 'set the port (default is 4567)') { |val| PARAMS_CONFIG[:port] = Integer(val) }
|
35
|
+
op.on('-b bind ', 'specify bind address (e.g. /tmp/app.sock)') { |val| PARAMS_CONFIG[:bind] = val }
|
36
|
+
op.on('-s server', 'specify rack server/handler') { |val| PARAMS_CONFIG[:server] = val }
|
37
|
+
op.on('-q', 'turn on quiet mode (default is off)') { PARAMS_CONFIG[:quiet] = true }
|
38
|
+
op.on('-x', 'turn on the mutex lock (default is off)') { PARAMS_CONFIG[:lock] = true }
|
39
|
+
op.on('-e env', 'set the environment (default is development)') do |val|
|
40
|
+
ENV['RACK_ENV'] = val
|
41
|
+
PARAMS_CONFIG[:environment] = val.to_sym
|
42
|
+
end
|
43
|
+
op.on('-o addr', "set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))") do |val|
|
44
|
+
PARAMS_CONFIG[:bind] = val
|
45
|
+
end
|
46
|
+
end
|
47
|
+
begin
|
48
|
+
parser.parse!(ARGV.dup)
|
49
|
+
rescue StandardError => e
|
50
|
+
PARAMS_CONFIG[:optparse_error] = e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
up
|
55
|
+
|
data/config/database.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
mkit:
|
2
|
+
my_network:
|
3
|
+
ip: 10.210.198.1
|
4
|
+
haproxy:
|
5
|
+
config_dir: /etc/haproxy/haproxy.d
|
6
|
+
ctrl:
|
7
|
+
start: /etc/init.d/haproxy start
|
8
|
+
stop: /etc/init.d/haproxy stop
|
9
|
+
reload: /etc/init.d/haproxy restart
|
10
|
+
restart: /etc/init.d/haproxy restart
|
11
|
+
status: /etc/init.d/haproxy status
|
12
|
+
bin: /usr/sbin/haproxy
|
13
|
+
database:
|
14
|
+
env: development
|
15
|
+
|
@@ -0,0 +1,105 @@
|
|
1
|
+
class Setup < ActiveRecord::Migration[5.1]
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :services do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :image
|
7
|
+
t.string :qdm
|
8
|
+
t.string :command
|
9
|
+
t.integer :max_replicas, default: 1
|
10
|
+
t.integer :min_replicas, default: 1
|
11
|
+
t.string :lease_id # ip config
|
12
|
+
t.string :pods_network, default: 'mkit' # docker network bridge|specific
|
13
|
+
t.integer :version # active version - later
|
14
|
+
t.string :status
|
15
|
+
t.timestamp :created_at, default: DateTime.now
|
16
|
+
t.timestamp :updated_at
|
17
|
+
end
|
18
|
+
|
19
|
+
add_index "services", ["name"], :name => "services_name_id"
|
20
|
+
|
21
|
+
create_table :service_configs do |t|
|
22
|
+
t.string :service_id
|
23
|
+
t.string :key
|
24
|
+
t.string :value
|
25
|
+
t.string :ctype # docker_param|env|volume?|....
|
26
|
+
t.integer :version
|
27
|
+
end
|
28
|
+
|
29
|
+
create_table :pods do |t|
|
30
|
+
t.string :service_id
|
31
|
+
t.string :pod_id
|
32
|
+
t.string :name
|
33
|
+
t.string :ip
|
34
|
+
t.string :image
|
35
|
+
t.string :status
|
36
|
+
t.integer :version
|
37
|
+
end
|
38
|
+
|
39
|
+
create_table :volumes do |t|
|
40
|
+
t.string :service_id
|
41
|
+
t.string :name
|
42
|
+
t.string :path
|
43
|
+
t.string :ctype # docker|local....
|
44
|
+
t.string :status
|
45
|
+
t.integer :version
|
46
|
+
end
|
47
|
+
|
48
|
+
create_table :service_ports do |t|
|
49
|
+
t.string :service_id
|
50
|
+
t.string :internal_port
|
51
|
+
t.string :external_port
|
52
|
+
t.string :mode # tcp | http
|
53
|
+
t.string :load_bal
|
54
|
+
t.integer :version
|
55
|
+
end
|
56
|
+
|
57
|
+
create_table :pools do |t|
|
58
|
+
t.string :name
|
59
|
+
t.string :ip
|
60
|
+
t.string :range
|
61
|
+
t.string :netmask
|
62
|
+
t.string :status # in_use|exausted
|
63
|
+
t.boolean :preferred, default: false
|
64
|
+
end
|
65
|
+
|
66
|
+
create_table :leases do |t|
|
67
|
+
t.string :pool_id
|
68
|
+
t.string :service_id
|
69
|
+
t.string :interface_name
|
70
|
+
t.string :interface_type # tun|tap
|
71
|
+
t.string :status # reserved|in_use|expired|deleted|....
|
72
|
+
t.string :ip
|
73
|
+
t.timestamp :expires_at
|
74
|
+
end
|
75
|
+
|
76
|
+
create_table :dns_hosts do |t|
|
77
|
+
t.string :service_id
|
78
|
+
t.string :pod_id
|
79
|
+
t.string :name # fqdn
|
80
|
+
t.string :ip
|
81
|
+
t.string :ipv6
|
82
|
+
end
|
83
|
+
|
84
|
+
# mkit configs
|
85
|
+
# e.g.
|
86
|
+
# default network pool
|
87
|
+
# rabbitmq address
|
88
|
+
# haproxy
|
89
|
+
# config.d path
|
90
|
+
# reload command - pq quero usar o daemontools
|
91
|
+
# stop
|
92
|
+
# start
|
93
|
+
# status
|
94
|
+
#
|
95
|
+
create_table :settings do |t|
|
96
|
+
t.string :key
|
97
|
+
t.string :value
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def down
|
102
|
+
drop_table :services
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class MkitJobs < ActiveRecord::Migration[5.1]
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :mkit_jobs do |t|
|
5
|
+
t.string :topic
|
6
|
+
t.string :service_id
|
7
|
+
t.string :pod_id
|
8
|
+
t.string :status
|
9
|
+
t.string :retries
|
10
|
+
t.string :payload
|
11
|
+
t.timestamp :created_at
|
12
|
+
t.timestamp :updated_at
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|