porkadot 0.2.0 → 0.19.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 (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