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

fix(kube_pod_tolerations): deduplicate tolerations before creating metric #2559

Merged
merged 2 commits into from
Jan 20, 2025

Conversation

RiRa12621
Copy link
Contributor

What this PR does / why we need it:
duplicate metrics currently create warnings in the logs of prometheus. Tolerations can be duplicated and kube-api doesn't want to change that behavior, hence we have to deduplicate here

How does this change affect the cardinality of KSM: (increases, decreases or does not change cardinality)
does not change cardinality

Which issue(s) this PR fixes
Fixes #2390

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

This issue is currently awaiting triage.

If kube-state-metrics contributors determine 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-sigs/prow repository.

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

Welcome @RiRa12621!

It looks like this is your first PR to kubernetes/kube-state-metrics 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes/kube-state-metrics has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Nov 21, 2024
@RiRa12621
Copy link
Contributor Author

/assign @dgrisonnet

@mrueg
Copy link
Member

mrueg commented Nov 25, 2024

The solution looks good to me.
Any thoughts on using slices.Sort + slices.Compact similar to #2502 ? This might be simpler than building a separate function for it.

@CatherineF-dev
Copy link
Contributor

The solution looks good to me. Any thoughts on using slices.Sort + slices.Compact similar to #2502 ? This might be simpler than building a separate function for it.

+1

@RiRa12621
Copy link
Contributor Author

Sure, I'll get that changed tomorrow

@rgarcia89
Copy link

@RiRa12621 are you still working on that PR?

@RiRa12621
Copy link
Contributor Author

Planning to, was just overly busy at day job

@remram44
Copy link

remram44 commented Jan 6, 2025

The solution looks good to me. Any thoughts on using slices.Sort + slices.Compact similar to #2502 ? This might be simpler than building a separate function for it.

I don't know if it's easier. To use slices.Sort rather than a map, you need Ordered not just Comparable, and v1.Toleration is not Ordered. So you would need to provide a comparison function which would be quite long (you need to sort by key+operator+value+effect).

func compareTolerations(a, b v1.Toleration) int {
	return cmp.Or(
		strings.Compare(a.Key, b.Key),
		strings.Compare(string(a.Operator), string(b.Operator)),
		strings.Compare(a.Value, b.Value),
		strings.Compare(string(a.Effect), string(b.Effect)),
	)
}

// ...

var uniqueTolerations []v1.Toleration
uniqueTolerations = append(uniqueTolerations, p.Spec.Tolerations...)
slices.SortFunc(uniqueTolerations, compareTolerations)
uniqueTolerations = slices.CompactFunc(uniqueTolerations, func(a, b v1.Toleration) bool {
	return compareTolerations(a, b) == 0
})

@mrueg
Copy link
Member

mrueg commented Jan 20, 2025

Good point, I think this is good to go then.

Thanks for your contribution @RiRa12621

/lgtm

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

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: mrueg, RiRa12621

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 Jan 20, 2025
@k8s-ci-robot k8s-ci-robot merged commit 288b3cf into kubernetes:main Jan 20, 2025
12 checks passed
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. 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-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. size/S Denotes a PR that changes 10-29 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Duplicate tolerations causing issue with prometheus >= 2.52.0
7 participants