blob: f36628768b7c6a01b323dde90774ec4b2300604b [file] [log] [blame]
marcoacdae7e2015-12-02 15:35:37 +01001
2==================
3Kubernetes Formula
4==================
5
Jakub Pavlik495d06f2016-06-17 11:33:05 +02006Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
7
8This formula deploys production ready Kubernetes and generate Kubernetes manifests as well.
marcoacdae7e2015-12-02 15:35:37 +01009
10Based on official Kubernetes salt
11https://github.com/kubernetes/kubernetes/tree/master/cluster/saltbase
12
13Extended on Contrail contribution https://github.com/Juniper/kubernetes/blob/opencontrail-integration/docs/getting-started-guides/opencontrail.md
14
15
16Sample pillars
17==============
18
Ales Komarek688a04c2016-07-15 15:12:30 +020019Containers on pool definitions in pool.service.local
20
Jakub Pavlik7e985322016-07-17 13:16:15 +020021.. code-block:: yaml
22
23 parameters:
24 kubernetes:
25 pool:
26 service:
27 local:
28 enabled: False
29 service: libvirt
30 cluster: openstack-compute
31 namespace: default
32 role: ${linux:system:name}
33 type: LoadBalancer
34 kind: Deployment
35 apiVersion: extensions/v1beta1
36 replicas: 1
37 host_pid: True
38 nodeSelector:
39 - key: openstack
40 value: ${linux:system:name}
41 hostNetwork: True
42 container:
43 libvirt-compute:
44 privileged: True
45 image: ${_param:docker_repository}/libvirt-compute
46 tag: ${_param:openstack_container_tag}
Ales Komarek688a04c2016-07-15 15:12:30 +020047
48Master definition
49
marcoacdae7e2015-12-02 15:35:37 +010050.. code-block:: yaml
51
52 kubernetes:
Jakub Pavlik495d06f2016-06-17 11:33:05 +020053 master:
54 addons:
55 dns:
56 domain: cluster.local
57 enabled: true
58 replicas: 1
59 server: 10.254.0.10
60 heapster_influxdb:
61 enabled: true
62 public_ip: 185.22.97.132
63 ui:
64 enabled: true
65 public_ip: 185.22.97.131
66 admin:
67 password: password
68 username: admin
69 apiserver:
70 address: 10.0.175.100
71 port: 8080
72 ca: kubernetes
73 enabled: true
74 etcd:
75 host: 127.0.0.1
76 members:
77 - host: 10.0.175.100
78 name: node040
79 name: node040
80 token: ca939ec9c2a17b0786f6d411fe019e9b
81 kubelet:
82 allow_privileged: true
83 network:
84 engine: calico
85 hash: fb5e30ebe6154911a66ec3fb5f1195b2
86 private_ip_range: 10.150.0.0/16
87 version: v0.19.0
88 service_addresses: 10.254.0.0/16
89 storage:
90 engine: glusterfs
91 members:
92 - host: 10.0.175.101
93 port: 24007
94 - host: 10.0.175.102
95 port: 24007
96 - host: 10.0.175.103
97 port: 24007
98 port: 24007
99 token:
100 admin: DFvQ8GJ9JD4fKNfuyEddw3rjnFTkUKsv
101 controller_manager: EreGh6AnWf8DxH8cYavB2zS029PUi7vx
102 dns: RAFeVSE4UvsCz4gk3KYReuOI5jsZ1Xt3
103 kube_proxy: DFvQ8GelB7afH3wClC9romaMPhquyyEe
104 kubelet: 7bN5hJ9JD4fKjnFTkUKsvVNfuyEddw3r
105 logging: MJkXKdbgqRmTHSa2ykTaOaMykgO6KcEf
106 monitoring: hnsj0XqABgrSww7Nqo7UVTSZLJUt2XRd
107 scheduler: HY1UUxEPpmjW4a1dDLGIANYQp1nZkLDk
108 version: v1.2.4
109
marcoacdae7e2015-12-02 15:35:37 +0100110
111 kubernetes:
Jakub Pavlik495d06f2016-06-17 11:33:05 +0200112 pool:
113 address: 0.0.0.0
114 allow_privileged: true
115 ca: kubernetes
116 cluster_dns: 10.254.0.10
117 cluster_domain: cluster.local
118 enabled: true
119 kubelet:
120 allow_privileged: true
121 config: /etc/kubernetes/manifests
122 frequency: 5s
123 master:
124 apiserver:
125 members:
126 - host: 10.0.175.100
127 etcd:
128 members:
129 - host: 10.0.175.100
130 host: 10.0.175.100
131 network:
132 engine: calico
133 hash: fb5e30ebe6154911a66ec3fb5f1195b2
134 version: v0.19.0
135 token:
136 kube_proxy: DFvQ8GelB7afH3wClC9romaMPhquyyEe
137 kubelet: 7bN5hJ9JD4fKjnFTkUKsvVNfuyEddw3r
138 version: v1.2.4
marcoacdae7e2015-12-02 15:35:37 +0100139
140
Jakub Pavlik495d06f2016-06-17 11:33:05 +0200141
142Kubernetes with OpenContrail network plugin
143------------------------------------------------
marcoacdae7e2015-12-02 15:35:37 +0100144
145On Master:
146
147.. code-block:: yaml
148
149 kubernetes:
150 master:
151 network:
152 engine: opencontrail
153 host: 10.0.170.70
154 port: 8082
155 default_domain: default-domain
156 default_project: default-domain:default-project
157 public_network: default-domain:default-project:Public
158 public_ip_range: 185.22.97.128/26
159 private_ip_range: 10.150.0.0/16
160 service_cluster_ip_range: 10.254.0.0/16
161 network_label: name
162 service_label: uses
163 cluster_service: kube-system/default
164 network_manager:
165 image: pupapaik/opencontrail-kube-network-manager
166 tag: release-1.1-jpa-final-1
167
168On pools:
169
170.. code-block:: yaml
171
172 kubernetes:
173 pool:
174 network:
175 engine: opencontrail
176
Jakub Pavlik1cfc1fe2016-07-25 11:01:52 +0200177Kubernetes control plane running in systemd
178-------------------------------------------
179
180By default kube-apiserver, kube-scheduler, kube-controllermanager, kube-proxy, etcd running in docker containers through manifests. For stable production environment this should be run in systemd.
181
182.. code-block:: yaml
183
184 kubernetes:
185 master:
186 container: false
187
188 kubernetes:
189 pool:
190 container: false
191
192
marcoacdae7e2015-12-02 15:35:37 +0100193Kubernetes with Flannel
194-----------------------
195
196On Master:
197
198.. code-block:: yaml
199
200 kubernetes:
201 master:
202 network:
203 engine: flannel
Jakub Pavlik7e985322016-07-17 13:16:15 +0200204 # If you don't register master as node:
marcoa05621f2016-07-14 10:35:24 +0200205 etcd:
206 members:
207 - host: 10.0.175.101
208 port: 4001
209 - host: 10.0.175.102
210 port: 4001
211 - host: 10.0.175.103
212 port: 4001
marcoacdae7e2015-12-02 15:35:37 +0100213 common:
214 network:
215 engine: flannel
216
217On pools:
218
219.. code-block:: yaml
220
221 kubernetes:
222 pool:
223 network:
224 engine: flannel
marcoa05621f2016-07-14 10:35:24 +0200225 etcd:
226 members:
227 - host: 10.0.175.101
228 port: 4001
229 - host: 10.0.175.102
230 port: 4001
231 - host: 10.0.175.103
232 port: 4001
marcoacdae7e2015-12-02 15:35:37 +0100233 common:
234 network:
235 engine: flannel
236
237Kubernetes with Calico
238-----------------------
239
240On Master:
241
242.. code-block:: yaml
243
244 kubernetes:
245 master:
246 network:
247 engine: calico
Jakub Pavlik7e985322016-07-17 13:16:15 +0200248 # If you don't register master as node:
marcoa05621f2016-07-14 10:35:24 +0200249 etcd:
250 members:
251 - host: 10.0.175.101
252 port: 4001
253 - host: 10.0.175.102
254 port: 4001
255 - host: 10.0.175.103
256 port: 4001
marcoacdae7e2015-12-02 15:35:37 +0100257
258On pools:
259
260.. code-block:: yaml
261
262 kubernetes:
263 pool:
264 network:
265 engine: calico
marcoa05621f2016-07-14 10:35:24 +0200266 etcd:
267 members:
268 - host: 10.0.175.101
269 port: 4001
270 - host: 10.0.175.102
271 port: 4001
272 - host: 10.0.175.103
273 port: 4001
marcoacdae7e2015-12-02 15:35:37 +0100274
Jakub Pavlik7e985322016-07-17 13:16:15 +0200275Post deployment configuration
276
277.. code-block:: bash
Jakub Pavlik232833c2016-07-17 13:21:00 +0200278
Jakub Pavlik7e985322016-07-17 13:16:15 +0200279 # set ETCD
280 export ETCD_AUTHORITY=10.0.111.201:4001
281
282 # Set NAT for pods subnet
283 calicoctl pool add 192.168.0.0/16 --nat-outgoing
284
285 # Status commands
286 calicoctl status
287 calicoctl node show
288
Jakub Pavlik495d06f2016-06-17 11:33:05 +0200289Kubernetes with GlusterFS for storage
290---------------------------------------------
291
292.. code-block:: yaml
293
294 kubernetes:
295 master
296 ...
297 storage:
298 engine: glusterfs
299 port: 24007
300 members:
301 - host: 10.0.175.101
302 port: 24007
303 - host: 10.0.175.102
304 port: 24007
305 - host: 10.0.175.103
306 port: 24007
307 ...
308
marco45fc1b72016-07-02 16:11:18 +0200309Kubernetes namespaces
310---------------------
311
312Create namespace:
313
314.. code-block:: yaml
315
316 kubernetes:
317 master
318 ...
319 namespace:
320 kube-system:
321 enabled: True
322 namespace2:
323 enabled: True
324 namespace3:
325 enabled: False
326 ...
327
328Kubernetes labels
329-----------------
330
331Create namespace:
332
333.. code-block:: yaml
334
335 kubernetes:
336 pool
337 ...
338 host:
339 label:
340 key01:
341 value: value01
342 enable: True
343 key02:
344 value: value02
345 enable: False
346 name: ${linux:system:name}
347 ...
348
marcof7efecb2016-07-16 16:13:37 +0200349Pull images from private registries
350-----------------------------------
351
352.. code-block:: yaml
353
354 kubernetes:
355 master
356 ...
357 registry:
358 secret:
359 registry01:
360 enabled: True
361 key: (get from `cat /root/.docker/config.json | base64`)
362 namespace: default
363 ...
364 control:
365 ...
366 service:
367 service01:
368 ...
369 image_pull_secretes: registry01
370 ...
371
Jakub Pavlik495d06f2016-06-17 11:33:05 +0200372Kubernetes Service Definitions in pillars
373==========================================
374
375Following samples show how to generate kubernetes manifest as well and provide single tool for complete infrastructure management.
376
377Deployment manifest
378---------------------
marcoacdae7e2015-12-02 15:35:37 +0100379
380.. code-block:: yaml
381
382 salt:
383 control:
384 enabled: True
385 hostNetwork: True
386 service:
387 memcached:
388 privileged: True
389 service: memcached
390 role: server
391 type: LoadBalancer
392 replicas: 3
393 kind: Deployment
394 apiVersion: extensions/v1beta1
395 ports:
396 - port: 8774
397 name: nova-api
398 - port: 8775
399 name: nova-metadata
400 volume:
401 volume_name:
402 type: hostPath
403 mount: /certs
404 path: /etc/certs
405 container:
406 memcached:
407 image: memcached
408 tag:2
409 ports:
410 - port: 8774
411 name: nova-api
412 - port: 8775
413 name: nova-metadata
414 variables:
415 - name: HTTP_TLS_CERTIFICATE:
416 value: /certs/domain.crt
417 - name: HTTP_TLS_KEY
418 value: /certs/domain.key
419 volumes:
420 - name: /etc/certs
421 type: hostPath
422 mount: /certs
423 path: /etc/certs
424
425Volumes
426-------
427
428hostPath
Jakub Pavlik495d06f2016-06-17 11:33:05 +0200429==========
marcoacdae7e2015-12-02 15:35:37 +0100430
431.. code-block:: yaml
432
433 container:
434 memcached:
435 ...
436 volumes:
437 - name: /etc/certs
438 mount: /certs
439 type: hostPath
440 path: /etc/certs
441
442emptyDir
Ales Komarek688a04c2016-07-15 15:12:30 +0200443========
marcoacdae7e2015-12-02 15:35:37 +0100444
445.. code-block:: yaml
446
447 container:
448 memcached:
449 ...
450 volumes:
451 - name: /etc/certs
452 mount: /certs
Jakub Pavlik7e985322016-07-17 13:16:15 +0200453 type: emptyDir