mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-10-21 14:49:52 +00:00
158 lines
6.1 KiB
Go
158 lines
6.1 KiB
Go
|
/*
|
||
|
Copyright 2020 The Kubernetes Authors.
|
||
|
|
||
|
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 (
|
||
|
"time"
|
||
|
|
||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
|
|
||
|
configv1alpha1 "k8s.io/component-base/config/v1alpha1"
|
||
|
)
|
||
|
|
||
|
// ControllerManagerConfigurationSpec defines the desired state of GenericControllerManagerConfiguration.
|
||
|
type ControllerManagerConfigurationSpec struct {
|
||
|
// SyncPeriod determines the minimum frequency at which watched resources are
|
||
|
// reconciled. A lower period will correct entropy more quickly, but reduce
|
||
|
// responsiveness to change if there are many watched resources. Change this
|
||
|
// value only if you know what you are doing. Defaults to 10 hours if unset.
|
||
|
// there will a 10 percent jitter between the SyncPeriod of all controllers
|
||
|
// so that all controllers will not send list requests simultaneously.
|
||
|
// +optional
|
||
|
SyncPeriod *metav1.Duration `json:"syncPeriod,omitempty"`
|
||
|
|
||
|
// LeaderElection is the LeaderElection config to be used when configuring
|
||
|
// the manager.Manager leader election
|
||
|
// +optional
|
||
|
LeaderElection *configv1alpha1.LeaderElectionConfiguration `json:"leaderElection,omitempty"`
|
||
|
|
||
|
// CacheNamespace if specified restricts the manager's cache to watch objects in
|
||
|
// the desired namespace Defaults to all namespaces
|
||
|
//
|
||
|
// Note: If a namespace is specified, controllers can still Watch for a
|
||
|
// cluster-scoped resource (e.g Node). For namespaced resources the cache
|
||
|
// will only hold objects from the desired namespace.
|
||
|
// +optional
|
||
|
CacheNamespace string `json:"cacheNamespace,omitempty"`
|
||
|
|
||
|
// GracefulShutdownTimeout is the duration given to runnable to stop before the manager actually returns on stop.
|
||
|
// To disable graceful shutdown, set to time.Duration(0)
|
||
|
// To use graceful shutdown without timeout, set to a negative duration, e.G. time.Duration(-1)
|
||
|
// The graceful shutdown is skipped for safety reasons in case the leader election lease is lost.
|
||
|
GracefulShutdownTimeout *metav1.Duration `json:"gracefulShutDown,omitempty"`
|
||
|
|
||
|
// Controller contains global configuration options for controllers
|
||
|
// registered within this manager.
|
||
|
// +optional
|
||
|
Controller *ControllerConfigurationSpec `json:"controller,omitempty"`
|
||
|
|
||
|
// Metrics contains thw controller metrics configuration
|
||
|
// +optional
|
||
|
Metrics ControllerMetrics `json:"metrics,omitempty"`
|
||
|
|
||
|
// Health contains the controller health configuration
|
||
|
// +optional
|
||
|
Health ControllerHealth `json:"health,omitempty"`
|
||
|
|
||
|
// Webhook contains the controllers webhook configuration
|
||
|
// +optional
|
||
|
Webhook ControllerWebhook `json:"webhook,omitempty"`
|
||
|
}
|
||
|
|
||
|
// ControllerConfigurationSpec defines the global configuration for
|
||
|
// controllers registered with the manager.
|
||
|
type ControllerConfigurationSpec struct {
|
||
|
// GroupKindConcurrency is a map from a Kind to the number of concurrent reconciliation
|
||
|
// allowed for that controller.
|
||
|
//
|
||
|
// When a controller is registered within this manager using the builder utilities,
|
||
|
// users have to specify the type the controller reconciles in the For(...) call.
|
||
|
// If the object's kind passed matches one of the keys in this map, the concurrency
|
||
|
// for that controller is set to the number specified.
|
||
|
//
|
||
|
// The key is expected to be consistent in form with GroupKind.String(),
|
||
|
// e.g. ReplicaSet in apps group (regardless of version) would be `ReplicaSet.apps`.
|
||
|
//
|
||
|
// +optional
|
||
|
GroupKindConcurrency map[string]int `json:"groupKindConcurrency,omitempty"`
|
||
|
|
||
|
// CacheSyncTimeout refers to the time limit set to wait for syncing caches.
|
||
|
// Defaults to 2 minutes if not set.
|
||
|
// +optional
|
||
|
CacheSyncTimeout *time.Duration `json:"cacheSyncTimeout,omitempty"`
|
||
|
}
|
||
|
|
||
|
// ControllerMetrics defines the metrics configs.
|
||
|
type ControllerMetrics struct {
|
||
|
// BindAddress is the TCP address that the controller should bind to
|
||
|
// for serving prometheus metrics.
|
||
|
// It can be set to "0" to disable the metrics serving.
|
||
|
// +optional
|
||
|
BindAddress string `json:"bindAddress,omitempty"`
|
||
|
}
|
||
|
|
||
|
// ControllerHealth defines the health configs.
|
||
|
type ControllerHealth struct {
|
||
|
// HealthProbeBindAddress is the TCP address that the controller should bind to
|
||
|
// for serving health probes
|
||
|
// +optional
|
||
|
HealthProbeBindAddress string `json:"healthProbeBindAddress,omitempty"`
|
||
|
|
||
|
// ReadinessEndpointName, defaults to "readyz"
|
||
|
// +optional
|
||
|
ReadinessEndpointName string `json:"readinessEndpointName,omitempty"`
|
||
|
|
||
|
// LivenessEndpointName, defaults to "healthz"
|
||
|
// +optional
|
||
|
LivenessEndpointName string `json:"livenessEndpointName,omitempty"`
|
||
|
}
|
||
|
|
||
|
// ControllerWebhook defines the webhook server for the controller.
|
||
|
type ControllerWebhook struct {
|
||
|
// Port is the port that the webhook server serves at.
|
||
|
// It is used to set webhook.Server.Port.
|
||
|
// +optional
|
||
|
Port *int `json:"port,omitempty"`
|
||
|
|
||
|
// Host is the hostname that the webhook server binds to.
|
||
|
// It is used to set webhook.Server.Host.
|
||
|
// +optional
|
||
|
Host string `json:"host,omitempty"`
|
||
|
|
||
|
// CertDir is the directory that contains the server key and certificate.
|
||
|
// if not set, webhook server would look up the server key and certificate in
|
||
|
// {TempDir}/k8s-webhook-server/serving-certs. The server key and certificate
|
||
|
// must be named tls.key and tls.crt, respectively.
|
||
|
// +optional
|
||
|
CertDir string `json:"certDir,omitempty"`
|
||
|
}
|
||
|
|
||
|
// +kubebuilder:object:root=true
|
||
|
|
||
|
// ControllerManagerConfiguration is the Schema for the GenericControllerManagerConfigurations API.
|
||
|
type ControllerManagerConfiguration struct {
|
||
|
metav1.TypeMeta `json:",inline"`
|
||
|
|
||
|
// ControllerManagerConfiguration returns the contfigurations for controllers
|
||
|
ControllerManagerConfigurationSpec `json:",inline"`
|
||
|
}
|
||
|
|
||
|
// Complete returns the configuration for controller-runtime.
|
||
|
func (c *ControllerManagerConfigurationSpec) Complete() (ControllerManagerConfigurationSpec, error) {
|
||
|
return *c, nil
|
||
|
}
|