datadog / extendeddaemonset Goto Github PK
View Code? Open in Web Editor NEWKubernetes Extended Daemonset controller
License: Apache License 2.0
Kubernetes Extended Daemonset controller
License: Apache License 2.0
Describe the bug
ExtendedDaemonSet has selector field: https://github.com/DataDog/extendeddaemonset/blob/main/api/v1alpha1/extendeddaemonset_types.go#L22 , which states:
// A label query over pods that are managed by the daemon set.
// Must match in order to be controlled.
// If empty, defaulted to labels on Pod template.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
This field is only used to initialize new ers:
https://github.com/DataDog/extendeddaemonset/blob/main/controllers/extendeddaemonset/controller.go#L528
In ers it is used to match with node (not pod) labels:
https://github.com/DataDog/extendeddaemonset/blob/main/controllers/extendeddaemonsetreplicaset/controller.go#L351
Not sure what the difference with specifying nodeSelector in spec.template.spec
It is also get printed in listing as "NODE SELECTOR":
https://github.com/DataDog/extendeddaemonset/blob/main/api/v1alpha1/extendeddaemonsetreplicaset_types.go#L118
Questions:
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Environment (please complete the following information):
Hello!
extendeddaemonset
, or something similar, is a feature we've been wanting for our Kubernetes clusters. I see, however, that there hasn't been much activity on the project in the last year+. Is this project still in use internally at Datadog? Is it looking for new maintainers? What is the status of the 0.9.0 release?
Any information would help us make a more informed decision!
Thank you! This project looks great!
Is your feature request related to a problem? Please describe.
Sometimes some sophisticated automated/manual checks need to be run before validating canary, which are impractical to put in pod health checks.
Describe the solution you'd like
An option disableWaiting
inside ExtendedDaemonSetSpecStrategyCanary
with false
default while, which disables automated validation of canary and DISABLE_WAITING environment variable in controller deployment which can be used to change default behaviour (to avoid the burden of putting disableWaiting inside every eds definition, if you want that all eds by default to be validated in manual mode).
Describe alternatives you've considered
math.MaxInt64
)extendeddaemonset.datadoghq.com/canary-paused
to every edsAdditional context
Hey!
Thanks a lot for sharing the great work and providing us the world's best observability service.
I'm filing this feature request believing this fits nicely within the scope of this project, while filling a big missing-piece in the current K8s ecosystem.
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
I've had a hard time designing and implementing robust and efficient deployments of node-local dns and all kinds of node-based ingress controllers(Nginx, envoy-based ones, etc.).
Basically the design issues distill into the below two points:
externalTrafficPolicy: Local
(ingresses) in order to expose a set of pods per node to the world with a minimum network hop.externalTrafficPolicy: Local
implies that you must have two or more pods "per node" in order to provide high-availabilityDescribe the solution you'd like
A clear and concise description of what you want to happen.
Add replicasPerNode
to ExtendedDaemonSet.
For example, giving it a value of 2 results in an extended daemonset to produce at least 2 pods per node. I say "at least" as it can create one more pod per node in a canary deployment.
Implementation-wise, this would require:
ReplicasPerNode *int
added to the ExtendedDaemonSetSpec
struct and the CRD updated accordinglycleanupReplicaSet
does seem like being designed to support arbitrary number of replicasets.Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
A straightforward way to achieve point 2 is to deploy two or more daemonsets(I've been calling them "a set of daemonsets"). However, updating such set of daemonsets reliably isn't straightforward.
For example, kubectl apply -f set-of-daemonsets.yaml
isn't usually what you want, because it can cause all the concurrent daemonset rolling update can start by bringing down all the daemonsets' pods in a specific node, which bring down the whole service provided by the pods on the node.
A possible solution would be to coordinate rolling-updates of the set of daemonsets. It's basically running kubectl apply -f first.daemonset.yaml
and then kubectl apply -f second.daemonset.yaml
and keep doing this until the last daemonset. With shell scripting, this can be a for
loop. In a GitOps way, it can be a separate commit per daemonset.
The solution above works, but not in an ideal way. The ideal way would be a more declarative one. More concretely, a single kubectl apply
or alike should be enough for a reliable update of a set of daemonsets.
Additional context
Add any other context or screenshots about the feature request here.
I'm eager to submit a pull request for this if this makes sense to be within this project.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.