forked from pigmej/mcpinstall
/
setup_k8s.py
executable file
·106 lines (83 loc) · 3.86 KB
/
setup_k8s.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/env python
from solar.core.resource import composer as cr
from solar.core.resource import resource as rs
from solar.events.controls import Dep
from solar.events.controls import React
from solar.events.api import add_event
from itertools import combinations
def setup_master():
master = cr.create('kube-node-master', 'k8s/node', {'name': 'kube-node-master',
'ip': '10.0.0.3',
'ssh_user': 'vagrant',
'ssh_password': 'vagrant',
'ssh_key': None})['kube-node-master']
etcd = cr.create('etcd', 'k8s/etcd', {'listen_client_port': 4001})['etcd']
master.connect(etcd, {'name': 'listen_client_host'})
etcd.connect(etcd, {'listen_client_host': 'listen_client_url',
'listen_client_port': 'listen_client_url'})
kubernetes = cr.create('k8s-master', 'k8s/kubernetes', {'master_port': 8080})['k8s-master']
master.connect(kubernetes, {'name': 'master_host'})
etcd.connect(kubernetes, {'listen_client_url': 'etcd_servers'})
kubernetes.connect(kubernetes, {'master_port': 'master_address',
'master_host': 'master_address'})
calico = cr.create('calico-master', 'k8s/calico', {})['calico-master']
master.connect(calico, {'ip': 'ip'})
etcd.connect(calico, {'listen_client_url': 'etcd_authority'})
calico.connect(calico, {'etcd_authority': 'etcd_authority_internal'})
def setup_nodes(num=1):
kube_nodes = []
etcd = rs.load('etcd')
kubernetes_master = rs.load('k8s-master')
calico_master = rs.load('calico-master')
for i in xrange(num):
j = i + 1
kube_node = cr.create(
'kube-node-%d' % j,
'k8s/node',
{'name': 'kube-node-%d' % j,
'ip': '10.0.0.%d' % (3 + j),
'ssh_user': 'vagrant',
'ssh_password': 'vagrant',
'ssh_key': None}
)['kube-node-%d' % j]
iface_node = cr.create(
'kube-node-%d-iface' % j,
'k8s/virt_iface',
{'name': 'cbr0',
'netmask': '255.255.255.0',
'ipaddr': '192.168.%d.1' % (i + 1),
'onboot': 'yes',
'bootproto': 'static',
'type': 'Bridge'})['kube-node-%d-iface' % j]
kube_node.connect(iface_node, {})
calico_node = cr.create('calico-node-%d' % j, 'k8s/calico', {
'kubernetes': True
})[0]
add_event(Dep(calico_master.name, 'run', 'success', calico_node.name, 'run'))
kube_node.connect(calico_node, {'ip': 'ip'})
calico_node.connect(calico_node, {
'etcd_authority': 'etcd_authority_internal'
})
etcd.connect(calico_node, {'listen_client_url': 'etcd_authority'})
docker = cr.create('kube-docker-%d' % j,
'k8s/docker')['kube-docker-%d' % j]
kube_node.connect(docker, {})
iface_node.connect(docker, {'name': 'iface'})
kubelet = cr.create('kubelet-node-%d' % j, 'k8s/kubelet', {
'kubelet_args': '--network-plugin=calico',
})['kubelet-node-%d' % j]
kube_node.connect(kubelet, {'name': 'kubelet_hostname'})
kubernetes_master.connect(kubelet, {'master_address': 'master_api'})
calico_node.connect(kubelet, {'etcd_authority_internal': 'etcd_authority'})
kube_nodes.append(kube_node)
kube_master = rs.load('kube-node-master')
all_nodes = kube_nodes[:] + [kube_master]
hosts_files = rs.load_all(startswith='hosts_file_node_kube-')
for node in all_nodes:
for host_file in hosts_files:
node.connect(host_file, {
'name': 'hosts:name',
'ip': 'hosts:ip'
})
setup_master()
setup_nodes(1)