forked from gardener/gardener
/
types.go
321 lines (290 loc) · 14.9 KB
/
types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package v1alpha1
import (
// TODO: Should be k8s.io/component-base/config/v1alpha1 in the future.
apimachineryconfigv1alpha1 "k8s.io/apimachinery/pkg/apis/config/v1alpha1" // TODO: Should be k8s.io/component-base/config/v1alpha1 in the future.
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
apiserverconfigv1alpha1 "k8s.io/apiserver/pkg/apis/config/v1alpha1"
"k8s.io/klog"
"time"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// ControllerManagerConfiguration defines the configuration for the Gardener controller manager.
type ControllerManagerConfiguration struct {
metav1.TypeMeta `json:",inline"`
// ClientConnection specifies the kubeconfig file and client connection
// settings for the proxy server to use when communicating with the apiserver.
ClientConnection apimachineryconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"`
// Controllers defines the configuration of the controllers.
Controllers ControllerManagerControllerConfiguration `json:"controllers"`
// LeaderElection defines the configuration of leader election client.
LeaderElection LeaderElectionConfiguration `json:"leaderElection"`
// Discovery defines the configuration of the discovery client.
Discovery DiscoveryConfiguration `json:"discovery"`
// LogLevel is the level/severity for the logs. Must be one of [info,debug,error].
LogLevel string `json:"logLevel"`
// KubernetesLogLevel is the log level used for Kubernetes' k8s.io/klog functions.
KubernetesLogLevel klog.Level `json:"kubernetesLogLevel"`
// Server defines the configuration of the HTTP server.
Server ServerConfiguration `json:"server"`
// ShootBackup contains configuration settings for the etcd backups.
// +optional
ShootBackup *ShootBackup `json:"shootBackup,omitempty"`
// FeatureGates is a map of feature names to bools that enable or disable alpha/experimental
// features. This field modifies piecemeal the built-in default values from
// "github.com/gardener/gardener/pkg/features/gardener_features.go".
// Default: nil
// +optional
FeatureGates map[string]bool `json:"featureGates,omitempty"`
}
// ControllerManagerControllerConfiguration defines the configuration of the controllers.
type ControllerManagerControllerConfiguration struct {
// BackupInfrastructure defines the configuration of the BackupInfrastructure controller.
BackupInfrastructure BackupInfrastructureControllerConfiguration `json:"backupInfrastructure"`
// CloudProfile defines the configuration of the CloudProfile controller.
// +optional
CloudProfile *CloudProfileControllerConfiguration `json:"cloudProfile,omitempty"`
// ControllerRegistration defines the configuration of the ControllerRegistration controller.
// +optional
ControllerRegistration *ControllerRegistrationControllerConfiguration `json:"controllerRegistration,omitempty"`
// ControllerInstallation defines the configuration of the ControllerInstallation controller.
// +optional
ControllerInstallation *ControllerInstallationControllerConfiguration `json:"controllerInstallation,omitempty"`
// SecretBinding defines the configuration of the SecretBinding controller.
// +optional
SecretBinding *SecretBindingControllerConfiguration `json:"secretBinding,omitempty"`
// Project defines the configuration of the Project controller.
// +optional
Project *ProjectControllerConfiguration `json:"project,omitempty"`
// Quota defines the configuration of the Quota controller.
// +optional
Quota *QuotaControllerConfiguration `json:"quota,omitempty"`
// Seed defines the configuration of the Seed controller.
// +optional
Seed *SeedControllerConfiguration `json:"seed,omitempty"`
// Shoot defines the configuration of the Shoot controller.
Shoot ShootControllerConfiguration `json:"shoot"`
// ShootCare defines the configuration of the ShootCare controller.
ShootCare ShootCareControllerConfiguration `json:"shootCare"`
// ShootMaintenance defines the configuration of the ShootMaintenance controller.
ShootMaintenance ShootMaintenanceControllerConfiguration `json:"shootMaintenance"`
// ShootQuota defines the configuration of the ShootQuota controller.
ShootQuota ShootQuotaControllerConfiguration `json:"shootQuota"`
// ShootHibernation defines the configuration of the ShootHibernation controller.
ShootHibernation ShootHibernationControllerConfiguration `json:"shootHibernation"`
}
// CloudProfileControllerConfiguration defines the configuration of the CloudProfile
// controller.
type CloudProfileControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// ControllerRegistrationControllerConfiguration defines the configuration of the
// ControllerRegistration controller.
type ControllerRegistrationControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// ControllerInstallationControllerConfiguration defines the configuration of the
// ControllerInstallation controller.
type ControllerInstallationControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// SecretBindingControllerConfiguration defines the configuration of the
// SecretBinding controller.
type SecretBindingControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// ProjectControllerConfiguration defines the configuration of the
// Project controller.
type ProjectControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// QuotaControllerConfiguration defines the configuration of the Quota controller.
type QuotaControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// SeedControllerConfiguration defines the configuration of the Seed controller.
type SeedControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
// ReserveExcessCapacity indicates whether the Seed controller should reserve
// excess capacity for Shoot control planes in the Seeds. This is done via
// PodPriority and requires the Seed cluster to have Kubernetes version 1.11 or
// the PodPriority feature gate as well as the scheduling.k8s.io/v1alpha1 API
// group enabled. It defaults to true.
// +optional
ReserveExcessCapacity *bool `json:"reserveExcessCapacity,omitempty"`
// SyncPeriod is the duration how often the existing resources are reconciled.
SyncPeriod metav1.Duration `json:"syncPeriod"`
}
// ShootControllerConfiguration defines the configuration of the Shoot
// controller.
type ShootControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
// RespectSyncPeriodOverwrite determines whether a sync period overwrite of a
// Shoot (via annotation) is respected or not. Defaults to false.
// +optional
RespectSyncPeriodOverwrite *bool `json:"respectSyncPeriodOverwrite,omitempty"`
// RetryDuration is the maximum duration how often a reconciliation will be retried
// in case of errors.
RetryDuration metav1.Duration `json:"retryDuration"`
// RetrySyncPeriod is the duration how fast Shoots with an errornous operation are
// re-added to the queue so that the operation can be retried. Defaults to 15s.
// +optional
RetrySyncPeriod *metav1.Duration `json:"retrySyncPeriod,omitempty"`
// SyncPeriod is the duration how often the existing resources are reconciled.
SyncPeriod metav1.Duration `json:"syncPeriod"`
}
// ShootCareControllerConfiguration defines the configuration of the ShootCare
// controller.
type ShootCareControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
// SyncPeriod is the duration how often the existing resources are reconciled (how
// often the health check of Shoot clusters is performed (only if no operation is
// already running on them).
SyncPeriod metav1.Duration `json:"syncPeriod"`
// ConditionThresholds defines the condition threshold per condition type.
// +optional
ConditionThresholds []ConditionThreshold `json:"conditionThresholds,omitempty"`
}
// ConditionThreshold defines the duration how long a flappy condition stays in progressing state.
type ConditionThreshold struct {
// Type is the type of the condition to define the threshold for.
Type string `json:"type"`
// Duration is the duration how long the condition can stay in the progressing state.
Duration metav1.Duration `json:"duration"`
}
// ShootMaintenanceControllerConfiguration defines the configuration of the
// ShootMaintenance controller.
type ShootMaintenanceControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// ShootQuotaControllerConfiguration defines the configuration of the
// ShootQuota controller.
type ShootQuotaControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
// SyncPeriod is the duration how often the existing resources are reconciled
// (how often Shoots referenced Quota is checked).
SyncPeriod metav1.Duration `json:"syncPeriod"`
}
// ShootHibernationControllerConfiguration defines the configuration of the
// ShootHibernation controller.
type ShootHibernationControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on
// events.
ConcurrentSyncs int `json:"concurrentSyncs"`
}
// BackupInfrastructureControllerConfiguration defines the configuration of the BackupInfrastructure
// controller.
type BackupInfrastructureControllerConfiguration struct {
// ConcurrentSyncs is the number of workers used for the controller to work on events.
ConcurrentSyncs int `json:"concurrentSyncs"`
// SyncPeriod is the duration how often the existing resources are reconciled.
SyncPeriod metav1.Duration `json:"syncPeriod"`
// DeletionGracePeriodDays holds the period in number of days to delete the Backup Infrastructure after deletion timestamp is set.
// If value is set to 0 then the BackupInfrastructureController will trigger deletion immediately..
// +optional
DeletionGracePeriodDays *int `json:"deletionGracePeriodDays,omitempty"`
}
// DiscoveryConfiguration defines the configuration of how to discover API groups.
// It allows to set where to store caching data and to specify the TTL of that data.
type DiscoveryConfiguration struct {
// DiscoveryCacheDir is the directory to store discovery cache information.
// If unset, the discovery client will use the current working directory.
// +optional
DiscoveryCacheDir *string `json:"discoveryCacheDir,omitempty"`
// HTTPCacheDir is the directory to store discovery HTTP cache information.
// If unset, no HTTP caching will be done.
// +optional
HTTPCacheDir *string `json:"httpCacheDir,omitempty"`
// TTL is the ttl how long discovery cache information shall be valid.
// +optional
TTL *metav1.Duration `json:"ttl,omitempty"`
}
// LeaderElectionConfiguration defines the configuration of leader election
// clients for components that can run with leader election enabled.
type LeaderElectionConfiguration struct {
apiserverconfigv1alpha1.LeaderElectionConfiguration `json:",inline"`
// LockObjectNamespace defines the namespace of the lock object.
LockObjectNamespace string `json:"lockObjectNamespace"`
// LockObjectName defines the lock object name.
LockObjectName string `json:"lockObjectName"`
}
// ServerConfiguration contains details for the HTTP(S) servers.
type ServerConfiguration struct {
// HTTP is the configuration for the HTTP server.
HTTP Server `json:"http"`
// HTTPS is the configuration for the HTTPS server.
HTTPS HTTPSServer `json:"https"`
}
// Server contains information for HTTP(S) server configuration.
type Server struct {
// BindAddress is the IP address on which to listen for the specified port.
BindAddress string `json:"bindAddress"`
// Port is the port on which to serve unsecured, unauthenticated access.
Port int `json:"port"`
}
// HTTPSServer is the configuration for the HTTPSServer server.
type HTTPSServer struct {
// Server is the configuration for the bind address and the port.
Server `json:",inline"`
// TLSServer contains information about the TLS configuration for a HTTPS server.
TLS TLSServer `json:"tls"`
}
// TLSServer contains information about the TLS configuration for a HTTPS server.
type TLSServer struct {
// ServerCertPath is the path to the server certificate file.
ServerCertPath string `json:"serverCertPath"`
// ServerKeyPath is the path to the private key file.
ServerKeyPath string `json:"serverKeyPath"`
}
// ShootBackup holds information about backup settings.
type ShootBackup struct {
// Schedule defines the cron schedule according to which a backup is taken from etcd.
Schedule string `json:"schedule"`
}
const (
// ControllerManagerDefaultLockObjectNamespace is the default lock namespace for leader election.
ControllerManagerDefaultLockObjectNamespace = "garden"
// ControllerManagerDefaultLockObjectName is the default lock name for leader election.
ControllerManagerDefaultLockObjectName = "gardener-controller-manager-leader-election"
// DefaultBackupInfrastructureDeletionGracePeriodDays is a constant for the default number of days the Backup Infrastructure should be kept after shoot is deleted.
// By default we set this to 0 so that then BackupInfrastructureController will trigger deletion immediately.
DefaultBackupInfrastructureDeletionGracePeriodDays = 0
// DefaultETCDBackupSchedule is a constant for the default schedule to take backups of a Shoot cluster (daily).
DefaultETCDBackupSchedule = "0 */24 * * *"
// DefaultDiscoveryTTL is the default ttl for the cached discovery client.
DefaultDiscoveryTTL = 10 * time.Second
)