mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-09 05:01:46 +00:00
kube-controller-manager: add ResourceClaim controller
The controller uses the exact same logic as the generic ephemeral inline volume controller, just for inline ResourceClaimTemplate -> ResourceClaim. In addition, it supports removal of pods from the ReservedFor field when those pods are known to not need the claim anymore. At the moment, only this special case is supported. Removal of arbitrary objects would imply granting full read access to all types to determine whether a) an object is gone and b) if the current incarnation is the one which is listed in ReservedFor. This may get added later.
This commit is contained in:
@@ -475,6 +475,9 @@ func NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc
|
||||
utilfeature.DefaultFeatureGate.Enabled(genericfeatures.StorageVersionAPI) {
|
||||
register("storage-version-gc", startStorageVersionGCController)
|
||||
}
|
||||
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.DynamicResourceAllocation) {
|
||||
controllers["resource-claim-controller"] = startResourceClaimController
|
||||
}
|
||||
|
||||
return controllers
|
||||
}
|
||||
|
@@ -54,6 +54,7 @@ import (
|
||||
lifecyclecontroller "k8s.io/kubernetes/pkg/controller/nodelifecycle"
|
||||
"k8s.io/kubernetes/pkg/controller/podgc"
|
||||
replicationcontroller "k8s.io/kubernetes/pkg/controller/replication"
|
||||
"k8s.io/kubernetes/pkg/controller/resourceclaim"
|
||||
resourcequotacontroller "k8s.io/kubernetes/pkg/controller/resourcequota"
|
||||
serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount"
|
||||
"k8s.io/kubernetes/pkg/controller/storageversiongc"
|
||||
@@ -357,6 +358,21 @@ func startEphemeralVolumeController(ctx context.Context, controllerContext Contr
|
||||
return nil, true, nil
|
||||
}
|
||||
|
||||
const defaultResourceClaimControllerWorkers = 10
|
||||
|
||||
func startResourceClaimController(ctx context.Context, controllerContext ControllerContext) (controller.Interface, bool, error) {
|
||||
ephemeralController, err := resourceclaim.NewController(
|
||||
controllerContext.ClientBuilder.ClientOrDie("resource-claim-controller"),
|
||||
controllerContext.InformerFactory.Core().V1().Pods(),
|
||||
controllerContext.InformerFactory.Resource().V1alpha1().ResourceClaims(),
|
||||
controllerContext.InformerFactory.Resource().V1alpha1().ResourceClaimTemplates())
|
||||
if err != nil {
|
||||
return nil, true, fmt.Errorf("failed to start ephemeral volume controller: %v", err)
|
||||
}
|
||||
go ephemeralController.Run(ctx, defaultResourceClaimControllerWorkers)
|
||||
return nil, true, nil
|
||||
}
|
||||
|
||||
func startEndpointController(ctx context.Context, controllerCtx ControllerContext) (controller.Interface, bool, error) {
|
||||
go endpointcontroller.NewEndpointController(
|
||||
controllerCtx.InformerFactory.Core().V1().Pods(),
|
||||
|
@@ -33,6 +33,7 @@ import (
|
||||
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/policy/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/rbac/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/resource/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/scheduling/install"
|
||||
_ "k8s.io/kubernetes/pkg/apis/storage/install"
|
||||
)
|
||||
|
Reference in New Issue
Block a user