porkadot 0.2.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/hack/gen-storage-version-migrator.sh +7 -0
  3. data/hack/storage-version-migrator/kustomization.yaml +13 -0
  4. data/lib/porkadot/assets.rb +9 -0
  5. data/lib/porkadot/assets/etcd.rb +1 -1
  6. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +2 -0
  7. data/lib/porkadot/assets/kubelet/config.yaml.erb +3 -0
  8. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +11 -0
  9. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +25 -2
  10. data/lib/porkadot/assets/kubelet/kubelet.service.erb +3 -1
  11. data/lib/porkadot/assets/kubernetes.rb +4 -1
  12. data/lib/porkadot/assets/kubernetes/manifests/coredns.yaml.erb +209 -0
  13. data/lib/porkadot/assets/kubernetes/manifests/dns-horizontal-autoscaler.yaml.erb +110 -0
  14. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +52 -431
  15. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +1 -1
  16. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +12 -3
  17. data/lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb +13 -0
  18. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +116 -26
  19. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +23 -1
  20. data/lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb +354 -0
  21. data/lib/porkadot/cmd/render/certs.rb +1 -1
  22. data/lib/porkadot/configs/certs.rb +1 -1
  23. data/lib/porkadot/configs/certs/k8s.rb +6 -0
  24. data/lib/porkadot/configs/kubernetes.rb +1 -0
  25. data/lib/porkadot/default.yaml +4 -3
  26. data/lib/porkadot/version.rb +1 -1
  27. metadata +8 -3
  28. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +0 -130
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4a540c5dd8b6b61feeb82c0237ec62c70740de25656cfa0b95ae0ef22bfffe5
4
- data.tar.gz: aeddd88d774b653d1e5dc40cc28996090baa90ada864ccb1457340d2a4791582
3
+ metadata.gz: 5cfc450609e887309caa2a6948b5d4c42bb283ee98e3fd6fe69e36f445f6c22f
4
+ data.tar.gz: e49e504ac9c2f040dadeeaf978b3f06e8b942a8d4f585c852afbbfe8d4c1c3ca
5
5
  SHA512:
6
- metadata.gz: 711a19855866bb0d22ffcb47558a56b20c9b000d2b5c38a9f88b9553bde85d918b069cd0520e46817e62de57fb7f29ce16e98c48688fb1a3d744f29f3c9fb6cf
7
- data.tar.gz: ffd3ff0472e4df3374086857fac3e239d638b59e97449e4e1e480673f2af64129fbe92b22979d364cf850dcb3fad6258d241e37a6557ac370a1fdbe2b72064f2
6
+ metadata.gz: 565661c3e35d41268bc974b3399f08a1ddee32f6604bd4608d84f91e341b492ea61d7ddef56d3a59c61f99694bb23fb470610dca8f9ca239ed7ad73db0deb3d6
7
+ data.tar.gz: 1a6391937252ee71a7794499494e90a532174e65d621be0b20782b24b83e11523e25e85a841c8da3a8aeff825ce068ed5520be9c6ce571e2e3f85feb2e644265
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+ export LC_ALL=C
5
+ ROOT=$(dirname "${BASH_SOURCE}")
6
+
7
+ kustomize build ${ROOT}/storage-version-migrator | sed -e "s/NAMESPACE/kube-system/g" > ${ROOT}/../lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb
@@ -0,0 +1,13 @@
1
+ resources:
2
+ - https://github.com/kubernetes-sigs/kube-storage-version-migrator/manifests/?ref=master
3
+
4
+ images:
5
+ - name: REGISTRY/storage-version-migration-initializer:VERSION
6
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-initializer
7
+ newTag: v0.0.3
8
+ - name: REGISTRY/storage-version-migration-migrator:VERSION
9
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-migrator
10
+ newTag: v0.0.3
11
+ - name: REGISTRY/storage-version-migration-trigger:VERSION
12
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-trigger
13
+ newTag: v0.0.3
@@ -4,6 +4,15 @@ module Porkadot::Assets
4
4
  space = space.times.map{' '}.join('')
5
5
  text.lines.map{|line| "#{space}#{line}"}.join('')
6
6
  end
7
+
8
+ def to_yaml(obj, space=0)
9
+ h = Hashie::Mash.new({obj: obj})
10
+ h = h.to_hash
11
+ if h['obj'].size == 0
12
+ return ''
13
+ end
14
+ return self.indent(h['obj'].to_yaml(canonical: false, header: false).gsub(/---\n/, ''), space)
15
+ end
7
16
  end
8
17
 
9
18
  def render_erb file, opts={}
@@ -86,7 +86,7 @@ module Porkadot; module Assets
86
86
  ca_key = self.certs.ca_key
87
87
  ca_cert = self.certs.ca_cert(false)
88
88
  @etcd_cert = certs.unsigned_cert(
89
- "/O=porkadot:etcd-servers/CN=porkadot:etcd-server-#{config.member_name}",
89
+ "/O=porkadot:etcd-servers/CN=#{config.member_name}",
90
90
  self.etcd_key, ca_cert,
91
91
  1 * 365 * 24 * 60 * 60
92
92
  )
@@ -30,6 +30,8 @@ spec:
30
30
  - --data-dir=/var/lib/etcd
31
31
  - --heartbeat-interval=1000
32
32
  - --election-timeout=10000
33
+ env:
34
+ <%= u.to_yaml(etcd.extra_env, 4) -%>
33
35
  volumeMounts:
34
36
  - mountPath: /var/lib/etcd
35
37
  name: etcd
@@ -12,6 +12,7 @@ authorization:
12
12
  webhook:
13
13
  cacheAuthorizedTTL: 0s
14
14
  cacheUnauthorizedTTL: 0s
15
+ cgroupDriver: systemd
15
16
  clusterDNS:
16
17
  - <%= global_config.k8s.networking.dns_ip %>
17
18
  clusterDomain: <%= global_config.k8s.networking.dns_domain %>
@@ -32,5 +33,7 @@ streamingConnectionIdleTimeout: 0s
32
33
  syncFrequency: 0s
33
34
  volumeStatsAggPeriod: 0s
34
35
  serverTLSBootstrap: true
36
+ featureGates:
37
+ CSIMigration: false
35
38
 
36
39
  # vim:filetype=yaml
@@ -26,3 +26,14 @@ curl -L https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin
26
26
  chmod +x /opt/bin/kubelet-${RELEASE}
27
27
  rm -f /opt/bin/kubelet
28
28
  ln -s /opt/bin/kubelet-${RELEASE} /opt/bin/kubelet
29
+
30
+ ETCD_VER="<%= global_config.etcd.image_tag.gsub(/\-\w+$/, '') %>"
31
+ ETCD_URL=https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-${architecture}.tar.gz
32
+ ETCD_TMP=$(mktemp -d)
33
+
34
+ curl -L ${ETCD_URL} -o ${ETCD_TMP}/etcd.tar.gz
35
+ tar zxvf ${ETCD_TMP}/etcd.tar.gz -C ${ETCD_TMP}/ --strip-components=1
36
+ chmod +x ${ETCD_TMP}/etcdctl
37
+ rm -f /opt/bin/etcdctl
38
+ mv ${ETCD_TMP}/etcdctl /opt/bin/etcdctl-${ETCD_VER}
39
+ ln -s /opt/bin/etcdctl-${ETCD_VER} /opt/bin/etcdctl
@@ -4,6 +4,7 @@ export LC_ALL=C
4
4
  ROOT=$(dirname "${BASH_SOURCE}")
5
5
 
6
6
  if type apt-get > /dev/null 2>&1 ;then
7
+ export DEBIAN_FRONTEND=noninteractive
7
8
  apt-get update
8
9
  apt-get install -y \
9
10
  ca-certificates \
@@ -22,12 +23,34 @@ if type apt-get > /dev/null 2>&1 ;then
22
23
  nfs-common \
23
24
  socat \
24
25
  udev \
25
- util-linux
26
+ util-linux \
27
+ open-iscsi
26
28
  fi
27
29
 
30
+ cat > /etc/modules-load.d/porkadot.conf <<EOF
31
+ overlay
32
+ br_netfilter
33
+ EOF
34
+
35
+ modprobe overlay
36
+ modprobe br_netfilter
37
+
28
38
  cat <<EOF > /etc/sysctl.d/k8s.conf
29
39
  net.bridge.bridge-nf-call-ip6tables = 1
30
- net.bridge.bridge-nf-call-iptables = 1
40
+ net.ipv4.ip_forward = 1
41
+ net.bridge.bridge-nf-call-iptables = 1
42
+ EOF
43
+
44
+ mkdir -p /etc/containerd
45
+ containerd config default | tee /etc/containerd/config.toml
46
+ sed -i -e "/containerd.runtimes.runc.options/a SystemdCgroup = true" /etc/containerd/config.toml
47
+
48
+ systemctl restart containerd
49
+
50
+ cat <<EOF > /etc/iscsi/initiatorname.iscsi
51
+ InitiatorName=iqn.2020-04.cloud.unstable:<%= config.hostname %>
31
52
  EOF
32
53
 
54
+ systemctl restart iscsid.service
55
+
33
56
  sysctl --system
@@ -5,11 +5,13 @@ Documentation=http://kubernetes.io/docs/
5
5
  [Service]
6
6
  EnvironmentFile=-/etc/default/kubelet
7
7
  ExecStart=/opt/bin/kubelet \
8
+ --container-runtime=remote \
9
+ --container-runtime-endpoint=/run/containerd/containerd.sock \
8
10
  --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \
9
11
  --kubeconfig=/etc/kubernetes/kubelet.conf \
10
12
  --config=/var/lib/kubelet/config.yaml \
11
13
  --network-plugin=cni \
12
- --pod-infra-container-image=k8s.gcr.io/pause:3.1 \
14
+ --pod-infra-container-image=k8s.gcr.io/pause:3.4.1 \
13
15
  --hostname-override=<%= config.hostname %> \
14
16
  --node-labels=<%= config.labels_string %> \
15
17
  --register-with-taints=<%= config.taints_string %> \
@@ -28,15 +28,18 @@ module Porkadot; module Assets
28
28
  render_erb 'manifests/porkadot.yaml'
29
29
  render_erb 'manifests/kubelet.yaml'
30
30
  render_erb "manifests/#{lb.type}.yaml"
31
+ render_secrets_erb "manifests/#{lb.type}.secrets.yaml"
31
32
  render_erb "manifests/#{cni.type}.yaml"
33
+ render_erb "manifests/coredns.yaml"
34
+ render_erb "manifests/dns-horizontal-autoscaler.yaml"
32
35
  render_erb "manifests/kube-apiserver.yaml"
33
36
  render_secrets_erb "manifests/kube-apiserver.secrets.yaml"
34
37
  render_erb "manifests/kube-proxy.yaml"
35
38
  render_erb "manifests/kube-scheduler.yaml"
36
39
  render_erb "manifests/kube-controller-manager.yaml"
37
40
  render_secrets_erb "manifests/kube-controller-manager.secrets.yaml"
38
- render_erb "manifests/pod-checkpointer.yaml"
39
41
  render_erb "manifests/kubelet-rubber-stamp.yaml"
42
+ render_erb "manifests/storage-version-migrator.yaml"
40
43
  render_erb 'install.sh'
41
44
  end
42
45
 
@@ -0,0 +1,209 @@
1
+ <% k8s = global_config.k8s -%>
2
+ # __MACHINE_GENERATED_WARNING__
3
+
4
+ apiVersion: v1
5
+ kind: ServiceAccount
6
+ metadata:
7
+ name: coredns
8
+ namespace: kube-system
9
+ labels:
10
+ kubernetes.io/cluster-service: "true"
11
+ addonmanager.kubernetes.io/mode: Reconcile
12
+ ---
13
+ apiVersion: rbac.authorization.k8s.io/v1
14
+ kind: ClusterRole
15
+ metadata:
16
+ labels:
17
+ kubernetes.io/bootstrapping: rbac-defaults
18
+ addonmanager.kubernetes.io/mode: Reconcile
19
+ name: system:coredns
20
+ rules:
21
+ - apiGroups:
22
+ - ""
23
+ resources:
24
+ - endpoints
25
+ - services
26
+ - pods
27
+ - namespaces
28
+ verbs:
29
+ - list
30
+ - watch
31
+ - apiGroups:
32
+ - ""
33
+ resources:
34
+ - nodes
35
+ verbs:
36
+ - get
37
+ - apiGroups:
38
+ - discovery.k8s.io
39
+ resources:
40
+ - endpointslices
41
+ verbs:
42
+ - list
43
+ - watch
44
+ ---
45
+ apiVersion: rbac.authorization.k8s.io/v1
46
+ kind: ClusterRoleBinding
47
+ metadata:
48
+ annotations:
49
+ rbac.authorization.kubernetes.io/autoupdate: "true"
50
+ labels:
51
+ kubernetes.io/bootstrapping: rbac-defaults
52
+ addonmanager.kubernetes.io/mode: EnsureExists
53
+ name: system:coredns
54
+ roleRef:
55
+ apiGroup: rbac.authorization.k8s.io
56
+ kind: ClusterRole
57
+ name: system:coredns
58
+ subjects:
59
+ - kind: ServiceAccount
60
+ name: coredns
61
+ namespace: kube-system
62
+ ---
63
+ apiVersion: v1
64
+ kind: ConfigMap
65
+ metadata:
66
+ name: coredns
67
+ namespace: kube-system
68
+ labels:
69
+ addonmanager.kubernetes.io/mode: EnsureExists
70
+ data:
71
+ Corefile: |
72
+ .:53 {
73
+ errors
74
+ health {
75
+ lameduck 5s
76
+ }
77
+ ready
78
+ kubernetes <%= k8s.networking.dns_domain %> in-addr.arpa ip6.arpa {
79
+ pods insecure
80
+ fallthrough in-addr.arpa ip6.arpa
81
+ ttl 30
82
+ }
83
+ prometheus :9153
84
+ forward . /etc/resolv.conf
85
+ cache 30
86
+ loop
87
+ reload
88
+ loadbalance
89
+ }
90
+ ---
91
+ apiVersion: apps/v1
92
+ kind: Deployment
93
+ metadata:
94
+ name: coredns
95
+ namespace: kube-system
96
+ labels:
97
+ k8s-app: kube-dns
98
+ kubernetes.io/cluster-service: "true"
99
+ addonmanager.kubernetes.io/mode: Reconcile
100
+ kubernetes.io/name: "CoreDNS"
101
+ spec:
102
+ # replicas: not specified here:
103
+ # 1. In order to make Addon Manager do not reconcile this replicas parameter.
104
+ # 2. Default is 1.
105
+ # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.
106
+ strategy:
107
+ type: RollingUpdate
108
+ rollingUpdate:
109
+ maxUnavailable: 1
110
+ selector:
111
+ matchLabels:
112
+ k8s-app: kube-dns
113
+ template:
114
+ metadata:
115
+ labels:
116
+ k8s-app: kube-dns
117
+ annotations:
118
+ seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
119
+ spec:
120
+ priorityClassName: system-cluster-critical
121
+ serviceAccountName: coredns
122
+ tolerations:
123
+ - key: "CriticalAddonsOnly"
124
+ operator: "Exists"
125
+ nodeSelector:
126
+ kubernetes.io/os: linux
127
+ containers:
128
+ - name: coredns
129
+ image: k8s.gcr.io/coredns/coredns:v1.8.3
130
+ imagePullPolicy: IfNotPresent
131
+ resources:
132
+ limits:
133
+ memory: 170Mi
134
+ requests:
135
+ cpu: 100m
136
+ memory: 70Mi
137
+ args: [ "-conf", "/etc/coredns/Corefile" ]
138
+ volumeMounts:
139
+ - name: config-volume
140
+ mountPath: /etc/coredns
141
+ readOnly: true
142
+ ports:
143
+ - containerPort: 53
144
+ name: dns
145
+ protocol: UDP
146
+ - containerPort: 53
147
+ name: dns-tcp
148
+ protocol: TCP
149
+ - containerPort: 9153
150
+ name: metrics
151
+ protocol: TCP
152
+ livenessProbe:
153
+ httpGet:
154
+ path: /health
155
+ port: 8080
156
+ scheme: HTTP
157
+ initialDelaySeconds: 60
158
+ timeoutSeconds: 5
159
+ successThreshold: 1
160
+ failureThreshold: 5
161
+ readinessProbe:
162
+ httpGet:
163
+ path: /ready
164
+ port: 8181
165
+ scheme: HTTP
166
+ securityContext:
167
+ allowPrivilegeEscalation: false
168
+ capabilities:
169
+ add:
170
+ - NET_BIND_SERVICE
171
+ drop:
172
+ - all
173
+ readOnlyRootFilesystem: true
174
+ dnsPolicy: Default
175
+ volumes:
176
+ - name: config-volume
177
+ configMap:
178
+ name: coredns
179
+ items:
180
+ - key: Corefile
181
+ path: Corefile
182
+ ---
183
+ apiVersion: v1
184
+ kind: Service
185
+ metadata:
186
+ name: kube-dns
187
+ namespace: kube-system
188
+ annotations:
189
+ prometheus.io/port: "9153"
190
+ prometheus.io/scrape: "true"
191
+ labels:
192
+ k8s-app: kube-dns
193
+ kubernetes.io/cluster-service: "true"
194
+ addonmanager.kubernetes.io/mode: Reconcile
195
+ kubernetes.io/name: "CoreDNS"
196
+ spec:
197
+ selector:
198
+ k8s-app: kube-dns
199
+ clusterIP: <%= k8s.networking.dns_ip %>
200
+ ports:
201
+ - name: dns
202
+ port: 53
203
+ protocol: UDP
204
+ - name: dns-tcp
205
+ port: 53
206
+ protocol: TCP
207
+ - name: metrics
208
+ port: 9153
209
+ protocol: TCP
@@ -0,0 +1,110 @@
1
+ # Copyright 2016 The Kubernetes Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ kind: ServiceAccount
16
+ apiVersion: v1
17
+ metadata:
18
+ name: kube-dns-autoscaler
19
+ namespace: kube-system
20
+ labels:
21
+ addonmanager.kubernetes.io/mode: Reconcile
22
+ ---
23
+ kind: ClusterRole
24
+ apiVersion: rbac.authorization.k8s.io/v1
25
+ metadata:
26
+ name: system:kube-dns-autoscaler
27
+ labels:
28
+ addonmanager.kubernetes.io/mode: Reconcile
29
+ rules:
30
+ - apiGroups: [""]
31
+ resources: ["nodes"]
32
+ verbs: ["list", "watch"]
33
+ - apiGroups: [""]
34
+ resources: ["replicationcontrollers/scale"]
35
+ verbs: ["get", "update"]
36
+ - apiGroups: ["apps"]
37
+ resources: ["deployments/scale", "replicasets/scale"]
38
+ verbs: ["get", "update"]
39
+ # Remove the configmaps rule once below issue is fixed:
40
+ # kubernetes-incubator/cluster-proportional-autoscaler#16
41
+ - apiGroups: [""]
42
+ resources: ["configmaps"]
43
+ verbs: ["get", "create"]
44
+ ---
45
+ kind: ClusterRoleBinding
46
+ apiVersion: rbac.authorization.k8s.io/v1
47
+ metadata:
48
+ name: system:kube-dns-autoscaler
49
+ labels:
50
+ addonmanager.kubernetes.io/mode: Reconcile
51
+ subjects:
52
+ - kind: ServiceAccount
53
+ name: kube-dns-autoscaler
54
+ namespace: kube-system
55
+ roleRef:
56
+ kind: ClusterRole
57
+ name: system:kube-dns-autoscaler
58
+ apiGroup: rbac.authorization.k8s.io
59
+
60
+ ---
61
+ apiVersion: apps/v1
62
+ kind: Deployment
63
+ metadata:
64
+ name: kube-dns-autoscaler
65
+ namespace: kube-system
66
+ labels:
67
+ k8s-app: kube-dns-autoscaler
68
+ kubernetes.io/cluster-service: "true"
69
+ addonmanager.kubernetes.io/mode: Reconcile
70
+ spec:
71
+ selector:
72
+ matchLabels:
73
+ k8s-app: kube-dns-autoscaler
74
+ template:
75
+ metadata:
76
+ labels:
77
+ k8s-app: kube-dns-autoscaler
78
+ annotations:
79
+ seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
80
+ spec:
81
+ priorityClassName: system-cluster-critical
82
+ securityContext:
83
+ supplementalGroups: [ 65534 ]
84
+ fsGroup: 65534
85
+ nodeSelector:
86
+ kubernetes.io/os: linux
87
+ containers:
88
+ - name: autoscaler
89
+ image: k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.7.1
90
+ resources:
91
+ requests:
92
+ cpu: "20m"
93
+ memory: "10Mi"
94
+ command:
95
+ - /cluster-proportional-autoscaler
96
+ - --namespace=kube-system
97
+ - --configmap=kube-dns-autoscaler
98
+ # Should keep target in sync with cluster/addons/dns/kube-dns.yaml.base
99
+ - --target=Deployment/coredns
100
+ # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate.
101
+ # If using small nodes, "nodesPerReplica" should dominate.
102
+ - --default-params={"linear":{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}}
103
+ - --logtostderr=true
104
+ - --v=2
105
+ tolerations:
106
+ - key: "CriticalAddonsOnly"
107
+ operator: "Exists"
108
+ nodeSelector:
109
+ kubernetes.io/os: linux
110
+ serviceAccountName: kube-dns-autoscaler