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
@@ -62,7 +62,7 @@ rules:
62
62
  verbs: ["get", "watch", "list"]
63
63
  - apiGroups: [""] # "" indicates the core API group
64
64
  resources: ["secrets", "configmaps"]
65
- verbs: ["get"]
65
+ verbs: ["get", "watch", "list"]
66
66
  ---
67
67
  apiVersion: rbac.authorization.k8s.io/v1
68
68
  kind: RoleBinding
@@ -24,7 +24,7 @@ spec:
24
24
  - name: kubelet-rubber-stamp
25
25
  # image: quay.io/kontena/kubelet-rubber-stamp-amd64:0.2
26
26
  # Use following image until issue is fixed
27
- image: yuanying/kubelet-rubber-stamp:0.2.0.y01
27
+ image: yuanying/kubelet-rubber-stamp:0.3.0.y01
28
28
  args:
29
29
  - "--v=2"
30
30
  imagePullPolicy: Always
@@ -51,17 +51,26 @@ roleRef:
51
51
  name: kubelet-rubber-stamp
52
52
  apiGroup: rbac.authorization.k8s.io
53
53
  ---
54
- apiVersion: rbac.authorization.k8s.io/v1beta1
54
+ apiVersion: rbac.authorization.k8s.io/v1
55
55
  kind: ClusterRole
56
56
  metadata:
57
57
  name: kubelet-rubber-stamp
58
58
  rules:
59
+ - apiGroups:
60
+ - certificates.k8s.io
61
+ resources:
62
+ - signers
63
+ # legacy-unknown: support before kubernetes-1.18.0
64
+ resourceNames:
65
+ - "kubernetes.io/legacy-unknown"
66
+ - "kubernetes.io/kubelet-serving"
67
+ verbs:
68
+ - approve
59
69
  - apiGroups:
60
70
  - certificates.k8s.io
61
71
  resources:
62
72
  - certificatesigningrequests
63
73
  verbs:
64
- - delete
65
74
  - get
66
75
  - list
67
76
  - watch
@@ -0,0 +1,13 @@
1
+ <% require 'securerandom' -%>
2
+ <% k8s = global_config.k8s -%>
3
+ ---
4
+ apiVersion: v1
5
+ stringData:
6
+ secretkey: <%= SecureRandom.base64(128) %>
7
+ kind: Secret
8
+ metadata:
9
+ name: memberlist
10
+ namespace: metallb-system
11
+ labels:
12
+ app: metallb
13
+ type: Opaque
@@ -8,6 +8,48 @@ metadata:
8
8
  ---
9
9
  apiVersion: policy/v1beta1
10
10
  kind: PodSecurityPolicy
11
+ metadata:
12
+ labels:
13
+ app: metallb
14
+ name: controller
15
+ namespace: metallb-system
16
+ spec:
17
+ allowPrivilegeEscalation: false
18
+ allowedCapabilities: []
19
+ allowedHostPaths: []
20
+ defaultAddCapabilities: []
21
+ defaultAllowPrivilegeEscalation: false
22
+ fsGroup:
23
+ ranges:
24
+ - max: 65535
25
+ min: 1
26
+ rule: MustRunAs
27
+ hostIPC: false
28
+ hostNetwork: false
29
+ hostPID: false
30
+ privileged: false
31
+ readOnlyRootFilesystem: true
32
+ requiredDropCapabilities:
33
+ - ALL
34
+ runAsUser:
35
+ ranges:
36
+ - max: 65535
37
+ min: 1
38
+ rule: MustRunAs
39
+ seLinux:
40
+ rule: RunAsAny
41
+ supplementalGroups:
42
+ ranges:
43
+ - max: 65535
44
+ min: 1
45
+ rule: MustRunAs
46
+ volumes:
47
+ - configMap
48
+ - secret
49
+ - emptyDir
50
+ ---
51
+ apiVersion: policy/v1beta1
52
+ kind: PodSecurityPolicy
11
53
  metadata:
12
54
  labels:
13
55
  app: metallb
@@ -19,13 +61,21 @@ spec:
19
61
  - NET_ADMIN
20
62
  - NET_RAW
21
63
  - SYS_ADMIN
64
+ allowedHostPaths: []
65
+ defaultAddCapabilities: []
66
+ defaultAllowPrivilegeEscalation: false
22
67
  fsGroup:
23
68
  rule: RunAsAny
69
+ hostIPC: false
24
70
  hostNetwork: true
71
+ hostPID: false
25
72
  hostPorts:
26
73
  - max: 7472
27
74
  min: 7472
28
75
  privileged: true
76
+ readOnlyRootFilesystem: true
77
+ requiredDropCapabilities:
78
+ - ALL
29
79
  runAsUser:
30
80
  rule: RunAsAny
31
81
  seLinux:
@@ -33,7 +83,9 @@ spec:
33
83
  supplementalGroups:
34
84
  rule: RunAsAny
35
85
  volumes:
36
- - '*'
86
+ - configMap
87
+ - secret
88
+ - emptyDir
37
89
  ---
38
90
  apiVersion: v1
39
91
  kind: ServiceAccount
@@ -80,6 +132,14 @@ rules:
80
132
  verbs:
81
133
  - create
82
134
  - patch
135
+ - apiGroups:
136
+ - policy
137
+ resourceNames:
138
+ - controller
139
+ resources:
140
+ - podsecuritypolicies
141
+ verbs:
142
+ - use
83
143
  ---
84
144
  apiVersion: rbac.authorization.k8s.io/v1
85
145
  kind: ClusterRole
@@ -106,7 +166,7 @@ rules:
106
166
  - create
107
167
  - patch
108
168
  - apiGroups:
109
- - extensions
169
+ - policy
110
170
  resourceNames:
111
171
  - speaker
112
172
  resources:
@@ -132,6 +192,21 @@ rules:
132
192
  - watch
133
193
  ---
134
194
  apiVersion: rbac.authorization.k8s.io/v1
195
+ kind: Role
196
+ metadata:
197
+ labels:
198
+ app: metallb
199
+ name: pod-lister
200
+ namespace: metallb-system
201
+ rules:
202
+ - apiGroups:
203
+ - ''
204
+ resources:
205
+ - pods
206
+ verbs:
207
+ - list
208
+ ---
209
+ apiVersion: rbac.authorization.k8s.io/v1
135
210
  kind: ClusterRoleBinding
136
211
  metadata:
137
212
  labels:
@@ -178,6 +253,21 @@ subjects:
178
253
  - kind: ServiceAccount
179
254
  name: speaker
180
255
  ---
256
+ apiVersion: rbac.authorization.k8s.io/v1
257
+ kind: RoleBinding
258
+ metadata:
259
+ labels:
260
+ app: metallb
261
+ name: pod-lister
262
+ namespace: metallb-system
263
+ roleRef:
264
+ apiGroup: rbac.authorization.k8s.io
265
+ kind: Role
266
+ name: pod-lister
267
+ subjects:
268
+ - kind: ServiceAccount
269
+ name: speaker
270
+ ---
181
271
  apiVersion: apps/v1
182
272
  kind: DaemonSet
183
273
  metadata:
@@ -200,24 +290,6 @@ spec:
200
290
  app: metallb
201
291
  component: speaker
202
292
  spec:
203
- initContainers:
204
- - command:
205
- - "iptables"
206
- - "-P"
207
- - "FORWARD"
208
- - "ACCEPT"
209
- image: <%= k8s.image_repository %>/hyperkube:<%= k8s.kubernetes_version %>
210
- imagePullPolicy: IfNotPresent
211
- name: default-iptables
212
- securityContext:
213
- allowPrivilegeEscalation: false
214
- capabilities:
215
- add:
216
- - NET_ADMIN
217
- - NET_RAW
218
- drop:
219
- - ALL
220
- readOnlyRootFilesystem: true
221
293
  containers:
222
294
  - args:
223
295
  - --port=7472
@@ -231,8 +303,26 @@ spec:
231
303
  valueFrom:
232
304
  fieldRef:
233
305
  fieldPath: status.hostIP
234
- image: metallb/speaker:v0.8.2
235
- imagePullPolicy: IfNotPresent
306
+ - name: METALLB_ML_BIND_ADDR
307
+ valueFrom:
308
+ fieldRef:
309
+ fieldPath: status.podIP
310
+ # needed when another software is also using memberlist / port 7946
311
+ #- name: METALLB_ML_BIND_PORT
312
+ # value: "7946"
313
+ - name: METALLB_ML_LABELS
314
+ value: "app=metallb,component=speaker"
315
+ - name: METALLB_ML_NAMESPACE
316
+ valueFrom:
317
+ fieldRef:
318
+ fieldPath: metadata.namespace
319
+ - name: METALLB_ML_SECRET_KEY
320
+ valueFrom:
321
+ secretKeyRef:
322
+ name: memberlist
323
+ key: secretkey
324
+ image: metallb/speaker:v0.9.4
325
+ imagePullPolicy: Always
236
326
  name: speaker
237
327
  ports:
238
328
  - containerPort: 7472
@@ -255,7 +345,7 @@ spec:
255
345
  nodeSelector:
256
346
  beta.kubernetes.io/os: linux
257
347
  serviceAccountName: speaker
258
- terminationGracePeriodSeconds: 0
348
+ terminationGracePeriodSeconds: 2
259
349
  tolerations:
260
350
  - effect: NoSchedule
261
351
  key: node-role.kubernetes.io/master
@@ -287,8 +377,8 @@ spec:
287
377
  - args:
288
378
  - --port=7472
289
379
  - --config=config
290
- image: metallb/controller:v0.8.2
291
- imagePullPolicy: IfNotPresent
380
+ image: metallb/controller:v0.9.5
381
+ imagePullPolicy: Always
292
382
  name: controller
293
383
  ports:
294
384
  - containerPort: 7472
@@ -304,7 +394,7 @@ spec:
304
394
  - all
305
395
  readOnlyRootFilesystem: true
306
396
  nodeSelector:
307
- beta.kubernetes.io/os: linux
397
+ kubernetes.io/os: linux
308
398
  securityContext:
309
399
  runAsNonRoot: true
310
400
  runAsUser: 65534
@@ -36,7 +36,6 @@ spec:
36
36
  <%= k.to_s %>: <%= v %>
37
37
  <%- end -%>
38
38
  <%- _, port = global_config.k8s.control_plane_endpoint_host_and_port -%>
39
- loadBalancerIP: <%= host %>
40
39
  ports:
41
40
  - name: https
42
41
  port: <%= port %>
@@ -67,3 +66,26 @@ data:
67
66
  - context:
68
67
  cluster: local
69
68
  user: service-account
69
+ ---
70
+ apiVersion: v1
71
+ kind: ConfigMap
72
+ metadata:
73
+ name: kubeconfig-in-cluster-latest
74
+ namespace: kube-system
75
+ data:
76
+ kubeconfig: |
77
+ apiVersion: v1
78
+ clusters:
79
+ - name: local
80
+ cluster:
81
+ server: https://porkadot-kubernetes-latest:<%= port %>
82
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
83
+ users:
84
+ - name: service-account
85
+ user:
86
+ # Use service account token
87
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
88
+ contexts:
89
+ - context:
90
+ cluster: local
91
+ user: service-account
@@ -0,0 +1,354 @@
1
+ apiVersion: v1
2
+ kind: Namespace
3
+ metadata:
4
+ name: kube-system
5
+ ---
6
+ apiVersion: apiextensions.k8s.io/v1
7
+ kind: CustomResourceDefinition
8
+ metadata:
9
+ annotations:
10
+ api-approved.kubernetes.io: https://github.com/kubernetes/enhancements/pull/747
11
+ name: storagestates.migration.k8s.io
12
+ spec:
13
+ group: migration.k8s.io
14
+ names:
15
+ kind: StorageState
16
+ listKind: StorageStateList
17
+ plural: storagestates
18
+ singular: storagestate
19
+ preserveUnknownFields: false
20
+ scope: Cluster
21
+ versions:
22
+ - name: v1alpha1
23
+ schema:
24
+ openAPIV3Schema:
25
+ description: The state of the storage of a specific resource.
26
+ properties:
27
+ apiVersion:
28
+ description: 'APIVersion defines the versioned schema of this representation
29
+ of an object. Servers should convert recognized schemas to the latest
30
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
31
+ type: string
32
+ kind:
33
+ description: 'Kind is a string value representing the REST resource this
34
+ object represents. Servers may infer this from the endpoint the client
35
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
36
+ type: string
37
+ metadata:
38
+ properties:
39
+ name:
40
+ description: name must be "<.spec.resource.resouce>.<.spec.resource.group>".
41
+ type: string
42
+ type: object
43
+ spec:
44
+ description: Specification of the storage state.
45
+ properties:
46
+ resource:
47
+ description: The resource this storageState is about.
48
+ properties:
49
+ group:
50
+ description: The name of the group.
51
+ type: string
52
+ resource:
53
+ description: The name of the resource.
54
+ type: string
55
+ type: object
56
+ type: object
57
+ status:
58
+ description: Status of the storage state.
59
+ properties:
60
+ currentStorageVersionHash:
61
+ description: The hash value of the current storage version, as shown
62
+ in the discovery document served by the API server. Storage Version
63
+ is the version to which objects are converted to before persisted.
64
+ type: string
65
+ lastHeartbeatTime:
66
+ description: LastHeartbeatTime is the last time the storage migration
67
+ triggering controller checks the storage version hash of this resource
68
+ in the discovery document and updates this field.
69
+ format: date-time
70
+ type: string
71
+ persistedStorageVersionHashes:
72
+ description: The hash values of storage versions that persisted instances
73
+ of spec.resource might still be encoded in. "Unknown" is a valid
74
+ value in the list, and is the default value. It is not safe to upgrade
75
+ or downgrade to an apiserver binary that does not support all versions
76
+ listed in this field, or if "Unknown" is listed. Once the storage
77
+ version migration for this resource has completed, the value of
78
+ this field is refined to only contain the currentStorageVersionHash.
79
+ Once the apiserver has changed the storage version, the new storage
80
+ version is appended to the list.
81
+ items:
82
+ type: string
83
+ type: array
84
+ type: object
85
+ type: object
86
+ served: true
87
+ storage: true
88
+ subresources:
89
+ status: {}
90
+ ---
91
+ apiVersion: apiextensions.k8s.io/v1
92
+ kind: CustomResourceDefinition
93
+ metadata:
94
+ annotations:
95
+ api-approved.kubernetes.io: https://github.com/kubernetes/community/pull/2524
96
+ name: storageversionmigrations.migration.k8s.io
97
+ spec:
98
+ group: migration.k8s.io
99
+ names:
100
+ kind: StorageVersionMigration
101
+ listKind: StorageVersionMigrationList
102
+ plural: storageversionmigrations
103
+ singular: storageversionmigration
104
+ preserveUnknownFields: false
105
+ scope: Cluster
106
+ versions:
107
+ - name: v1alpha1
108
+ schema:
109
+ openAPIV3Schema:
110
+ description: StorageVersionMigration represents a migration of stored data
111
+ to the latest storage version.
112
+ properties:
113
+ apiVersion:
114
+ description: 'APIVersion defines the versioned schema of this representation
115
+ of an object. Servers should convert recognized schemas to the latest
116
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
117
+ type: string
118
+ kind:
119
+ description: 'Kind is a string value representing the REST resource this
120
+ object represents. Servers may infer this from the endpoint the client
121
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
122
+ type: string
123
+ metadata:
124
+ type: object
125
+ spec:
126
+ description: Specification of the migration.
127
+ properties:
128
+ continueToken:
129
+ description: The token used in the list options to get the next chunk
130
+ of objects to migrate. When the .status.conditions indicates the
131
+ migration is "Running", users can use this token to check the progress
132
+ of the migration.
133
+ type: string
134
+ resource:
135
+ description: The resource that is being migrated. The migrator sends
136
+ requests to the endpoint serving the resource. Immutable.
137
+ properties:
138
+ group:
139
+ description: The name of the group.
140
+ type: string
141
+ resource:
142
+ description: The name of the resource.
143
+ type: string
144
+ version:
145
+ description: The name of the version.
146
+ type: string
147
+ type: object
148
+ required:
149
+ - resource
150
+ type: object
151
+ status:
152
+ description: Status of the migration.
153
+ properties:
154
+ conditions:
155
+ description: The latest available observations of the migration's
156
+ current state.
157
+ items:
158
+ description: Describes the state of a migration at a certain point.
159
+ properties:
160
+ lastUpdateTime:
161
+ description: The last time this condition was updated.
162
+ format: date-time
163
+ type: string
164
+ message:
165
+ description: A human readable message indicating details about
166
+ the transition.
167
+ type: string
168
+ reason:
169
+ description: The reason for the condition's last transition.
170
+ type: string
171
+ status:
172
+ description: Status of the condition, one of True, False, Unknown.
173
+ type: string
174
+ type:
175
+ description: Type of the condition.
176
+ type: string
177
+ required:
178
+ - status
179
+ - type
180
+ type: object
181
+ type: array
182
+ type: object
183
+ type: object
184
+ served: true
185
+ storage: true
186
+ subresources:
187
+ status: {}
188
+ ---
189
+ apiVersion: rbac.authorization.k8s.io/v1
190
+ kind: ClusterRole
191
+ metadata:
192
+ name: storage-version-migration-crd-creator
193
+ rules:
194
+ - apiGroups:
195
+ - apiextensions.k8s.io
196
+ resources:
197
+ - customresourcedefinitions
198
+ verbs:
199
+ - create
200
+ - delete
201
+ - get
202
+ ---
203
+ apiVersion: rbac.authorization.k8s.io/v1
204
+ kind: ClusterRole
205
+ metadata:
206
+ name: storage-version-migration-initializer
207
+ rules:
208
+ - apiGroups:
209
+ - migration.k8s.io
210
+ resources:
211
+ - storageversionmigrations
212
+ verbs:
213
+ - create
214
+ ---
215
+ apiVersion: rbac.authorization.k8s.io/v1
216
+ kind: ClusterRole
217
+ metadata:
218
+ name: storage-version-migration-trigger
219
+ rules:
220
+ - apiGroups:
221
+ - migration.k8s.io
222
+ resources:
223
+ - storagestates
224
+ verbs:
225
+ - watch
226
+ - get
227
+ - list
228
+ - delete
229
+ - create
230
+ - update
231
+ - apiGroups:
232
+ - migration.k8s.io
233
+ resources:
234
+ - storageversionmigrations
235
+ verbs:
236
+ - watch
237
+ - get
238
+ - list
239
+ - delete
240
+ - create
241
+ ---
242
+ apiVersion: rbac.authorization.k8s.io/v1
243
+ kind: ClusterRoleBinding
244
+ metadata:
245
+ name: storage-version-migration-crd-creator
246
+ roleRef:
247
+ apiGroup: rbac.authorization.k8s.io
248
+ kind: ClusterRole
249
+ name: storage-version-migration-crd-creator
250
+ subjects:
251
+ - kind: ServiceAccount
252
+ name: default
253
+ namespace: kube-system
254
+ ---
255
+ apiVersion: rbac.authorization.k8s.io/v1
256
+ kind: ClusterRoleBinding
257
+ metadata:
258
+ name: storage-version-migration-initializer
259
+ roleRef:
260
+ apiGroup: rbac.authorization.k8s.io
261
+ kind: ClusterRole
262
+ name: storage-version-migration-initializer
263
+ subjects:
264
+ - kind: ServiceAccount
265
+ name: default
266
+ namespace: kube-system
267
+ ---
268
+ apiVersion: rbac.authorization.k8s.io/v1
269
+ kind: ClusterRoleBinding
270
+ metadata:
271
+ name: storage-version-migration-migrator
272
+ roleRef:
273
+ apiGroup: rbac.authorization.k8s.io
274
+ kind: ClusterRole
275
+ name: cluster-admin
276
+ subjects:
277
+ - kind: ServiceAccount
278
+ name: default
279
+ namespace: kube-system
280
+ ---
281
+ apiVersion: rbac.authorization.k8s.io/v1
282
+ kind: ClusterRoleBinding
283
+ metadata:
284
+ name: storage-version-migration-trigger
285
+ roleRef:
286
+ apiGroup: rbac.authorization.k8s.io
287
+ kind: ClusterRole
288
+ name: storage-version-migration-trigger
289
+ subjects:
290
+ - kind: ServiceAccount
291
+ name: default
292
+ namespace: kube-system
293
+ ---
294
+ apiVersion: apps/v1
295
+ kind: Deployment
296
+ metadata:
297
+ labels:
298
+ app: migrator
299
+ name: migrator
300
+ namespace: kube-system
301
+ spec:
302
+ replicas: 1
303
+ selector:
304
+ matchLabels:
305
+ app: migrator
306
+ template:
307
+ metadata:
308
+ labels:
309
+ app: migrator
310
+ spec:
311
+ containers:
312
+ - command:
313
+ - /migrator
314
+ - --v=2
315
+ - --alsologtostderr
316
+ - --kube-api-qps=40
317
+ - --kube-api-burst=1000
318
+ image: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-migrator:v0.0.3
319
+ livenessProbe:
320
+ httpGet:
321
+ path: /healthz
322
+ port: 2112
323
+ scheme: HTTP
324
+ initialDelaySeconds: 10
325
+ timeoutSeconds: 60
326
+ name: migrator
327
+ ---
328
+ apiVersion: apps/v1
329
+ kind: Deployment
330
+ metadata:
331
+ labels:
332
+ app: trigger
333
+ name: trigger
334
+ namespace: kube-system
335
+ spec:
336
+ replicas: 1
337
+ selector:
338
+ matchLabels:
339
+ app: trigger
340
+ template:
341
+ metadata:
342
+ labels:
343
+ app: trigger
344
+ spec:
345
+ containers:
346
+ - image: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-trigger:v0.0.3
347
+ livenessProbe:
348
+ httpGet:
349
+ path: /healthz
350
+ port: 2113
351
+ scheme: HTTP
352
+ initialDelaySeconds: 10
353
+ timeoutSeconds: 60
354
+ name: trigger