-
Notifications
You must be signed in to change notification settings - Fork 6.5k
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
Metallb --lb-class cmd arg to support multiple LoadBalancer implementations #10550
Metallb --lb-class cmd arg to support multiple LoadBalancer implementations #10550
Conversation
Welcome @Seal1998! |
Hi @Seal1998. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the 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. |
/ok-to-test |
@@ -1724,6 +1724,9 @@ spec: | |||
- args: | |||
- --port={{ metallb_port }} | |||
- --log-level={{ metallb_log_level }} | |||
{% if 'loadbalancer_class' in metallb_config.keys() and metallb_config.loadbalancer_class != "" %} | |||
- --lb-class={{ metallb_config.loadbalancer_class }} | |||
{% endif %} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @Seal1998
Is is better to define the loadbalancer_class at the https://github.com/kubernetes-sigs/kubespray/blob/v2.23.0/roles/kubernetes-apps/metallb/defaults/main.yml#L4
instead of the metallb_config
.
The same as the metallb_port
:-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @yankay, thanks for review! I have changed the condition and role defaults accordingly. Unfortunately, to my understanding, we cannot have the --lb-class
flag defined by default, similar to --port
. This is because it would instruct MetalLB to listen for a specific class of LoadBalancer. However, Kubernetes does not have any "default" class to listen for, as per its documentation. The loadBalancerClass is undefined by default on all LoadBalancer services. (https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-class)
By default, .spec.loadBalancerClass is not set and a LoadBalancer type of Service uses the cloud provider's default load balancer implementation if the cluster is configured with a cloud provider using the --cloud-provider component flag.
In my opinion, we should keep --lb-class
undefined until the user specifically sets the metallb_loadbalancer_class
variable to something meaningful. In this way, MetalLB will act as the 'default' LoadBalancer implementation until we specifically set --lb-class
Official metallb helmchart also uses this approach
{{- if .Values.loadBalancerClass }}
- --lb-class={{ .Values.loadBalancerClass }}
{{- end }}
Please review
…class in role defaults
Thanks @ Seal1998 for the PR very much |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your contribution! :D
/lgtm
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: MrFreezeex, Seal1998, yankay 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 |
…ations (kubernetes-sigs#10550) * metallb --lb-class cmd arg to support multiple load balancer implementations * removed loadbalancer_class from metallb_config; metallb_loadbalancer_class in role defaults
What type of PR is this?
/kind feature
What this PR does / why we need it:
In this PR, I tried using the new Metallb feature (effective from version 0.13.2), which is the ability to specify the --lb-class command line argument. This argument instructs MetalLB to listen exclusively for the loadBalancerClass defined in the .spec.loadBalancerClass of the LoadBalancer manifest.
In my scenario, this enhancement is very beneficial as I'm operating a cluster with multiple controllers that have the capability to monitor and manage the LoadBalancer service. Among these controllers are the cloud controller provided by my cloud provider and MetalLB respectively.
With this little change, I have configured MetalLB to strictly monitor a specific type of LoadBalancer, while delegating the management of all other LoadBalancer entities to the cloud controller.
Which issue(s) this PR fixes:
Not related to any particular issue
Special notes for your reviewer:
Thank you for your hard work! Version 2.23.0 is functioning smoothly. I'd really like to be able to specify loadBalancerClass in future releases
Does this PR introduce a user-facing change?: