We already have a topology-level health check, which is different.
Kubernetes offers a health check system for pods. It's a contract between the Kubernetes load balancing system and the software running is a Pod - in short, when health check for a Pod fails, the Pod is removed from balancing and the traffic is distributed to other endpoints of a Service that the failing Pod is part of.
It is explained in more detail at #2222.
It doesn't seem like directly exposing the topology healthiness status makes sense as the Kubernetes health check.
I suggest we discuss the possible options here.
In essence, it seems like we don't want to ever remove the Vector Pod from balancing in some use cases (generally speaking - it's always the case in a DaemonSet deployment scenario), but in other cases - like in a Serivce deployment strategy (or, generally, with a Deployment resource) - we might want to remove Vector Pods from balancing because in that use case they probably are acting as a set of processes behind a load balancer.
So, things in question are:
- do we report health status differently depending on the deployment strategy?
- how do we detect/specify which mode of health status reporting to use?
- do we even bother, or just report "healthy" unconditionally and rely on internal protocol-level load balancing?
The decision we make here will likely have implications beyond just k8s, since the health check interface and semantics are pretty much standard at this point. Among others, nginx and HAProxy can use healthiness data if exposed via HTTP interface.
We already have a topology-level health check, which is different.
Kubernetes offers a health check system for pods. It's a contract between the Kubernetes load balancing system and the software running is a
Pod- in short, when health check for aPodfails, thePodis removed from balancing and the traffic is distributed to other endpoints of aServicethat the failingPodis part of.It is explained in more detail at #2222.
It doesn't seem like directly exposing the topology healthiness status makes sense as the Kubernetes health check.
I suggest we discuss the possible options here.
In essence, it seems like we don't want to ever remove the Vector
Podfrom balancing in some use cases (generally speaking - it's always the case in aDaemonSetdeployment scenario), but in other cases - like in a Serivce deployment strategy (or, generally, with aDeploymentresource) - we might want to remove VectorPods from balancing because in that use case they probably are acting as a set of processes behind a load balancer.So, things in question are:
The decision we make here will likely have implications beyond just k8s, since the health check interface and semantics are pretty much standard at this point. Among others, nginx and HAProxy can use healthiness data if exposed via HTTP interface.