github.com/ironcore-dev/gardener-extension-provider-ironcore@v0.3.2-0.20240314231816-8336447fb9a0/pkg/controller/healthcheck/add.go (about) 1 // SPDX-FileCopyrightText: 2022 SAP SE or an SAP affiliate company and IronCore contributors 2 // SPDX-License-Identifier: Apache-2.0 3 4 package healthcheck 5 6 import ( 7 "context" 8 "time" 9 10 healthcheckconfig "github.com/gardener/gardener/extensions/pkg/apis/config" 11 genericcontrolplaneactuator "github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator" 12 "github.com/gardener/gardener/extensions/pkg/controller/healthcheck" 13 "github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general" 14 "github.com/gardener/gardener/extensions/pkg/controller/healthcheck/worker" 15 extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" 16 gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" 17 extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" 18 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 19 "k8s.io/apimachinery/pkg/util/sets" 20 "k8s.io/utils/ptr" 21 "sigs.k8s.io/controller-runtime/pkg/client" 22 "sigs.k8s.io/controller-runtime/pkg/manager" 23 "sigs.k8s.io/controller-runtime/pkg/predicate" 24 25 "github.com/ironcore-dev/gardener-extension-provider-ironcore/pkg/ironcore" 26 ) 27 28 var ( 29 defaultSyncPeriod = time.Second * 30 30 // DefaultAddOptions are the default DefaultAddArgs for AddToManager. 31 DefaultAddOptions = healthcheck.DefaultAddArgs{ 32 HealthCheckConfig: healthcheckconfig.HealthCheckConfig{ 33 SyncPeriod: metav1.Duration{Duration: defaultSyncPeriod}, 34 ShootRESTOptions: &healthcheckconfig.RESTOptions{ 35 QPS: ptr.To[float32](100), 36 Burst: ptr.To[int](130), 37 }, 38 }, 39 } 40 // GardenletManagesMCM specifies whether the machine-controller-manager is managed by gardenlet. 41 GardenletManagesMCM bool 42 ) 43 44 // RegisterHealthChecks registers health checks for each extension resource 45 func RegisterHealthChecks(ctx context.Context, mgr manager.Manager, opts healthcheck.DefaultAddArgs) error { 46 if err := healthcheck.DefaultRegistration(ctx, 47 ironcore.Type, 48 extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.ControlPlaneResource), 49 func() client.ObjectList { return &extensionsv1alpha1.ControlPlaneList{} }, 50 func() extensionsv1alpha1.Object { return &extensionsv1alpha1.ControlPlane{} }, 51 mgr, 52 opts, 53 []predicate.Predicate{extensionspredicate.HasPurpose(extensionsv1alpha1.Normal)}, 54 []healthcheck.ConditionTypeToHealthCheck{ 55 { 56 ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy), 57 HealthCheck: general.NewSeedDeploymentHealthChecker(ironcore.CloudControllerManagerName), 58 }, 59 { 60 ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy), 61 HealthCheck: general.NewSeedDeploymentHealthChecker(ironcore.CSIControllerName), 62 }, 63 { 64 ConditionType: string(gardencorev1beta1.ShootSystemComponentsHealthy), 65 HealthCheck: general.CheckManagedResource(genericcontrolplaneactuator.ControlPlaneShootChartResourceName), 66 }, 67 { 68 ConditionType: string(gardencorev1beta1.ShootSystemComponentsHealthy), 69 HealthCheck: general.CheckManagedResource(genericcontrolplaneactuator.StorageClassesChartResourceName), 70 }, 71 }, 72 sets.New[gardencorev1beta1.ConditionType](gardencorev1beta1.ShootSystemComponentsHealthy), 73 ); err != nil { 74 return err 75 } 76 77 var ( 78 workerHealthChecks = []healthcheck.ConditionTypeToHealthCheck{{ 79 ConditionType: string(gardencorev1beta1.ShootEveryNodeReady), 80 HealthCheck: worker.NewNodesChecker(), 81 }} 82 workerConditionTypesToRemove = sets.New(gardencorev1beta1.ShootControlPlaneHealthy) 83 ) 84 85 if !GardenletManagesMCM { 86 workerHealthChecks = append(workerHealthChecks, healthcheck.ConditionTypeToHealthCheck{ 87 ConditionType: string(gardencorev1beta1.ShootControlPlaneHealthy), 88 HealthCheck: general.NewSeedDeploymentHealthChecker(ironcore.MachineControllerManagerName), 89 }) 90 workerConditionTypesToRemove = workerConditionTypesToRemove.Delete(gardencorev1beta1.ShootControlPlaneHealthy) 91 } 92 93 return healthcheck.DefaultRegistration(ctx, 94 ironcore.Type, 95 extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.WorkerResource), 96 func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} }, 97 func() extensionsv1alpha1.Object { return &extensionsv1alpha1.Worker{} }, 98 mgr, 99 opts, 100 nil, 101 workerHealthChecks, 102 workerConditionTypesToRemove, 103 ) 104 } 105 106 // AddToManager adds a controller with the default Options. 107 func AddToManager(ctx context.Context, mgr manager.Manager) error { 108 return RegisterHealthChecks(ctx, mgr, DefaultAddOptions) 109 }