Merge pull request #1192 from zhxcai/fix-bulk-watch
Automatic merge from submit-queue. update bulk_watch.md many misspelled words update bulk_watch.md many misspelled words
This commit is contained in:
commit
1011618aca
|
|
@ -11,7 +11,7 @@ discussions see https://github.com/kubernetes/kubernetes/issues/40476.
|
||||||
of the system, by significantly reducing amount of api calls coming from
|
of the system, by significantly reducing amount of api calls coming from
|
||||||
kubelets. As of now, to avoid situation that kubelet is watching all secrets/
|
kubelets. As of now, to avoid situation that kubelet is watching all secrets/
|
||||||
configmaps/... in the system, it is not using watch for this purpose. Instead of
|
configmaps/... in the system, it is not using watch for this purpose. Instead of
|
||||||
that, it is retrieving indidual objects, by sending individual GET requests.
|
that, it is retrieving individual objects, by sending individual GET requests.
|
||||||
However, to enable automatic updates of mounted secrets/configmaps/..., Kubelet
|
However, to enable automatic updates of mounted secrets/configmaps/..., Kubelet
|
||||||
is sending those GET requests periodically. In large clusters, this is
|
is sending those GET requests periodically. In large clusters, this is
|
||||||
generating huge unnecessary load, as this load in principle should be
|
generating huge unnecessary load, as this load in principle should be
|
||||||
|
|
@ -64,7 +64,7 @@ API (by lists I mean e.g. `PodList` object)
|
||||||
- the API has to be implemented also in aggregator so that bulk operations
|
- the API has to be implemented also in aggregator so that bulk operations
|
||||||
are supported also if different resource types are served by different
|
are supported also if different resource types are served by different
|
||||||
apiservers
|
apiservers
|
||||||
- clients has to be able to alter their watch subscribtions incrementally (it
|
- clients has to be able to alter their watch subscriptions incrementally (it
|
||||||
may not be implemented in the initial version though, but has to be designed)
|
may not be implemented in the initial version though, but has to be designed)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -76,7 +76,7 @@ call). Spanning multiple resources, resource types or conditions will be more
|
||||||
and more important for large number of watches. As an example, federation will
|
and more important for large number of watches. As an example, federation will
|
||||||
be adding watches for every type it federates. With that in mind, bypassing
|
be adding watches for every type it federates. With that in mind, bypassing
|
||||||
aggregation at the resource type level and going to aggregation over objects
|
aggregation at the resource type level and going to aggregation over objects
|
||||||
with different resource types will allow us to more aggresively optimize in the
|
with different resource types will allow us to more aggressively optimize in the
|
||||||
future (it doesn't mean you have to watch resources of different types in a
|
future (it doesn't mean you have to watch resources of different types in a
|
||||||
single watch, but we would like to make it possible).
|
single watch, but we would like to make it possible).
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ handling LIST requests, where first client sends a filter definition over the
|
||||||
channel and then server sends back the response, but we dropped this for now.*
|
channel and then server sends back the response, but we dropped this for now.*
|
||||||
|
|
||||||
*Note: We aso considered implementing the POST-based watch handler that doesn't
|
*Note: We aso considered implementing the POST-based watch handler that doesn't
|
||||||
allow for altering subsriptions, which should be very simple once we have list
|
allow for altering subscriptions, which should be very simple once we have list
|
||||||
implemented. But since websocket API is needed anyway, we also dropped it.*
|
implemented. But since websocket API is needed anyway, we also dropped it.*
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -173,7 +173,7 @@ will be described together with dynamic watch description below.
|
||||||
### Dynamic watch
|
### Dynamic watch
|
||||||
|
|
||||||
As mentioned in the Proposal section, we will implement bulk watch that will
|
As mentioned in the Proposal section, we will implement bulk watch that will
|
||||||
allow for dynamic subscribtion/unsubscribtion for (sets of) objects on top of
|
allow for dynamic subscription/unsubscription for (sets of) objects on top of
|
||||||
websockets protocol.
|
websockets protocol.
|
||||||
|
|
||||||
Note that we already support websockets in the regular Kubernetes API for
|
Note that we already support websockets in the regular Kubernetes API for
|
||||||
|
|
@ -232,7 +232,7 @@ type Response struct {
|
||||||
With the above structure we can guarantee that we only send and receive
|
With the above structure we can guarantee that we only send and receive
|
||||||
objects of a single type over the channel.
|
objects of a single type over the channel.
|
||||||
|
|
||||||
We should also introduce some way of correleting responses with requests
|
We should also introduce some way of correlating responses with requests
|
||||||
when a client is sending multiple of them at the same time. To achieve this
|
when a client is sending multiple of them at the same time. To achieve this
|
||||||
we will add a `request identified` field to the `Request` that user can set
|
we will add a `request identified` field to the `Request` that user can set
|
||||||
and that will then be returned as part of `Response`. With this mechanism
|
and that will then be returned as part of `Response`. With this mechanism
|
||||||
|
|
@ -288,7 +288,7 @@ frameworks like reflector) that rely on two crucial watch invariants:
|
||||||
1. there is at most one watch event delivered for any resource version
|
1. there is at most one watch event delivered for any resource version
|
||||||
|
|
||||||
However, we have no guarantee that resource version series is shared between
|
However, we have no guarantee that resource version series is shared between
|
||||||
diferent resource types (in fact in default GCE setup events are not sharing
|
different resource types (in fact in default GCE setup events are not sharing
|
||||||
the same series as they are stored in a separate etcd instance). That said,
|
the same series as they are stored in a separate etcd instance). That said,
|
||||||
to avoid introducing too many assumptions (that already aren't really met)
|
to avoid introducing too many assumptions (that already aren't really met)
|
||||||
we can't guarantee exactly the same.
|
we can't guarantee exactly the same.
|
||||||
|
|
@ -359,7 +359,7 @@ single response to the user.
|
||||||
|
|
||||||
The only non-trivial operation above is sending the request for a single
|
The only non-trivial operation above is sending the request for a single
|
||||||
resource type down the stack. In order to implement it, we will need to
|
resource type down the stack. In order to implement it, we will need to
|
||||||
slighly modify the interface of "Registry" in apiserver. The modification
|
slightly modify the interface of "Registry" in apiserver. The modification
|
||||||
will have to allow passing both what we are passing now and BulkListOptions
|
will have to allow passing both what we are passing now and BulkListOptions
|
||||||
(in some format) (this may e.g. changing signature to accept BulkListOptions
|
(in some format) (this may e.g. changing signature to accept BulkListOptions
|
||||||
and translating ListOptions to BulkListOptions in the current code).
|
and translating ListOptions to BulkListOptions in the current code).
|
||||||
|
|
@ -433,7 +433,7 @@ do it in deterministic way. The crucial requirements are:
|
||||||
1. Whenever "list" request returns a list of objects and a resource version "rv",
|
1. Whenever "list" request returns a list of objects and a resource version "rv",
|
||||||
starting a watch from the returned "rv" will never drop any events.
|
starting a watch from the returned "rv" will never drop any events.
|
||||||
2. For a given watch request (with resource version "rv"), the returned stream
|
2. For a given watch request (with resource version "rv"), the returned stream
|
||||||
of events is always the same (e.g. very slow laggin watch may not cause dropped
|
of events is always the same (e.g. very slow lagging watch may not cause dropped
|
||||||
events).
|
events).
|
||||||
|
|
||||||
We can't really satisfy these conditions using the existing machinery. To solve
|
We can't really satisfy these conditions using the existing machinery. To solve
|
||||||
|
|
@ -468,7 +468,7 @@ no matter if we implement it or not)
|
||||||
there are few selectors selecting the same object, in dynamic approach it will
|
there are few selectors selecting the same object, in dynamic approach it will
|
||||||
be send multiple times, once over each channel, here it would be send once)
|
be send multiple times, once over each channel, here it would be send once)
|
||||||
- we would have to introduce a dedicate "BulkWatchEvent" type to incorporate
|
- we would have to introduce a dedicate "BulkWatchEvent" type to incorporate
|
||||||
resource type. This would make those two incompatible even at the ouput format.
|
resource type. This would make those two incompatible even at the output format.
|
||||||
|
|
||||||
With all of those in mind, even though the implementation would be much much
|
With all of those in mind, even though the implementation would be much much
|
||||||
simpler (and could potentially be a first step and would probably solve the
|
simpler (and could potentially be a first step and would probably solve the
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue