Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove force sync for non-external backends #7958

Merged
merged 1 commit into from
Dec 23, 2021

Conversation

ZxYuan
Copy link
Contributor

@ZxYuan ZxYuan commented Nov 22, 2021

In PR #5726 and #5418, dynamic LB sync was applied to prevent syncing per second for non-external backends. However, a strategy of force syncing non-external backends per 30s was also added. Practically, the additional strategy is unnecessary but leads to waste of CPUs when number of ingresses/services is large.

What this PR does / why we need it:

This PR remove force sync for non-external backends.
The figures below show how much impact current LB has on CPU usage (%) with/without FORCE sync (No input traffic into nginx). Without FORCE sync, CPU usage per nginx worker keeps <1%.
CPU model name: Intel(R) Xeon(R) Silver 4208 CPU @ 2.10GHz
image

1000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 13 49
2000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 14 15
3000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 14 49
4000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 16 03
5000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 33 32
6000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午3 56 25
7000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午4 19 01
8000 services&ingresses with FORCE sync
屏幕快照 2021-11-23 上午5 23 50
8000 services&ingresses without FORCE sync
屏幕快照 2021-11-23 上午5 27 26

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation only

Which issue/s this PR fixes

How Has This Been Tested?

Create a nginx deployment on port 80 with label app: nginx.
Save the following yaml as press.yaml.tmpl.

kind: Service
apiVersion: v1
metadata:
  name: service-press-HAHA
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-press-HAHA
spec:
  rules:
  - http:
      paths:
      - path: /press/HAHA
        backend:
          serviceName: service-press-HAHA
          servicePort: 80

Run the bash script

for i in {1..7000}
do
    sed s#HAHA#${i}#g press.yaml.tmpl > tmp.yaml
    kubectl apply -f tmp.yaml
done

Checklist:

  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I've read the CONTRIBUTION guide
  • I have added tests to cover my changes.
  • All new and existing tests passed.

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Nov 22, 2021
@k8s-ci-robot
Copy link
Contributor

@ZxYuan: This issue is currently awaiting triage.

If Ingress contributors determines this is a relevant issue, they will accept it by applying the triage/accepted label and provide further guidance.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@k8s-ci-robot k8s-ci-robot added needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. needs-kind Indicates a PR lacks a `kind/foo` label and requires one. labels Nov 22, 2021
@k8s-ci-robot
Copy link
Contributor

Hi @ZxYuan. Thanks for your PR.

I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@k8s-ci-robot k8s-ci-robot added needs-priority needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. labels Nov 22, 2021
@k8s-ci-robot k8s-ci-robot added the area/lua Issues or PRs related to lua code label Nov 22, 2021
@rikatz
Copy link
Contributor

rikatz commented Nov 23, 2021

/ok-to-test
/cc @tao12345666333 @moonming @ElvinEfendi

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Nov 23, 2021
@rikatz rikatz removed the request for review from cmluciano November 23, 2021 22:18
@rikatz
Copy link
Contributor

rikatz commented Nov 23, 2021

/assign @tao12345666333

@rikatz
Copy link
Contributor

rikatz commented Dec 23, 2021

/lgtm
/approve
Thanks

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Dec 23, 2021
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: rikatz, ZxYuan

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Dec 23, 2021
@k8s-ci-robot k8s-ci-robot merged commit 362c97b into kubernetes:main Dec 23, 2021
@rikatz rikatz added this to the v1.1.1 milestone Jan 9, 2022
rchshld pushed a commit to joomcode/ingress-nginx that referenced this pull request May 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. area/lua Issues or PRs related to lua code cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. needs-kind Indicates a PR lacks a `kind/foo` label and requires one. needs-priority needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants