porkadot 0.2.2 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) 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 +77 -0
  4. data/lib/porkadot/assets.rb +9 -0
  5. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +4 -30
  6. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +13 -16
  7. data/lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb +3 -2
  8. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +3 -5
  9. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +2 -0
  10. data/lib/porkadot/assets/kubelet.rb +1 -0
  11. data/lib/porkadot/assets/kubelet/config.yaml.erb +3 -0
  12. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +11 -0
  13. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +19 -2
  14. data/lib/porkadot/assets/kubelet/kubelet.service.erb +3 -1
  15. data/lib/porkadot/assets/kubelet/setup-containerd.sh.erb +10 -0
  16. data/lib/porkadot/assets/kubernetes.rb +4 -1
  17. data/lib/porkadot/assets/kubernetes/manifests/coredns.yaml.erb +209 -0
  18. data/lib/porkadot/assets/kubernetes/manifests/dns-horizontal-autoscaler.yaml.erb +110 -0
  19. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +52 -431
  20. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +1 -1
  21. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +12 -3
  22. data/lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb +13 -0
  23. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +116 -26
  24. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +23 -0
  25. data/lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb +357 -0
  26. data/lib/porkadot/cmd/cli.rb +16 -0
  27. data/lib/porkadot/cmd/render/certs.rb +1 -1
  28. data/lib/porkadot/configs/certs/k8s.rb +6 -0
  29. data/lib/porkadot/configs/kubernetes.rb +30 -1
  30. data/lib/porkadot/default.yaml +4 -3
  31. data/lib/porkadot/install/kubelet.rb +24 -0
  32. data/lib/porkadot/version.rb +1 -1
  33. metadata +9 -3
  34. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +0 -130
@@ -13,6 +13,22 @@ module Porkadot; module Cmd
13
13
  desc "install", "Install kubernetes"
14
14
  subcommand "install", Porkadot::Cmd::Install::Cli
15
15
 
16
+ desc "setup-containerd", "Setup containerd"
17
+ option :node, type: :string
18
+ option :force, type: :boolean, default: false
19
+ def setup_containerd
20
+ logger.info "Setup containerd"
21
+ kubelets = Porkadot::Install::KubeletList.new(self.config)
22
+ nodes = []
23
+ if node = options[:node]
24
+ nodes = kubelets[node]
25
+ else
26
+ nodes = kubelets.kubelets.values
27
+ end
28
+ kubelets.setup_containerd hosts: nodes, force: options[:force]
29
+ ""
30
+ end
31
+
16
32
  desc "set-config", "Set cluster to kubeconfig"
17
33
  def set_config
18
34
  name = config.k8s.cluster_name
@@ -40,7 +40,7 @@ module Porkadot; module Cmd; module Render; module Certs
40
40
  certs.apiserver_cert(true)
41
41
  logger.info "--> Kubelet client key and certs"
42
42
  certs.kubelet_client_key
43
- certs.kubelet_client_cert
43
+ certs.kubelet_client_cert(true)
44
44
  # logger.info "--> Bootstrap client key and certs"
45
45
  # bootstrap_client_key = self.private_key(self.assets.k8s_bootstrap_key_path)
46
46
  # self.client_cert(self.assets.k8s_bootstrap_cert_path, '/O=porkadot:node-bootstrappers/CN=node-bootstrapper', bootstrap_client_key, ca_cert, ca_key)
@@ -33,6 +33,12 @@ module Porkadot; module Configs; class Certs
33
33
  DNS:kubernetes.default
34
34
  DNS:kubernetes.default.svc
35
35
  DNS:kubernetes.default.svc.#{self.config.k8s.networking.dns_domain}
36
+ DNS:porkadot-kubernetes
37
+ DNS:porkadot-kubernetes.kube-system
38
+ DNS:porkadot-kubernetes.kube-system.svc
39
+ DNS:porkadot-kubernetes-latest
40
+ DNS:porkadot-kubernetes-latest.kube-system
41
+ DNS:porkadot-kubernetes-latest.kube-system.svc
36
42
  DNS:localhost
37
43
  IP:#{self.config.k8s.networking.kubernetes_ip}
38
44
  IP:127.0.0.1
@@ -56,6 +56,7 @@ module Porkadot; module Configs
56
56
  "#{RECOMMENDED_LABEL_PREFIX}/version": self.config.k8s.kubernetes_version,
57
57
  "#{RECOMMENDED_LABEL_PREFIX}/part-of": 'kubernetes',
58
58
  "#{RECOMMENDED_LABEL_PREFIX}/managed-by": 'porkadot',
59
+ "k8s-app": self.component_name,
59
60
  })
60
61
  end
61
62
 
@@ -68,11 +69,14 @@ module Porkadot; module Configs
68
69
  }
69
70
  end
70
71
 
71
- def args
72
+ def args bootstrap: false
72
73
  extra = {}
73
74
  if self.extra_args
74
75
  extra = self.extra_args.map{|i| i.split('=', 2)}.to_h
75
76
  end
77
+ if bootstrap
78
+ extra = self.bootstrap_args.merge(extra)
79
+ end
76
80
  return self.default_args.merge(extra)
77
81
  end
78
82
 
@@ -95,6 +99,10 @@ module Porkadot; module Configs
95
99
  'kube-apiserver'
96
100
  end
97
101
 
102
+ def bootstrap_args
103
+ return {}
104
+ end
105
+
98
106
  def default_args
99
107
  return %W(
100
108
  --advertise-address=$(POD_IP)
@@ -102,6 +110,7 @@ module Porkadot; module Configs
102
110
  --authorization-mode=Node,RBAC
103
111
  --bind-address=0.0.0.0
104
112
  --client-ca-file=/etc/kubernetes/pki/kubernetes/ca.crt
113
+ --enable-admission-plugins=NodeRestriction
105
114
  --enable-bootstrap-token-auth=true
106
115
  --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
107
116
  --etcd-certfile=/etc/kubernetes/pki/etcd/etcd-client.crt
@@ -142,6 +151,14 @@ module Porkadot; module Configs
142
151
  'kube-scheduler'
143
152
  end
144
153
 
154
+ def bootstrap_args
155
+ return %W(
156
+ --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
157
+ --authentication-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
158
+ --authorization-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
159
+ ).map {|i| i.split('=', 2)}.to_h
160
+ end
161
+
145
162
  def default_args
146
163
  return %W(
147
164
  --leader-elect=true
@@ -163,6 +180,12 @@ module Porkadot; module Configs
163
180
  'kube-controller-manager'
164
181
  end
165
182
 
183
+ def bootstrap_args
184
+ return %W(
185
+ --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
186
+ ).map {|i| i.split('=', 2)}.to_h
187
+ end
188
+
166
189
  def default_args
167
190
  return %W(
168
191
  --allocate-node-cidrs=true
@@ -201,6 +224,12 @@ module Porkadot; module Configs
201
224
  'kube-proxy'
202
225
  end
203
226
 
227
+ def bootstrap_args
228
+ return %W(
229
+ --config=/etc/kubernetes/bootstrap/kube-proxy-bootstrap.yaml
230
+ ).map {|i| i.split('=', 2)}.to_h
231
+ end
232
+
204
233
  def default_args
205
234
  return %W(
206
235
  --config=/var/lib/kube-proxy/config.conf
@@ -27,10 +27,11 @@ lb:
27
27
 
28
28
  etcd:
29
29
  image_repository: gcr.io/etcd-development/etcd
30
- image_tag: v3.3.10
30
+ image_tag: v3.4.3
31
+ extra_env: []
31
32
 
32
33
  kubernetes:
33
- kubernetes_version: v1.17.3
34
+ kubernetes_version: v1.19.6
34
35
  image_repository: k8s.gcr.io
35
36
 
36
37
  networking:
@@ -101,7 +102,7 @@ kubernetes:
101
102
  webhook:
102
103
  cacheAuthorizedTTL: 0s
103
104
  cacheUnauthorizedTTL: 0s
104
- cgroupDriver: cgroupfs
105
+ cgroupDriver: systemd
105
106
  clusterDNS: []
106
107
  clusterDomain: cluster.local
107
108
  cpuManagerReconcilePeriod: 0s
@@ -16,6 +16,30 @@ module Porkadot; module Install
16
16
  end
17
17
  end
18
18
 
19
+ def setup_containerd hosts: nil, force: false
20
+ unless hosts
21
+ hosts = []
22
+ self.kubelets.each do |_, v|
23
+ hosts << v
24
+ end
25
+ end
26
+
27
+ on(hosts) do |host|
28
+ execute(:mkdir, '-p', Porkadot::Install::KUBE_TEMP)
29
+ if test("[ -d #{KUBE_TEMP} ]")
30
+ execute(:rm, '-rf', KUBE_TEMP)
31
+ execute(:rm, '-rf', KUBE_SECRETS_TEMP)
32
+ end
33
+ upload! host.config.target_path, KUBE_TEMP, recursive: true
34
+ upload! host.config.target_secrets_path, KUBE_SECRETS_TEMP, recursive: true
35
+ execute(:cp, '-r', KUBE_SECRETS_TEMP + '/*', KUBE_TEMP)
36
+
37
+ as user: 'root' do
38
+ execute(:bash, File.join(KUBE_TEMP, 'setup-containerd.sh'))
39
+ end
40
+ end
41
+ end
42
+
19
43
  def install hosts: nil, force: false
20
44
  unless hosts
21
45
  hosts = []
@@ -1,3 +1,3 @@
1
1
  module Porkadot
2
- VERSION = "0.2.2"
2
+ VERSION = "0.19.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: porkadot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OTSUKA, Yuanying
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-15 00:00:00.000000000 Z
11
+ date: 2021-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -113,6 +113,8 @@ files:
113
113
  - config/porkadot.yaml
114
114
  - config/unstable.yaml
115
115
  - exe/porkadot
116
+ - hack/gen-storage-version-migrator.sh
117
+ - hack/storage-version-migrator/kustomization.yaml
116
118
  - lib/porkadot.rb
117
119
  - lib/porkadot/assets.rb
118
120
  - lib/porkadot/assets/bootstrap.rb
@@ -138,8 +140,11 @@ files:
138
140
  - lib/porkadot/assets/kubelet/install-pkgs.sh.erb
139
141
  - lib/porkadot/assets/kubelet/install.sh.erb
140
142
  - lib/porkadot/assets/kubelet/kubelet.service.erb
143
+ - lib/porkadot/assets/kubelet/setup-containerd.sh.erb
141
144
  - lib/porkadot/assets/kubernetes.rb
142
145
  - lib/porkadot/assets/kubernetes/install.sh.erb
146
+ - lib/porkadot/assets/kubernetes/manifests/coredns.yaml.erb
147
+ - lib/porkadot/assets/kubernetes/manifests/dns-horizontal-autoscaler.yaml.erb
143
148
  - lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb
144
149
  - lib/porkadot/assets/kubernetes/manifests/kube-apiserver.secrets.yaml.erb
145
150
  - lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb
@@ -149,9 +154,10 @@ files:
149
154
  - lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb
150
155
  - lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb
151
156
  - lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb
157
+ - lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb
152
158
  - lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb
153
- - lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb
154
159
  - lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb
160
+ - lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb
155
161
  - lib/porkadot/cmd.rb
156
162
  - lib/porkadot/cmd/cli.rb
157
163
  - lib/porkadot/cmd/install.rb
@@ -1,130 +0,0 @@
1
- <% k8s = global_config.k8s -%>
2
- ---
3
- apiVersion: v1
4
- kind: ServiceAccount
5
- metadata:
6
- name: pod-checkpointer
7
- namespace: kube-system
8
- ---
9
- apiVersion: rbac.authorization.k8s.io/v1
10
- kind: Role
11
- metadata:
12
- name: pod-checkpointer
13
- namespace: kube-system
14
- rules:
15
- - apiGroups: [""] # "" indicates the core API group
16
- resources: ["pods"]
17
- verbs: ["get", "watch", "list"]
18
- - apiGroups: [""] # "" indicates the core API group
19
- resources: ["secrets", "configmaps"]
20
- verbs: ["get"]
21
- ---
22
- apiVersion: rbac.authorization.k8s.io/v1
23
- kind: RoleBinding
24
- metadata:
25
- name: pod-checkpointer
26
- namespace: kube-system
27
- roleRef:
28
- apiGroup: rbac.authorization.k8s.io
29
- kind: Role
30
- name: pod-checkpointer
31
- subjects:
32
- - kind: ServiceAccount
33
- name: pod-checkpointer
34
- namespace: kube-system
35
- ---
36
- apiVersion: rbac.authorization.k8s.io/v1
37
- kind: ClusterRole
38
- metadata:
39
- name: pod-checkpointer
40
- rules:
41
- - apiGroups: [""]
42
- resources: ["nodes", "nodes/proxy"]
43
- verbs: ["get"]
44
- ---
45
- apiVersion: rbac.authorization.k8s.io/v1
46
- kind: ClusterRoleBinding
47
- metadata:
48
- name: pod-checkpointer
49
- roleRef:
50
- apiGroup: rbac.authorization.k8s.io
51
- kind: ClusterRole
52
- name: pod-checkpointer
53
- subjects:
54
- - kind: ServiceAccount
55
- name: pod-checkpointer
56
- namespace: kube-system
57
- ---
58
- apiVersion: apps/v1
59
- kind: DaemonSet
60
- metadata:
61
- name: pod-checkpointer
62
- namespace: kube-system
63
- labels:
64
- tier: control-plane
65
- k8s-app: pod-checkpointer
66
- spec:
67
- selector:
68
- matchLabels:
69
- tier: control-plane
70
- k8s-app: pod-checkpointer
71
- template:
72
- metadata:
73
- labels:
74
- tier: control-plane
75
- k8s-app: pod-checkpointer
76
- annotations:
77
- checkpointer.alpha.coreos.com/checkpoint: "true"
78
- spec:
79
- containers:
80
- - name: pod-checkpointer
81
- image: quay.io/coreos/pod-checkpointer:83e25e5968391b9eb342042c435d1b3eeddb2be1
82
- command:
83
- - /checkpoint
84
- - --lock-file=/var/run/lock/pod-checkpointer.lock
85
- - --kubeconfig=/etc/checkpointer/kubeconfig
86
- - --checkpoint-grace-period=5m
87
- env:
88
- - name: NODE_NAME
89
- valueFrom:
90
- fieldRef:
91
- fieldPath: spec.nodeName
92
- - name: POD_NAME
93
- valueFrom:
94
- fieldRef:
95
- fieldPath: metadata.name
96
- - name: POD_NAMESPACE
97
- valueFrom:
98
- fieldRef:
99
- fieldPath: metadata.namespace
100
- imagePullPolicy: Always
101
- volumeMounts:
102
- - mountPath: /etc/checkpointer
103
- name: kubeconfig
104
- - mountPath: /etc/kubernetes
105
- name: etc-kubernetes
106
- - mountPath: /var/run
107
- name: var-run
108
- serviceAccountName: pod-checkpointer
109
- hostNetwork: true
110
- nodeSelector:
111
- k8s.unstable.cloud/master: ""
112
- restartPolicy: Always
113
- tolerations:
114
- - key: node-role.kubernetes.io/master
115
- operator: Exists
116
- effect: NoSchedule
117
- volumes:
118
- - name: kubeconfig
119
- configMap:
120
- name: kubeconfig-in-cluster
121
- - name: etc-kubernetes
122
- hostPath:
123
- path: /etc/kubernetes
124
- - name: var-run
125
- hostPath:
126
- path: /var/run
127
- updateStrategy:
128
- rollingUpdate:
129
- maxUnavailable: 1
130
- type: RollingUpdate