Skip to content

Commit fe1e8bd

Browse files
qiczzirain
andauthored
bugfix: ignore some unnecessary requests to apiserver. (#4362)
Signed-off-by: qicz <qiczzhu@gmail.com> Co-authored-by: zirain <zirain2009@gmail.com>
1 parent 13ba6ac commit fe1e8bd

4 files changed

Lines changed: 116 additions & 11 deletions

File tree

internal/infrastructure/kubernetes/infra.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,13 @@ type ResourceRender interface {
3333
Service() (*corev1.Service, error)
3434
ConfigMap() (*corev1.ConfigMap, error)
3535
Deployment() (*appsv1.Deployment, error)
36+
DeploymentSpec() (*egv1a1.KubernetesDeploymentSpec, error)
3637
DaemonSet() (*appsv1.DaemonSet, error)
38+
DaemonSetSpec() (*egv1a1.KubernetesDaemonSetSpec, error)
3739
HorizontalPodAutoscaler() (*autoscalingv2.HorizontalPodAutoscaler, error)
40+
HorizontalPodAutoscalerSpec() (*egv1a1.KubernetesHorizontalPodAutoscalerSpec, error)
3841
PodDisruptionBudget() (*policyv1.PodDisruptionBudget, error)
42+
PodDisruptionBudgetSpec() (*egv1a1.KubernetesPodDisruptionBudgetSpec, error)
3943
}
4044

4145
// Infra manages the creation and deletion of Kubernetes infrastructure

internal/infrastructure/kubernetes/infra_resource.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ func (i *Infra) createOrUpdateConfigMap(ctx context.Context, r ResourceRender) (
9090
// createOrUpdateDeployment creates a Deployment in the kube api server based on the provided
9191
// ResourceRender, if it doesn't exist and updates it if it does.
9292
func (i *Infra) createOrUpdateDeployment(ctx context.Context, r ResourceRender) (err error) {
93+
// If deployment config is nil,ignore Deployment.
94+
if deploymentConfig, er := r.DeploymentSpec(); deploymentConfig == nil {
95+
return er
96+
}
97+
9398
var (
9499
deployment *appsv1.Deployment
95100
startTime = time.Now()
@@ -166,6 +171,11 @@ func (i *Infra) createOrUpdateDeployment(ctx context.Context, r ResourceRender)
166171
// createOrUpdateDaemonSet creates a DaemonSet in the kube api server based on the provided
167172
// ResourceRender, if it doesn't exist and updates it if it does.
168173
func (i *Infra) createOrUpdateDaemonSet(ctx context.Context, r ResourceRender) (err error) {
174+
// If daemonset config is nil, ignore DaemonSet.
175+
if daemonSetConfig, er := r.DaemonSetSpec(); daemonSetConfig == nil {
176+
return er
177+
}
178+
169179
var (
170180
daemonSet *appsv1.DaemonSet
171181
startTime = time.Now()
@@ -248,6 +258,11 @@ func isSelectorMatch(labelselector *metav1.LabelSelector, l map[string]string) (
248258
}
249259

250260
func (i *Infra) createOrUpdatePodDisruptionBudget(ctx context.Context, r ResourceRender) (err error) {
261+
// If podDisruptionBudget config is nil or MinAvailable is nil, ignore PodDisruptionBudget.
262+
if podDisruptionBudget, er := r.PodDisruptionBudgetSpec(); podDisruptionBudget == nil {
263+
return er
264+
}
265+
251266
var (
252267
pdb *policyv1.PodDisruptionBudget
253268
startTime = time.Now()
@@ -285,6 +300,11 @@ func (i *Infra) createOrUpdatePodDisruptionBudget(ctx context.Context, r Resourc
285300
// the provided ResourceRender, if it doesn't exist and updates it if it does,
286301
// and delete hpa if not set.
287302
func (i *Infra) createOrUpdateHPA(ctx context.Context, r ResourceRender) (err error) {
303+
// If hpa config is nil, ignore HorizontalPodAutoscaler.
304+
if hpaConfig, er := r.HorizontalPodAutoscalerSpec(); hpaConfig == nil {
305+
return er
306+
}
307+
288308
var (
289309
hpa *autoscalingv2.HorizontalPodAutoscaler
290310
startTime = time.Now()
@@ -380,6 +400,11 @@ func (i *Infra) deleteServiceAccount(ctx context.Context, r ResourceRender) (err
380400

381401
// deleteDeployment deletes the Envoy Deployment in the kube api server, if it exists.
382402
func (i *Infra) deleteDeployment(ctx context.Context, r ResourceRender) (err error) {
403+
// If deployment config is nil,ignore Deployment.
404+
if deploymentConfig, er := r.DeploymentSpec(); deploymentConfig == nil {
405+
return er
406+
}
407+
383408
var (
384409
name, ns = r.Name(), i.Namespace
385410
deployment = &appsv1.Deployment{
@@ -410,6 +435,11 @@ func (i *Infra) deleteDeployment(ctx context.Context, r ResourceRender) (err err
410435

411436
// deleteDaemonSet deletes the Envoy DaemonSet in the kube api server, if it exists.
412437
func (i *Infra) deleteDaemonSet(ctx context.Context, r ResourceRender) (err error) {
438+
// If daemonset config is nil, ignore DaemonSet.
439+
if daemonSetConfig, er := r.DaemonSetSpec(); daemonSetConfig == nil {
440+
return er
441+
}
442+
413443
var (
414444
name, ns = r.Name(), i.Namespace
415445
daemonSet = &appsv1.DaemonSet{
@@ -500,6 +530,11 @@ func (i *Infra) deleteService(ctx context.Context, r ResourceRender) (err error)
500530

501531
// deleteHpa deletes the Horizontal Pod Autoscaler associated to its renderer, if it exists.
502532
func (i *Infra) deleteHPA(ctx context.Context, r ResourceRender) (err error) {
533+
// If hpa config is nil, ignore HorizontalPodAutoscaler.
534+
if hpaConfig, er := r.HorizontalPodAutoscalerSpec(); hpaConfig == nil {
535+
return er
536+
}
537+
503538
var (
504539
name, ns = r.Name(), i.Namespace
505540
hpa = &autoscalingv2.HorizontalPodAutoscaler{
@@ -530,6 +565,11 @@ func (i *Infra) deleteHPA(ctx context.Context, r ResourceRender) (err error) {
530565

531566
// deletePDB deletes the PodDistribution budget associated to its renderer, if it exists.
532567
func (i *Infra) deletePDB(ctx context.Context, r ResourceRender) (err error) {
568+
// If podDisruptionBudget config is nil or MinAvailable is nil, ignore PodDisruptionBudget.
569+
if podDisruptionBudget, er := r.PodDisruptionBudgetSpec(); podDisruptionBudget == nil {
570+
return er
571+
}
572+
533573
var (
534574
name, ns = r.Name(), i.Namespace
535575
pdb = &policyv1.PodDisruptionBudget{

internal/infrastructure/kubernetes/proxy/resource_provider.go

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,22 +205,30 @@ func (r *ResourceRender) stableSelector() *metav1.LabelSelector {
205205
return resource.GetSelector(envoyLabels(labels))
206206
}
207207

208-
// Deployment returns the expected Deployment based on the provided infra.
209-
func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
208+
// DeploymentSpec returns the `Deployment` sets spec.
209+
func (r *ResourceRender) DeploymentSpec() (*egv1a1.KubernetesDeploymentSpec, error) {
210210
proxyConfig := r.infra.GetProxyConfig()
211211

212212
// Get the EnvoyProxy config to configure the deployment.
213213
provider := proxyConfig.GetEnvoyProxyProvider()
214214
if provider.Type != egv1a1.ProviderTypeKubernetes {
215215
return nil, fmt.Errorf("invalid provider type %v for Kubernetes infra manager", provider.Type)
216216
}
217+
217218
deploymentConfig := provider.GetEnvoyProxyKubeProvider().EnvoyDeployment
218219

219-
// If deployment config is nil, it's not Deployment installation.
220+
return deploymentConfig, nil
221+
}
222+
223+
// Deployment returns the expected Deployment based on the provided infra.
224+
func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
225+
deploymentConfig, er := r.DeploymentSpec()
226+
// If deployment config is nil,ignore Deployment.
220227
if deploymentConfig == nil {
221-
return nil, nil
228+
return nil, er
222229
}
223230

231+
proxyConfig := r.infra.GetProxyConfig()
224232
// Get expected bootstrap configurations rendered ProxyContainers
225233
containers, err := expectedProxyContainers(r.infra, deploymentConfig.Container, proxyConfig.Spec.Shutdown, r.ShutdownManager)
226234
if err != nil {
@@ -286,6 +294,8 @@ func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
286294
deployment.ObjectMeta.Name = r.Name()
287295
}
288296

297+
provider := proxyConfig.GetEnvoyProxyProvider()
298+
289299
// omit the deployment replicas if HPA is being set
290300
if provider.GetEnvoyProxyKubeProvider().EnvoyHpa != nil {
291301
deployment.Spec.Replicas = nil
@@ -299,7 +309,8 @@ func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
299309
return deployment, nil
300310
}
301311

302-
func (r *ResourceRender) DaemonSet() (*appsv1.DaemonSet, error) {
312+
// DaemonSetSpec returns the `DaemonSet` sets spec.
313+
func (r *ResourceRender) DaemonSetSpec() (*egv1a1.KubernetesDaemonSetSpec, error) {
303314
proxyConfig := r.infra.GetProxyConfig()
304315

305316
// Get the EnvoyProxy config to configure the daemonset.
@@ -308,13 +319,18 @@ func (r *ResourceRender) DaemonSet() (*appsv1.DaemonSet, error) {
308319
return nil, fmt.Errorf("invalid provider type %v for Kubernetes infra manager", provider.Type)
309320
}
310321

311-
daemonSetConfig := provider.GetEnvoyProxyKubeProvider().EnvoyDaemonSet
322+
return provider.GetEnvoyProxyKubeProvider().EnvoyDaemonSet, nil
323+
}
312324

313-
// If daemonset config is nil, it's not DaemonSet installation.
325+
func (r *ResourceRender) DaemonSet() (*appsv1.DaemonSet, error) {
326+
daemonSetConfig, err := r.DaemonSetSpec()
327+
// If daemonset config is nil, ignore DaemonSet.
314328
if daemonSetConfig == nil {
315-
return nil, nil
329+
return nil, err
316330
}
317331

332+
proxyConfig := r.infra.GetProxyConfig()
333+
318334
// Get expected bootstrap configurations rendered ProxyContainers
319335
containers, err := expectedProxyContainers(r.infra, daemonSetConfig.Container, proxyConfig.Spec.Shutdown, r.ShutdownManager)
320336
if err != nil {
@@ -369,7 +385,8 @@ func (r *ResourceRender) DaemonSet() (*appsv1.DaemonSet, error) {
369385
return daemonSet, nil
370386
}
371387

372-
func (r *ResourceRender) PodDisruptionBudget() (*policyv1.PodDisruptionBudget, error) {
388+
// PodDisruptionBudgetSpec returns the `PodDisruptionBudget` sets spec.
389+
func (r *ResourceRender) PodDisruptionBudgetSpec() (*egv1a1.KubernetesPodDisruptionBudgetSpec, error) {
373390
provider := r.infra.GetProxyConfig().GetEnvoyProxyProvider()
374391
if provider.Type != egv1a1.ProviderTypeKubernetes {
375392
return nil, fmt.Errorf("invalid provider type %v for Kubernetes infra manager", provider.Type)
@@ -380,6 +397,16 @@ func (r *ResourceRender) PodDisruptionBudget() (*policyv1.PodDisruptionBudget, e
380397
return nil, nil
381398
}
382399

400+
return podDisruptionBudget, nil
401+
}
402+
403+
func (r *ResourceRender) PodDisruptionBudget() (*policyv1.PodDisruptionBudget, error) {
404+
podDisruptionBudget, er := r.PodDisruptionBudgetSpec()
405+
// If podDisruptionBudget config is nil or MinAvailable is nil, ignore PodDisruptionBudget.
406+
if podDisruptionBudget == nil {
407+
return nil, er
408+
}
409+
383410
return &policyv1.PodDisruptionBudget{
384411
ObjectMeta: metav1.ObjectMeta{
385412
Name: r.Name(),
@@ -396,15 +423,22 @@ func (r *ResourceRender) PodDisruptionBudget() (*policyv1.PodDisruptionBudget, e
396423
}, nil
397424
}
398425

399-
func (r *ResourceRender) HorizontalPodAutoscaler() (*autoscalingv2.HorizontalPodAutoscaler, error) {
426+
// HorizontalPodAutoscalerSpec returns the `HorizontalPodAutoscaler` sets spec.
427+
func (r *ResourceRender) HorizontalPodAutoscalerSpec() (*egv1a1.KubernetesHorizontalPodAutoscalerSpec, error) {
400428
provider := r.infra.GetProxyConfig().GetEnvoyProxyProvider()
401429
if provider.Type != egv1a1.ProviderTypeKubernetes {
402430
return nil, fmt.Errorf("invalid provider type %v for Kubernetes infra manager", provider.Type)
403431
}
404432

405433
hpaConfig := provider.GetEnvoyProxyKubeProvider().EnvoyHpa
434+
return hpaConfig, nil
435+
}
436+
437+
func (r *ResourceRender) HorizontalPodAutoscaler() (*autoscalingv2.HorizontalPodAutoscaler, error) {
438+
hpaConfig, err := r.HorizontalPodAutoscalerSpec()
439+
// If hpa config is nil, ignore HorizontalPodAutoscaler.
406440
if hpaConfig == nil {
407-
return nil, nil
441+
return nil, err
408442
}
409443

410444
hpa := &autoscalingv2.HorizontalPodAutoscaler{
@@ -430,6 +464,8 @@ func (r *ResourceRender) HorizontalPodAutoscaler() (*autoscalingv2.HorizontalPod
430464
},
431465
}
432466

467+
provider := r.infra.GetProxyConfig().GetEnvoyProxyProvider()
468+
433469
// set deployment target ref name
434470
deploymentConfig := provider.GetEnvoyProxyKubeProvider().EnvoyDeployment
435471
if deploymentConfig.Name != nil {

internal/infrastructure/kubernetes/ratelimit/resource_provider.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,18 @@ func (r *ResourceRender) ServiceAccount() (*corev1.ServiceAccount, error) {
183183
return sa, nil
184184
}
185185

186+
// DeploymentSpec returns the `Deployment` sets spec.
187+
func (r *ResourceRender) DeploymentSpec() (*egv1a1.KubernetesDeploymentSpec, error) {
188+
return r.rateLimitDeployment, nil
189+
}
190+
186191
// Deployment returns the expected rate limit Deployment based on the provided infra.
187192
func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
193+
// If deployment config is nil,ignore Deployment.
194+
if deploymentConfig, er := r.DeploymentSpec(); deploymentConfig == nil {
195+
return nil, er
196+
}
197+
188198
containers := expectedRateLimitContainers(r.rateLimit, r.rateLimitDeployment, r.Namespace)
189199
labels := rateLimitLabels()
190200
selector := resource.GetSelector(labels)
@@ -270,15 +280,30 @@ func (r *ResourceRender) Deployment() (*appsv1.Deployment, error) {
270280
return deployment, nil
271281
}
272282

283+
// DaemonSetSpec returns the `DaemonSet` sets spec.
284+
func (r *ResourceRender) DaemonSetSpec() (*egv1a1.KubernetesDaemonSetSpec, error) {
285+
return nil, nil
286+
}
287+
273288
// TODO: implement this method
274289
func (r *ResourceRender) DaemonSet() (*appsv1.DaemonSet, error) {
275290
return nil, nil
276291
}
277292

293+
// HorizontalPodAutoscalerSpec returns the `HorizontalPodAutoscaler` sets spec.
294+
func (r *ResourceRender) HorizontalPodAutoscalerSpec() (*egv1a1.KubernetesHorizontalPodAutoscalerSpec, error) {
295+
return nil, nil
296+
}
297+
278298
func (r *ResourceRender) HorizontalPodAutoscaler() (*autoscalingv2.HorizontalPodAutoscaler, error) {
279299
return nil, nil
280300
}
281301

302+
// PodDisruptionBudgetSpec returns the `PodDisruptionBudget` sets spec.
303+
func (r *ResourceRender) PodDisruptionBudgetSpec() (*egv1a1.KubernetesPodDisruptionBudgetSpec, error) {
304+
return nil, nil
305+
}
306+
282307
func (r *ResourceRender) PodDisruptionBudget() (*policyv1.PodDisruptionBudget, error) {
283308
return nil, nil
284309
}

0 commit comments

Comments
 (0)