porkadot 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,129 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: v1
4
+ data:
5
+ apiserver.crt: <%= certs.kubernetes.to_base64(:apiserver_cert) %>
6
+ apiserver.key: <%= certs.kubernetes.to_base64(:apiserver_key) %>
7
+ ca.crt: <%= certs.kubernetes.to_base64(:ca_cert) %>
8
+ front-proxy-ca.crt: <%= certs.front_proxy.to_base64(:ca_cert) %>
9
+ front-proxy-client.crt: <%= certs.front_proxy.to_base64(:client_cert) %>
10
+ front-proxy-client.key: <%= certs.front_proxy.to_base64(:client_key) %>
11
+ kubelet-client.crt: <%= certs.kubernetes.to_base64(:kubelet_client_cert) %>
12
+ kubelet-client.key: <%= certs.kubernetes.to_base64(:kubelet_client_key) %>
13
+ sa.pub: <%= certs.kubernetes.to_base64(:sa_public_key) %>
14
+ kind: Secret
15
+ metadata:
16
+ name: kube-apiserver
17
+ namespace: kube-system
18
+ labels:
19
+ <%- k8s.apiserver.labels.each do |k, v| -%>
20
+ <%= k.to_s %>: <%= v %>
21
+ <%- end -%>
22
+ type: Opaque
23
+ ---
24
+ apiVersion: v1
25
+ data:
26
+ ca.crt: <%= certs.etcd.to_base64(:ca_cert) %>
27
+ etcd-client.crt: <%= certs.etcd.to_base64(:client_cert) %>
28
+ etcd-client.key: <%= certs.etcd.to_base64(:client_key) %>
29
+ kind: Secret
30
+ metadata:
31
+ name: etcd-tls
32
+ namespace: kube-system
33
+ labels:
34
+ <%- k8s.apiserver.labels.each do |k, v| -%>
35
+ <%= k.to_s %>: <%= v %>
36
+ <%- end -%>
37
+ type: Opaque
38
+ ---
39
+ apiVersion: "apps/v1"
40
+ kind: DaemonSet
41
+ metadata:
42
+ name: kube-apiserver
43
+ namespace: kube-system
44
+ labels:
45
+ <%- k8s.apiserver.labels.each do |k, v| -%>
46
+ <%= k.to_s %>: <%= v %>
47
+ <%- end -%>
48
+ spec:
49
+ selector:
50
+ matchLabels:
51
+ <%- k8s.apiserver.instance_labels.each do |k, v| -%>
52
+ <%= k.to_s %>: <%= v %>
53
+ <%- end -%>
54
+ template:
55
+ metadata:
56
+ labels:
57
+ <%- k8s.apiserver.labels.each do |k, v| -%>
58
+ <%= k.to_s %>: <%= v %>
59
+ <%- end -%>
60
+ annotations:
61
+ checkpointer.alpha.coreos.com/checkpoint: "true"
62
+ spec:
63
+ containers:
64
+ - name: kube-apiserver
65
+ resources:
66
+ requests:
67
+ cpu: 250m
68
+ image: <%= k8s.image_repository %>/kube-apiserver:<%= k8s.kubernetes_version %>
69
+ command:
70
+ - kube-apiserver
71
+ <%- k8s.apiserver.args.each do |k, v| -%>
72
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
73
+ <%- end -%>
74
+ env:
75
+ - name: POD_IP
76
+ valueFrom:
77
+ fieldRef:
78
+ fieldPath: status.podIP
79
+ volumeMounts:
80
+ - mountPath: /etc/ca-certificates
81
+ name: etc-ca-certificates
82
+ readOnly: true
83
+ - mountPath: /etc/ssl/certs
84
+ name: ca-certs
85
+ readOnly: true
86
+ - mountPath: /usr/share/ca-certificates
87
+ name: usr-share-ca-certificates
88
+ readOnly: true
89
+ - mountPath: /etc/kubernetes/pki/kubernetes
90
+ name: k8s-tls
91
+ readOnly: true
92
+ - mountPath: /etc/kubernetes/pki/etcd
93
+ name: etcd-tls
94
+ readOnly: true
95
+ - mountPath: /var/lock
96
+ name: var-lock
97
+ readOnly: false
98
+ hostNetwork: true
99
+ priorityClassName: system-cluster-critical
100
+ nodeSelector:
101
+ k8s.unstable.cloud/master: ""
102
+ tolerations:
103
+ - key: CriticalAddonsOnly
104
+ operator: Exists
105
+ - key: node-role.kubernetes.io/master
106
+ operator: Exists
107
+ effect: NoSchedule
108
+ volumes:
109
+ - hostPath:
110
+ path: /etc/ssl/certs
111
+ type: DirectoryOrCreate
112
+ name: ca-certs
113
+ - hostPath:
114
+ path: /usr/share/ca-certificates
115
+ type: DirectoryOrCreate
116
+ name: usr-share-ca-certificates
117
+ - hostPath:
118
+ path: /etc/ca-certificates
119
+ type: DirectoryOrCreate
120
+ name: etc-ca-certificates
121
+ - name: k8s-tls
122
+ secret:
123
+ secretName: kube-apiserver
124
+ - name: etcd-tls
125
+ secret:
126
+ secretName: etcd-tls
127
+ - name: var-lock
128
+ hostPath:
129
+ path: /var/lock
@@ -0,0 +1,173 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: policy/v1beta1
4
+ kind: PodDisruptionBudget
5
+ metadata:
6
+ name: kube-controller-manager
7
+ namespace: kube-system
8
+ labels:
9
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
10
+ <%= k.to_s %>: <%= v %>
11
+ <%- end -%>
12
+ spec:
13
+ minAvailable: 1
14
+ selector:
15
+ matchLabels:
16
+ <%- k8s.controller_manager.instance_labels.each do |k, v| -%>
17
+ <%= k.to_s %>: <%= v %>
18
+ <%- end -%>
19
+ ---
20
+ kind: ClusterRoleBinding
21
+ apiVersion: rbac.authorization.k8s.io/v1
22
+ metadata:
23
+ name: porkadot:kube-controller-manager
24
+ labels:
25
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
26
+ <%= k.to_s %>: <%= v %>
27
+ <%- end -%>
28
+ roleRef:
29
+ apiGroup: rbac.authorization.k8s.io
30
+ kind: ClusterRole
31
+ name: system:kube-controller-manager
32
+ subjects:
33
+ - kind: ServiceAccount
34
+ name: kube-controller-manager
35
+ namespace: kube-system
36
+ ---
37
+ apiVersion: v1
38
+ kind: ServiceAccount
39
+ metadata:
40
+ name: kube-controller-manager
41
+ namespace: kube-system
42
+ labels:
43
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
44
+ <%= k.to_s %>: <%= v %>
45
+ <%- end -%>
46
+ ---
47
+ apiVersion: v1
48
+ data:
49
+ ca.crt: <%= certs.kubernetes.to_base64(:ca_cert) %>
50
+ ca.key: <%= certs.kubernetes.to_base64(:ca_key) %>
51
+ sa.key: <%= certs.kubernetes.to_base64(:sa_private_key) %>
52
+ kind: Secret
53
+ metadata:
54
+ name: kube-controller-manager
55
+ namespace: kube-system
56
+ labels:
57
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
58
+ <%= k.to_s %>: <%= v %>
59
+ <%- end -%>
60
+ type: Opaque
61
+ ---
62
+ apiVersion: apps/v1
63
+ kind: Deployment
64
+ metadata:
65
+ name: kube-controller-manager
66
+ namespace: kube-system
67
+ labels:
68
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
69
+ <%= k.to_s %>: <%= v %>
70
+ <%- end -%>
71
+ spec:
72
+ replicas: 2
73
+ selector:
74
+ matchLabels:
75
+ <%- k8s.controller_manager.instance_labels.each do |k, v| -%>
76
+ <%= k.to_s %>: <%= v %>
77
+ <%- end -%>
78
+ template:
79
+ metadata:
80
+ labels:
81
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
82
+ <%= k.to_s %>: <%= v %>
83
+ <%- end -%>
84
+ annotations:
85
+ scheduler.alpha.kubernetes.io/critical-pod: ''
86
+ spec:
87
+ affinity:
88
+ podAntiAffinity:
89
+ preferredDuringSchedulingIgnoredDuringExecution:
90
+ - weight: 100
91
+ podAffinityTerm:
92
+ labelSelector:
93
+ matchExpressions:
94
+ - key: 'app.kubernetes.io/component'
95
+ operator: In
96
+ values:
97
+ - kube-controller-manager
98
+ - key: 'app.kubernetes.io/managed-by'
99
+ operator: In
100
+ values:
101
+ - porkadot
102
+ topologyKey: kubernetes.io/hostname
103
+ containers:
104
+ - name: kube-controller-manager
105
+ resources:
106
+ requests:
107
+ cpu: 200m
108
+ image: <%= k8s.image_repository %>/kube-controller-manager:<%= k8s.kubernetes_version %>
109
+ command:
110
+ - kube-controller-manager
111
+ <%- k8s.controller_manager.args.each do |k, v| -%>
112
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
113
+ <%- end -%>
114
+ livenessProbe:
115
+ httpGet:
116
+ path: /healthz
117
+ port: 10252 # Note: Using default port. Update if --port option is set differently.
118
+ initialDelaySeconds: 15
119
+ timeoutSeconds: 15
120
+ volumeMounts:
121
+ - name: var-run-kubernetes
122
+ mountPath: /var/run/kubernetes
123
+ - name: secrets
124
+ mountPath: /etc/kubernetes/pki/kubernetes
125
+ readOnly: true
126
+ - mountPath: /usr/libexec/kubernetes/kubelet-plugins/volume/exec
127
+ name: flexvolume-dir
128
+ - mountPath: /usr/share/ca-certificates
129
+ name: usr-share-ca-certificates
130
+ readOnly: true
131
+ - mountPath: /etc/ca-certificates
132
+ name: etc-ca-certificates
133
+ readOnly: true
134
+ - mountPath: /etc/ssl/certs
135
+ name: ca-certs
136
+ readOnly: true
137
+ priorityClassName: system-cluster-critical
138
+ nodeSelector:
139
+ k8s.unstable.cloud/master: ""
140
+ securityContext:
141
+ runAsNonRoot: true
142
+ runAsUser: 65534
143
+ serviceAccountName: kube-controller-manager
144
+ tolerations:
145
+ - key: CriticalAddonsOnly
146
+ operator: Exists
147
+ - key: node-role.kubernetes.io/master
148
+ operator: Exists
149
+ effect: NoSchedule
150
+ volumes:
151
+ - name: var-run-kubernetes
152
+ emptyDir: {}
153
+ - name: secrets
154
+ secret:
155
+ secretName: kube-controller-manager
156
+ - hostPath:
157
+ path: /etc/ssl/certs
158
+ type: DirectoryOrCreate
159
+ name: ca-certs
160
+ - hostPath:
161
+ path: /var/lib/kubelet/volumeplugins
162
+ type: DirectoryOrCreate
163
+ name: flexvolume-dir
164
+ - hostPath:
165
+ path: /usr/share/ca-certificates
166
+ type: DirectoryOrCreate
167
+ name: usr-share-ca-certificates
168
+ - hostPath:
169
+ path: /etc/ca-certificates
170
+ type: DirectoryOrCreate
171
+ name: etc-ca-certificates
172
+ dnsPolicy: Default # Don't use cluster DNS.
173
+
@@ -0,0 +1,132 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ kind: ClusterRoleBinding
4
+ apiVersion: rbac.authorization.k8s.io/v1
5
+ metadata:
6
+ name: porkadot:node-proxier
7
+ labels:
8
+ <%- k8s.proxy.labels.each do |k, v| -%>
9
+ <%= k.to_s %>: <%= v %>
10
+ <%- end -%>
11
+ roleRef:
12
+ apiGroup: rbac.authorization.k8s.io
13
+ kind: ClusterRole
14
+ name: system:node-proxier
15
+ subjects:
16
+ - kind: ServiceAccount
17
+ name: kube-proxy
18
+ namespace: kube-system
19
+ ---
20
+ apiVersion: v1
21
+ kind: ServiceAccount
22
+ metadata:
23
+ name: kube-proxy
24
+ namespace: kube-system
25
+ labels:
26
+ <%- k8s.proxy.labels.each do |k, v| -%>
27
+ <%= k.to_s %>: <%= v %>
28
+ <%- end -%>
29
+ ---
30
+ kind: ConfigMap
31
+ apiVersion: v1
32
+ metadata:
33
+ name: kube-proxy
34
+ namespace: kube-system
35
+ labels:
36
+ <%- k8s.proxy.labels.each do |k, v| -%>
37
+ <%= k.to_s %>: <%= v %>
38
+ <%- end -%>
39
+ data:
40
+ config.conf: |-
41
+ <%= u.indent(k8s.proxy.proxy_config, 4) %>
42
+ kubeconfig.conf: |
43
+ apiVersion: v1
44
+ kind: Config
45
+ clusters:
46
+ - cluster:
47
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
48
+ server: https://<%= k8s.control_plane_endpoint %>
49
+ name: default
50
+ contexts:
51
+ - context:
52
+ cluster: default
53
+ namespace: default
54
+ user: default
55
+ name: default
56
+ current-context: default
57
+ users:
58
+ - name: default
59
+ user:
60
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
61
+ ---
62
+ apiVersion: apps/v1
63
+ kind: DaemonSet
64
+ metadata:
65
+ labels:
66
+ <%- k8s.proxy.labels.each do |k, v| -%>
67
+ <%= k.to_s %>: <%= v %>
68
+ <%- end -%>
69
+ name: kube-proxy
70
+ namespace: kube-system
71
+ spec:
72
+ selector:
73
+ matchLabels:
74
+ <%- k8s.proxy.instance_labels.each do |k, v| -%>
75
+ <%= k.to_s %>: <%= v %>
76
+ <%- end -%>
77
+ template:
78
+ metadata:
79
+ labels:
80
+ <%- k8s.proxy.labels.each do |k, v| -%>
81
+ <%= k.to_s %>: <%= v %>
82
+ <%- end -%>
83
+ annotations:
84
+ scheduler.alpha.kubernetes.io/critical-pod: ''
85
+ spec:
86
+ containers:
87
+ - name: kube-proxy
88
+ image: <%= k8s.image_repository %>/kube-proxy:<%= k8s.kubernetes_version %>
89
+ imagePullPolicy: IfNotPresent
90
+ command:
91
+ - kube-proxy
92
+ <%- k8s.proxy.args.each do |k, v| -%>
93
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
94
+ <%- end -%>
95
+ env:
96
+ - name: NODE_NAME
97
+ valueFrom:
98
+ fieldRef:
99
+ fieldPath: spec.nodeName
100
+ securityContext:
101
+ privileged: true
102
+ volumeMounts:
103
+ - mountPath: /var/lib/kube-proxy
104
+ name: kube-proxy
105
+ - mountPath: /run/xtables.lock
106
+ name: xtables-lock
107
+ - mountPath: /lib/modules
108
+ name: lib-modules
109
+ readOnly: true
110
+ hostNetwork: true
111
+ priorityClassName: system-node-critical
112
+ serviceAccountName: kube-proxy
113
+ tolerations:
114
+ - operator: Exists
115
+ effect: NoSchedule
116
+ volumes:
117
+ - configMap:
118
+ defaultMode: 420
119
+ name: kube-proxy
120
+ name: kube-proxy
121
+ - hostPath:
122
+ path: /run/xtables.lock
123
+ type: FileOrCreate
124
+ name: xtables-lock
125
+ - hostPath:
126
+ path: /lib/modules
127
+ type: ""
128
+ name: lib-modules
129
+ updateStrategy:
130
+ rollingUpdate:
131
+ maxUnavailable: 1
132
+ type: RollingUpdate
@@ -0,0 +1,162 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: policy/v1beta1
4
+ kind: PodDisruptionBudget
5
+ metadata:
6
+ name: kube-scheduler
7
+ namespace: kube-system
8
+ labels:
9
+ <%- k8s.scheduler.labels.each do |k, v| -%>
10
+ <%= k.to_s %>: <%= v %>
11
+ <%- end -%>
12
+ spec:
13
+ minAvailable: 1
14
+ selector:
15
+ matchLabels:
16
+ <%- k8s.scheduler.instance_labels.each do |k, v| -%>
17
+ <%= k.to_s %>: <%= v %>
18
+ <%- end -%>
19
+ ---
20
+ kind: ClusterRoleBinding
21
+ apiVersion: rbac.authorization.k8s.io/v1
22
+ metadata:
23
+ name: porkadot:kube-scheduler
24
+ labels:
25
+ <%- k8s.scheduler.labels.each do |k, v| -%>
26
+ <%= k.to_s %>: <%= v %>
27
+ <%- end -%>
28
+ roleRef:
29
+ apiGroup: rbac.authorization.k8s.io
30
+ kind: ClusterRole
31
+ name: system:kube-scheduler
32
+ subjects:
33
+ - kind: ServiceAccount
34
+ name: kube-scheduler
35
+ namespace: kube-system
36
+ ---
37
+ kind: ClusterRoleBinding
38
+ apiVersion: rbac.authorization.k8s.io/v1
39
+ metadata:
40
+ name: porkadot:volume-scheduler
41
+ labels:
42
+ <%- k8s.scheduler.labels.each do |k, v| -%>
43
+ <%= k.to_s %>: <%= v %>
44
+ <%- end -%>
45
+ roleRef:
46
+ apiGroup: rbac.authorization.k8s.io
47
+ kind: ClusterRole
48
+ name: system:volume-scheduler
49
+ subjects:
50
+ - kind: ServiceAccount
51
+ name: kube-scheduler
52
+ namespace: kube-system
53
+ ---
54
+ apiVersion: rbac.authorization.k8s.io/v1
55
+ kind: Role
56
+ metadata:
57
+ name: porkadot:kube-scheduler
58
+ namespace: kube-system
59
+ rules:
60
+ - apiGroups: [""] # "" indicates the core API group
61
+ resources: ["pods"]
62
+ verbs: ["get", "watch", "list"]
63
+ - apiGroups: [""] # "" indicates the core API group
64
+ resources: ["secrets", "configmaps"]
65
+ verbs: ["get"]
66
+ ---
67
+ apiVersion: rbac.authorization.k8s.io/v1
68
+ kind: RoleBinding
69
+ metadata:
70
+ name: porkadot:kube-scheduler
71
+ namespace: kube-system
72
+ roleRef:
73
+ apiGroup: rbac.authorization.k8s.io
74
+ kind: Role
75
+ name: porkadot:kube-scheduler
76
+ subjects:
77
+ - kind: ServiceAccount
78
+ name: kube-scheduler
79
+ namespace: kube-system
80
+ ---
81
+ apiVersion: v1
82
+ kind: ServiceAccount
83
+ metadata:
84
+ name: kube-scheduler
85
+ namespace: kube-system
86
+ labels:
87
+ <%- k8s.scheduler.labels.each do |k, v| -%>
88
+ <%= k.to_s %>: <%= v %>
89
+ <%- end -%>
90
+ ---
91
+ apiVersion: apps/v1
92
+ kind: Deployment
93
+ metadata:
94
+ name: kube-scheduler
95
+ namespace: kube-system
96
+ labels:
97
+ <%- k8s.scheduler.labels.each do |k, v| -%>
98
+ <%= k.to_s %>: <%= v %>
99
+ <%- end -%>
100
+ spec:
101
+ replicas: 2
102
+ selector:
103
+ matchLabels:
104
+ <%- k8s.scheduler.instance_labels.each do |k, v| -%>
105
+ <%= k.to_s %>: <%= v %>
106
+ <%- end -%>
107
+ template:
108
+ metadata:
109
+ labels:
110
+ <%- k8s.scheduler.labels.each do |k, v| -%>
111
+ <%= k.to_s %>: <%= v %>
112
+ <%- end -%>
113
+ annotations:
114
+ scheduler.alpha.kubernetes.io/critical-pod: ''
115
+ spec:
116
+ affinity:
117
+ podAntiAffinity:
118
+ preferredDuringSchedulingIgnoredDuringExecution:
119
+ - weight: 100
120
+ podAffinityTerm:
121
+ labelSelector:
122
+ matchExpressions:
123
+ - key: 'app.kubernetes.io/component'
124
+ operator: In
125
+ values:
126
+ - kube-scheduler
127
+ - key: 'app.kubernetes.io/managed-by'
128
+ operator: In
129
+ values:
130
+ - porkadot
131
+ topologyKey: kubernetes.io/hostname
132
+ containers:
133
+ - name: kube-scheduler
134
+ resources:
135
+ requests:
136
+ cpu: 100m
137
+ image: <%= k8s.image_repository %>/kube-scheduler:<%= k8s.kubernetes_version %>
138
+ command:
139
+ - kube-scheduler
140
+ <%- k8s.scheduler.args.each do |k, v| -%>
141
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
142
+ <%- end -%>
143
+ livenessProbe:
144
+ httpGet:
145
+ path: /healthz
146
+ port: 10251 # Note: Using default port. Update if --port option is set differently.
147
+ initialDelaySeconds: 15
148
+ timeoutSeconds: 15
149
+ priorityClassName: system-cluster-critical
150
+ nodeSelector:
151
+ k8s.unstable.cloud/master: ""
152
+ securityContext:
153
+ runAsNonRoot: true
154
+ runAsUser: 65534
155
+ serviceAccountName: kube-scheduler
156
+ tolerations:
157
+ - key: CriticalAddonsOnly
158
+ operator: Exists
159
+ - key: node-role.kubernetes.io/master
160
+ operator: Exists
161
+ effect: NoSchedule
162
+
@@ -0,0 +1,86 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: kubelet-rubber-stamp
5
+ namespace: kube-system
6
+ spec:
7
+ replicas: 1
8
+ selector:
9
+ matchLabels:
10
+ name: kubelet-rubber-stamp
11
+ template:
12
+ metadata:
13
+ labels:
14
+ name: kubelet-rubber-stamp
15
+ spec:
16
+ serviceAccountName: kubelet-rubber-stamp
17
+ tolerations:
18
+ - effect: NoSchedule
19
+ operator: Exists
20
+ nodeSelector:
21
+ k8s.unstable.cloud/master: ""
22
+ priorityClassName: system-cluster-critical
23
+ containers:
24
+ - name: kubelet-rubber-stamp
25
+ # image: quay.io/kontena/kubelet-rubber-stamp-amd64:0.2
26
+ # Use following image until issue is fixed
27
+ image: yuanying/kubelet-rubber-stamp:0.2.0.y01
28
+ args:
29
+ - "--v=2"
30
+ imagePullPolicy: Always
31
+ env:
32
+ - name: WATCH_NAMESPACE
33
+ value: ""
34
+ - name: POD_NAME
35
+ valueFrom:
36
+ fieldRef:
37
+ fieldPath: metadata.name
38
+ - name: OPERATOR_NAME
39
+ value: "kubelet-rubber-stamp"
40
+ ---
41
+ kind: ClusterRoleBinding
42
+ apiVersion: rbac.authorization.k8s.io/v1
43
+ metadata:
44
+ name: kubelet-rubber-stamp
45
+ subjects:
46
+ - kind: ServiceAccount
47
+ namespace: kube-system
48
+ name: kubelet-rubber-stamp
49
+ roleRef:
50
+ kind: ClusterRole
51
+ name: kubelet-rubber-stamp
52
+ apiGroup: rbac.authorization.k8s.io
53
+ ---
54
+ apiVersion: rbac.authorization.k8s.io/v1beta1
55
+ kind: ClusterRole
56
+ metadata:
57
+ name: kubelet-rubber-stamp
58
+ rules:
59
+ - apiGroups:
60
+ - certificates.k8s.io
61
+ resources:
62
+ - certificatesigningrequests
63
+ verbs:
64
+ - delete
65
+ - get
66
+ - list
67
+ - watch
68
+ - apiGroups:
69
+ - certificates.k8s.io
70
+ resources:
71
+ - certificatesigningrequests/approval
72
+ verbs:
73
+ - create
74
+ - update
75
+ - apiGroups:
76
+ - authorization.k8s.io
77
+ resources:
78
+ - subjectaccessreviews
79
+ verbs:
80
+ - create
81
+ ---
82
+ apiVersion: v1
83
+ kind: ServiceAccount
84
+ metadata:
85
+ name: kubelet-rubber-stamp
86
+ namespace: kube-system