porkadot 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/README.md +35 -0
  6. data/Rakefile +10 -0
  7. data/Vagrantfile +63 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/config/porkadot.yaml +25 -0
  11. data/config/unstable.yaml +49 -0
  12. data/exe/porkadot +5 -0
  13. data/lib/porkadot/assets/bootstrap/bootstrap/kube-proxy-bootstrap.yaml.erb +1 -0
  14. data/lib/porkadot/assets/bootstrap/bootstrap/kubeconfig-bootstrap.yaml.erb +18 -0
  15. data/lib/porkadot/assets/bootstrap/cleanup.sh.erb +12 -0
  16. data/lib/porkadot/assets/bootstrap/install.sh.erb +14 -0
  17. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +91 -0
  18. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +69 -0
  19. data/lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb +56 -0
  20. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +31 -0
  21. data/lib/porkadot/assets/bootstrap.rb +52 -0
  22. data/lib/porkadot/assets/certs/etcd.rb +21 -0
  23. data/lib/porkadot/assets/certs/front_proxy.rb +21 -0
  24. data/lib/porkadot/assets/certs/k8s.rb +90 -0
  25. data/lib/porkadot/assets/certs.rb +175 -0
  26. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +57 -0
  27. data/lib/porkadot/assets/etcd/install.sh.erb +12 -0
  28. data/lib/porkadot/assets/etcd.rb +109 -0
  29. data/lib/porkadot/assets/kubelet/bootstrap-kubelet.conf.erb +21 -0
  30. data/lib/porkadot/assets/kubelet/config.yaml.erb +36 -0
  31. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +21 -0
  32. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +33 -0
  33. data/lib/porkadot/assets/kubelet/install.sh.erb +35 -0
  34. data/lib/porkadot/assets/kubelet/kubelet.service.erb +22 -0
  35. data/lib/porkadot/assets/kubelet.rb +102 -0
  36. data/lib/porkadot/assets/kubernetes/install.sh.erb +7 -0
  37. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +602 -0
  38. data/lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb +129 -0
  39. data/lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb +173 -0
  40. data/lib/porkadot/assets/kubernetes/manifests/kube-proxy.yaml.erb +132 -0
  41. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +162 -0
  42. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +86 -0
  43. data/lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb +40 -0
  44. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +323 -0
  45. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +130 -0
  46. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +69 -0
  47. data/lib/porkadot/assets/kubernetes.rb +39 -0
  48. data/lib/porkadot/assets.rb +24 -0
  49. data/lib/porkadot/cmd/cli.rb +45 -0
  50. data/lib/porkadot/cmd/install/bootstrap.rb +50 -0
  51. data/lib/porkadot/cmd/install.rb +36 -0
  52. data/lib/porkadot/cmd/render/certs.rb +68 -0
  53. data/lib/porkadot/cmd/render.rb +67 -0
  54. data/lib/porkadot/cmd.rb +4 -0
  55. data/lib/porkadot/config.rb +115 -0
  56. data/lib/porkadot/configs/bootstrap.rb +67 -0
  57. data/lib/porkadot/configs/certs/etcd.rb +33 -0
  58. data/lib/porkadot/configs/certs/front_proxy.rb +33 -0
  59. data/lib/porkadot/configs/certs/k8s.rb +89 -0
  60. data/lib/porkadot/configs/certs.rb +50 -0
  61. data/lib/porkadot/configs/cni.rb +22 -0
  62. data/lib/porkadot/configs/etcd.rb +95 -0
  63. data/lib/porkadot/configs/kubelet.rb +61 -0
  64. data/lib/porkadot/configs/kubernetes.rb +223 -0
  65. data/lib/porkadot/configs/loadbalancer.rb +26 -0
  66. data/lib/porkadot/const.rb +8 -0
  67. data/lib/porkadot/default.yaml +123 -0
  68. data/lib/porkadot/install/base.rb +5 -0
  69. data/lib/porkadot/install/bootstrap.rb +76 -0
  70. data/lib/porkadot/install/kubelet.rb +63 -0
  71. data/lib/porkadot/install/kubernetes.rb +33 -0
  72. data/lib/porkadot/utils/hash_recursive_merge.rb +73 -0
  73. data/lib/porkadot/utils.rb +25 -0
  74. data/lib/porkadot/version.rb +3 -0
  75. data/lib/porkadot.rb +41 -0
  76. data/porkadot.gemspec +42 -0
  77. metadata +205 -0
@@ -0,0 +1,102 @@
1
+ require 'openssl'
2
+ require 'fileutils'
3
+ require 'erb'
4
+ require 'base64'
5
+
6
+ module Porkadot; module Assets
7
+ class KubeletList
8
+ attr_reader :global_config
9
+ attr_reader :logger
10
+ attr_reader :kubelets
11
+
12
+ def initialize global_config
13
+ @global_config = global_config
14
+ @logger = global_config.logger
15
+ @kubelets = {}
16
+ global_config.nodes.each do |k, config|
17
+ @kubelets[k] = Kubelet.new(config)
18
+ end
19
+ end
20
+
21
+ def render
22
+ self.kubelets.each do |_, v|
23
+ v.render
24
+ end
25
+ end
26
+
27
+ def [](name)
28
+ self.kubelets[name]
29
+ end
30
+ end
31
+
32
+ class Kubelet
33
+ include Porkadot::Assets
34
+ TEMPLATE_DIR = File.join(File.dirname(__FILE__), "kubelet")
35
+
36
+ attr_reader :global_config
37
+ attr_reader :config
38
+ attr_reader :logger
39
+ attr_reader :certs
40
+
41
+ def initialize config
42
+ @config = config
43
+ @logger = config.logger
44
+ @global_config = config.config
45
+ @certs = Porkadot::Assets::Certs::Kubernetes.new(global_config)
46
+ end
47
+
48
+ def render
49
+ logger.info "--> Rendering #{config.name} node"
50
+ unless File.directory?(config.target_path)
51
+ FileUtils.mkdir_p(config.target_path)
52
+ end
53
+ ca_data = certs.ca_cert.to_pem
54
+ ca_data = Base64.strict_encode64(ca_data)
55
+
56
+ render_erb 'bootstrap-kubelet.conf', ca_data: ca_data
57
+ render_bootstrap_certs
58
+ render_erb 'config.yaml'
59
+ render_erb 'kubelet.service'
60
+ render_ca_crt
61
+ render_erb 'install.sh'
62
+ render_erb 'install-deps.sh'
63
+ render_erb 'install-pkgs.sh'
64
+ end
65
+
66
+ def render_bootstrap_certs
67
+ logger.info "----> bootstrap certs"
68
+ self.bootstrap_key
69
+ self.bootstrap_cert(true)
70
+ end
71
+
72
+ def render_ca_crt
73
+ logger.info "----> ca.crt"
74
+ open(config.ca_crt_path, 'w') do |out|
75
+ out.write self.certs.ca_cert(false).to_pem
76
+ end
77
+ end
78
+
79
+ def bootstrap_key
80
+ @bootstrap_key ||= certs.private_key(config.bootstrap_key_path)
81
+ return @bootstrap_key
82
+ end
83
+
84
+ def bootstrap_cert(refresh=false)
85
+ return @bootstrap_cert if defined?(@bootstrap_cert)
86
+ if File.file?(config.bootstrap_cert_path) and !refresh
87
+ self.logger.debug("--> Bootstrap cert already exists, skipping: #{config.bootstrap_cert_path}")
88
+ @bootstrap_cert = OpenSSL::X509::Certificate.new(File.read(config.bootstrap_cert_path))
89
+ else
90
+ @bootstrap_cert = certs._client_cert(
91
+ config.bootstrap_cert_path,
92
+ "/O=porkadot:node-bootstrappers/CN=node-bootstrapper:#{config.name}",
93
+ self.bootstrap_key,
94
+ self.certs.ca_cert(false),
95
+ self.certs.ca_key
96
+ )
97
+ end
98
+ return @bootstrap_cert
99
+ end
100
+
101
+ end
102
+ end; end
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+ export LC_ALL=C
5
+ ROOT=$(dirname "${BASH_SOURCE}")
6
+
7
+ /opt/bin/kubectl apply -f ${ROOT}/manifests/
@@ -0,0 +1,602 @@
1
+ ---
2
+ apiVersion: policy/v1beta1
3
+ kind: PodSecurityPolicy
4
+ metadata:
5
+ name: psp.flannel.unprivileged
6
+ annotations:
7
+ seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
8
+ seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
9
+ apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
10
+ apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
11
+ spec:
12
+ privileged: false
13
+ volumes:
14
+ - configMap
15
+ - secret
16
+ - emptyDir
17
+ - hostPath
18
+ allowedHostPaths:
19
+ - pathPrefix: "/etc/cni/net.d"
20
+ - pathPrefix: "/etc/kube-flannel"
21
+ - pathPrefix: "/run/flannel"
22
+ readOnlyRootFilesystem: false
23
+ # Users and groups
24
+ runAsUser:
25
+ rule: RunAsAny
26
+ supplementalGroups:
27
+ rule: RunAsAny
28
+ fsGroup:
29
+ rule: RunAsAny
30
+ # Privilege Escalation
31
+ allowPrivilegeEscalation: false
32
+ defaultAllowPrivilegeEscalation: false
33
+ # Capabilities
34
+ allowedCapabilities: ['NET_ADMIN']
35
+ defaultAddCapabilities: []
36
+ requiredDropCapabilities: []
37
+ # Host namespaces
38
+ hostPID: false
39
+ hostIPC: false
40
+ hostNetwork: true
41
+ hostPorts:
42
+ - min: 0
43
+ max: 65535
44
+ # SELinux
45
+ seLinux:
46
+ # SELinux is unused in CaaSP
47
+ rule: 'RunAsAny'
48
+ ---
49
+ kind: ClusterRole
50
+ apiVersion: rbac.authorization.k8s.io/v1beta1
51
+ metadata:
52
+ name: flannel
53
+ rules:
54
+ - apiGroups: ['extensions']
55
+ resources: ['podsecuritypolicies']
56
+ verbs: ['use']
57
+ resourceNames: ['psp.flannel.unprivileged']
58
+ - apiGroups:
59
+ - ""
60
+ resources:
61
+ - pods
62
+ verbs:
63
+ - get
64
+ - apiGroups:
65
+ - ""
66
+ resources:
67
+ - nodes
68
+ verbs:
69
+ - list
70
+ - watch
71
+ - apiGroups:
72
+ - ""
73
+ resources:
74
+ - nodes/status
75
+ verbs:
76
+ - patch
77
+ ---
78
+ kind: ClusterRoleBinding
79
+ apiVersion: rbac.authorization.k8s.io/v1beta1
80
+ metadata:
81
+ name: flannel
82
+ roleRef:
83
+ apiGroup: rbac.authorization.k8s.io
84
+ kind: ClusterRole
85
+ name: flannel
86
+ subjects:
87
+ - kind: ServiceAccount
88
+ name: flannel
89
+ namespace: kube-system
90
+ ---
91
+ apiVersion: v1
92
+ kind: ServiceAccount
93
+ metadata:
94
+ name: flannel
95
+ namespace: kube-system
96
+ ---
97
+ kind: ConfigMap
98
+ apiVersion: v1
99
+ metadata:
100
+ name: kube-flannel-cfg
101
+ namespace: kube-system
102
+ labels:
103
+ tier: node
104
+ app: flannel
105
+ data:
106
+ cni-conf.json: |
107
+ {
108
+ "name": "cbr0",
109
+ "cniVersion": "0.3.1",
110
+ "plugins": [
111
+ {
112
+ "type": "flannel",
113
+ "delegate": {
114
+ "hairpinMode": true,
115
+ "isDefaultGateway": true
116
+ }
117
+ },
118
+ {
119
+ "type": "portmap",
120
+ "capabilities": {
121
+ "portMappings": true
122
+ }
123
+ }
124
+ ]
125
+ }
126
+ net-conf.json: |
127
+ {
128
+ "Network": "<%= global_config.k8s.networking.pod_subnet %>",
129
+ "Backend": {
130
+ "Type": "<%= global_config.cni.backend %>"
131
+ }
132
+ }
133
+ ---
134
+ apiVersion: apps/v1
135
+ kind: DaemonSet
136
+ metadata:
137
+ name: kube-flannel-ds-amd64
138
+ namespace: kube-system
139
+ labels:
140
+ tier: node
141
+ app: flannel
142
+ spec:
143
+ selector:
144
+ matchLabels:
145
+ app: flannel
146
+ template:
147
+ metadata:
148
+ labels:
149
+ tier: node
150
+ app: flannel
151
+ spec:
152
+ affinity:
153
+ nodeAffinity:
154
+ requiredDuringSchedulingIgnoredDuringExecution:
155
+ nodeSelectorTerms:
156
+ - matchExpressions:
157
+ - key: beta.kubernetes.io/os
158
+ operator: In
159
+ values:
160
+ - linux
161
+ - key: beta.kubernetes.io/arch
162
+ operator: In
163
+ values:
164
+ - amd64
165
+ hostNetwork: true
166
+ tolerations:
167
+ - operator: Exists
168
+ effect: NoSchedule
169
+ serviceAccountName: flannel
170
+ initContainers:
171
+ - name: install-cni
172
+ image: quay.io/coreos/flannel:v0.12.0-amd64
173
+ command:
174
+ - cp
175
+ args:
176
+ - -f
177
+ - /etc/kube-flannel/cni-conf.json
178
+ - /etc/cni/net.d/10-flannel.conflist
179
+ volumeMounts:
180
+ - name: cni
181
+ mountPath: /etc/cni/net.d
182
+ - name: flannel-cfg
183
+ mountPath: /etc/kube-flannel/
184
+ containers:
185
+ - name: kube-flannel
186
+ image: quay.io/coreos/flannel:v0.12.0-amd64
187
+ command:
188
+ - /opt/bin/flanneld
189
+ args:
190
+ - --ip-masq
191
+ - --kube-subnet-mgr
192
+ resources:
193
+ requests:
194
+ cpu: "100m"
195
+ memory: "50Mi"
196
+ limits:
197
+ cpu: "100m"
198
+ memory: "50Mi"
199
+ securityContext:
200
+ privileged: false
201
+ capabilities:
202
+ add: ["NET_ADMIN"]
203
+ env:
204
+ - name: POD_NAME
205
+ valueFrom:
206
+ fieldRef:
207
+ fieldPath: metadata.name
208
+ - name: POD_NAMESPACE
209
+ valueFrom:
210
+ fieldRef:
211
+ fieldPath: metadata.namespace
212
+ volumeMounts:
213
+ - name: run
214
+ mountPath: /run/flannel
215
+ - name: flannel-cfg
216
+ mountPath: /etc/kube-flannel/
217
+ volumes:
218
+ - name: run
219
+ hostPath:
220
+ path: /run/flannel
221
+ - name: cni
222
+ hostPath:
223
+ path: /etc/cni/net.d
224
+ - name: flannel-cfg
225
+ configMap:
226
+ name: kube-flannel-cfg
227
+ ---
228
+ apiVersion: apps/v1
229
+ kind: DaemonSet
230
+ metadata:
231
+ name: kube-flannel-ds-arm64
232
+ namespace: kube-system
233
+ labels:
234
+ tier: node
235
+ app: flannel
236
+ spec:
237
+ selector:
238
+ matchLabels:
239
+ app: flannel
240
+ template:
241
+ metadata:
242
+ labels:
243
+ tier: node
244
+ app: flannel
245
+ spec:
246
+ affinity:
247
+ nodeAffinity:
248
+ requiredDuringSchedulingIgnoredDuringExecution:
249
+ nodeSelectorTerms:
250
+ - matchExpressions:
251
+ - key: beta.kubernetes.io/os
252
+ operator: In
253
+ values:
254
+ - linux
255
+ - key: beta.kubernetes.io/arch
256
+ operator: In
257
+ values:
258
+ - arm64
259
+ hostNetwork: true
260
+ tolerations:
261
+ - operator: Exists
262
+ effect: NoSchedule
263
+ serviceAccountName: flannel
264
+ initContainers:
265
+ - name: install-cni
266
+ image: quay.io/coreos/flannel:v0.12.0-arm64
267
+ command:
268
+ - cp
269
+ args:
270
+ - -f
271
+ - /etc/kube-flannel/cni-conf.json
272
+ - /etc/cni/net.d/10-flannel.conflist
273
+ volumeMounts:
274
+ - name: cni
275
+ mountPath: /etc/cni/net.d
276
+ - name: flannel-cfg
277
+ mountPath: /etc/kube-flannel/
278
+ containers:
279
+ - name: kube-flannel
280
+ image: quay.io/coreos/flannel:v0.12.0-arm64
281
+ command:
282
+ - /opt/bin/flanneld
283
+ args:
284
+ - --ip-masq
285
+ - --kube-subnet-mgr
286
+ resources:
287
+ requests:
288
+ cpu: "100m"
289
+ memory: "50Mi"
290
+ limits:
291
+ cpu: "100m"
292
+ memory: "50Mi"
293
+ securityContext:
294
+ privileged: false
295
+ capabilities:
296
+ add: ["NET_ADMIN"]
297
+ env:
298
+ - name: POD_NAME
299
+ valueFrom:
300
+ fieldRef:
301
+ fieldPath: metadata.name
302
+ - name: POD_NAMESPACE
303
+ valueFrom:
304
+ fieldRef:
305
+ fieldPath: metadata.namespace
306
+ volumeMounts:
307
+ - name: run
308
+ mountPath: /run/flannel
309
+ - name: flannel-cfg
310
+ mountPath: /etc/kube-flannel/
311
+ volumes:
312
+ - name: run
313
+ hostPath:
314
+ path: /run/flannel
315
+ - name: cni
316
+ hostPath:
317
+ path: /etc/cni/net.d
318
+ - name: flannel-cfg
319
+ configMap:
320
+ name: kube-flannel-cfg
321
+ ---
322
+ apiVersion: apps/v1
323
+ kind: DaemonSet
324
+ metadata:
325
+ name: kube-flannel-ds-arm
326
+ namespace: kube-system
327
+ labels:
328
+ tier: node
329
+ app: flannel
330
+ spec:
331
+ selector:
332
+ matchLabels:
333
+ app: flannel
334
+ template:
335
+ metadata:
336
+ labels:
337
+ tier: node
338
+ app: flannel
339
+ spec:
340
+ affinity:
341
+ nodeAffinity:
342
+ requiredDuringSchedulingIgnoredDuringExecution:
343
+ nodeSelectorTerms:
344
+ - matchExpressions:
345
+ - key: beta.kubernetes.io/os
346
+ operator: In
347
+ values:
348
+ - linux
349
+ - key: beta.kubernetes.io/arch
350
+ operator: In
351
+ values:
352
+ - arm
353
+ hostNetwork: true
354
+ tolerations:
355
+ - operator: Exists
356
+ effect: NoSchedule
357
+ serviceAccountName: flannel
358
+ initContainers:
359
+ - name: install-cni
360
+ image: quay.io/coreos/flannel:v0.12.0-arm
361
+ command:
362
+ - cp
363
+ args:
364
+ - -f
365
+ - /etc/kube-flannel/cni-conf.json
366
+ - /etc/cni/net.d/10-flannel.conflist
367
+ volumeMounts:
368
+ - name: cni
369
+ mountPath: /etc/cni/net.d
370
+ - name: flannel-cfg
371
+ mountPath: /etc/kube-flannel/
372
+ containers:
373
+ - name: kube-flannel
374
+ image: quay.io/coreos/flannel:v0.12.0-arm
375
+ command:
376
+ - /opt/bin/flanneld
377
+ args:
378
+ - --ip-masq
379
+ - --kube-subnet-mgr
380
+ resources:
381
+ requests:
382
+ cpu: "100m"
383
+ memory: "50Mi"
384
+ limits:
385
+ cpu: "100m"
386
+ memory: "50Mi"
387
+ securityContext:
388
+ privileged: false
389
+ capabilities:
390
+ add: ["NET_ADMIN"]
391
+ env:
392
+ - name: POD_NAME
393
+ valueFrom:
394
+ fieldRef:
395
+ fieldPath: metadata.name
396
+ - name: POD_NAMESPACE
397
+ valueFrom:
398
+ fieldRef:
399
+ fieldPath: metadata.namespace
400
+ volumeMounts:
401
+ - name: run
402
+ mountPath: /run/flannel
403
+ - name: flannel-cfg
404
+ mountPath: /etc/kube-flannel/
405
+ volumes:
406
+ - name: run
407
+ hostPath:
408
+ path: /run/flannel
409
+ - name: cni
410
+ hostPath:
411
+ path: /etc/cni/net.d
412
+ - name: flannel-cfg
413
+ configMap:
414
+ name: kube-flannel-cfg
415
+ ---
416
+ apiVersion: apps/v1
417
+ kind: DaemonSet
418
+ metadata:
419
+ name: kube-flannel-ds-ppc64le
420
+ namespace: kube-system
421
+ labels:
422
+ tier: node
423
+ app: flannel
424
+ spec:
425
+ selector:
426
+ matchLabels:
427
+ app: flannel
428
+ template:
429
+ metadata:
430
+ labels:
431
+ tier: node
432
+ app: flannel
433
+ spec:
434
+ affinity:
435
+ nodeAffinity:
436
+ requiredDuringSchedulingIgnoredDuringExecution:
437
+ nodeSelectorTerms:
438
+ - matchExpressions:
439
+ - key: beta.kubernetes.io/os
440
+ operator: In
441
+ values:
442
+ - linux
443
+ - key: beta.kubernetes.io/arch
444
+ operator: In
445
+ values:
446
+ - ppc64le
447
+ hostNetwork: true
448
+ tolerations:
449
+ - operator: Exists
450
+ effect: NoSchedule
451
+ serviceAccountName: flannel
452
+ initContainers:
453
+ - name: install-cni
454
+ image: quay.io/coreos/flannel:v0.12.0-ppc64le
455
+ command:
456
+ - cp
457
+ args:
458
+ - -f
459
+ - /etc/kube-flannel/cni-conf.json
460
+ - /etc/cni/net.d/10-flannel.conflist
461
+ volumeMounts:
462
+ - name: cni
463
+ mountPath: /etc/cni/net.d
464
+ - name: flannel-cfg
465
+ mountPath: /etc/kube-flannel/
466
+ containers:
467
+ - name: kube-flannel
468
+ image: quay.io/coreos/flannel:v0.12.0-ppc64le
469
+ command:
470
+ - /opt/bin/flanneld
471
+ args:
472
+ - --ip-masq
473
+ - --kube-subnet-mgr
474
+ resources:
475
+ requests:
476
+ cpu: "100m"
477
+ memory: "50Mi"
478
+ limits:
479
+ cpu: "100m"
480
+ memory: "50Mi"
481
+ securityContext:
482
+ privileged: false
483
+ capabilities:
484
+ add: ["NET_ADMIN"]
485
+ env:
486
+ - name: POD_NAME
487
+ valueFrom:
488
+ fieldRef:
489
+ fieldPath: metadata.name
490
+ - name: POD_NAMESPACE
491
+ valueFrom:
492
+ fieldRef:
493
+ fieldPath: metadata.namespace
494
+ volumeMounts:
495
+ - name: run
496
+ mountPath: /run/flannel
497
+ - name: flannel-cfg
498
+ mountPath: /etc/kube-flannel/
499
+ volumes:
500
+ - name: run
501
+ hostPath:
502
+ path: /run/flannel
503
+ - name: cni
504
+ hostPath:
505
+ path: /etc/cni/net.d
506
+ - name: flannel-cfg
507
+ configMap:
508
+ name: kube-flannel-cfg
509
+ ---
510
+ apiVersion: apps/v1
511
+ kind: DaemonSet
512
+ metadata:
513
+ name: kube-flannel-ds-s390x
514
+ namespace: kube-system
515
+ labels:
516
+ tier: node
517
+ app: flannel
518
+ spec:
519
+ selector:
520
+ matchLabels:
521
+ app: flannel
522
+ template:
523
+ metadata:
524
+ labels:
525
+ tier: node
526
+ app: flannel
527
+ spec:
528
+ affinity:
529
+ nodeAffinity:
530
+ requiredDuringSchedulingIgnoredDuringExecution:
531
+ nodeSelectorTerms:
532
+ - matchExpressions:
533
+ - key: beta.kubernetes.io/os
534
+ operator: In
535
+ values:
536
+ - linux
537
+ - key: beta.kubernetes.io/arch
538
+ operator: In
539
+ values:
540
+ - s390x
541
+ hostNetwork: true
542
+ tolerations:
543
+ - operator: Exists
544
+ effect: NoSchedule
545
+ serviceAccountName: flannel
546
+ initContainers:
547
+ - name: install-cni
548
+ image: quay.io/coreos/flannel:v0.12.0-s390x
549
+ command:
550
+ - cp
551
+ args:
552
+ - -f
553
+ - /etc/kube-flannel/cni-conf.json
554
+ - /etc/cni/net.d/10-flannel.conflist
555
+ volumeMounts:
556
+ - name: cni
557
+ mountPath: /etc/cni/net.d
558
+ - name: flannel-cfg
559
+ mountPath: /etc/kube-flannel/
560
+ containers:
561
+ - name: kube-flannel
562
+ image: quay.io/coreos/flannel:v0.12.0-s390x
563
+ command:
564
+ - /opt/bin/flanneld
565
+ args:
566
+ - --ip-masq
567
+ - --kube-subnet-mgr
568
+ resources:
569
+ requests:
570
+ cpu: "100m"
571
+ memory: "50Mi"
572
+ limits:
573
+ cpu: "100m"
574
+ memory: "50Mi"
575
+ securityContext:
576
+ privileged: false
577
+ capabilities:
578
+ add: ["NET_ADMIN"]
579
+ env:
580
+ - name: POD_NAME
581
+ valueFrom:
582
+ fieldRef:
583
+ fieldPath: metadata.name
584
+ - name: POD_NAMESPACE
585
+ valueFrom:
586
+ fieldRef:
587
+ fieldPath: metadata.namespace
588
+ volumeMounts:
589
+ - name: run
590
+ mountPath: /run/flannel
591
+ - name: flannel-cfg
592
+ mountPath: /etc/kube-flannel/
593
+ volumes:
594
+ - name: run
595
+ hostPath:
596
+ path: /run/flannel
597
+ - name: cni
598
+ hostPath:
599
+ path: /etc/cni/net.d
600
+ - name: flannel-cfg
601
+ configMap:
602
+ name: kube-flannel-cfg