@@ -19,7 +19,7 @@ use futures_util::Stream;
19
19
use k8s_openapi:: api:: core:: v1:: { Namespace , Node , Pod } ;
20
20
use k8s_paths_provider:: K8sPathsProvider ;
21
21
use kube:: {
22
- api:: { Api , ListParams } ,
22
+ api:: Api ,
23
23
config:: { self , KubeConfigOptions } ,
24
24
runtime:: {
25
25
reflector:: { self } ,
@@ -219,6 +219,9 @@ pub struct Config {
219
219
#[ configurable( metadata( docs:: examples = "/path/to/.kube/config" ) ) ]
220
220
kube_config_file : Option < PathBuf > ,
221
221
222
+ /// Determines if requests to the kube-apiserver can be served by a cache.
223
+ use_apiserver_cache : bool ,
224
+
222
225
/// How long to delay removing metadata entries from the cache when a pod deletion event
223
226
/// event is received from the watch stream.
224
227
///
@@ -271,6 +274,7 @@ impl Default for Config {
271
274
ingestion_timestamp_field : None ,
272
275
timezone : None ,
273
276
kube_config_file : None ,
277
+ use_apiserver_cache : false ,
274
278
delay_deletion_ms : default_delay_deletion_ms ( ) ,
275
279
log_namespace : None ,
276
280
}
@@ -519,6 +523,7 @@ struct Source {
519
523
max_line_bytes : usize ,
520
524
fingerprint_lines : usize ,
521
525
glob_minimum_cooldown : Duration ,
526
+ use_apiserver_cache : bool ,
522
527
ingestion_timestamp_field : Option < OwnedTargetPath > ,
523
528
delay_deletion : Duration ,
524
529
}
@@ -595,6 +600,7 @@ impl Source {
595
600
max_line_bytes : config. max_line_bytes ,
596
601
fingerprint_lines : config. fingerprint_lines ,
597
602
glob_minimum_cooldown,
603
+ use_apiserver_cache : config. use_apiserver_cache ,
598
604
ingestion_timestamp_field,
599
605
delay_deletion,
600
606
} )
@@ -625,6 +631,7 @@ impl Source {
625
631
max_line_bytes,
626
632
fingerprint_lines,
627
633
glob_minimum_cooldown,
634
+ use_apiserver_cache,
628
635
ingestion_timestamp_field,
629
636
delay_deletion,
630
637
} = self ;
@@ -633,11 +640,18 @@ impl Source {
633
640
634
641
let pods = Api :: < Pod > :: all ( client. clone ( ) ) ;
635
642
643
+ let list_semantic = if use_apiserver_cache {
644
+ watcher:: ListSemantic :: Any
645
+ } else {
646
+ watcher:: ListSemantic :: MostRecent
647
+ } ;
648
+
636
649
let pod_watcher = watcher (
637
650
pods,
638
- ListParams {
651
+ watcher :: Config {
639
652
field_selector : Some ( field_selector) ,
640
653
label_selector : Some ( label_selector) ,
654
+ list_semantic : list_semantic. clone ( ) ,
641
655
..Default :: default ( )
642
656
} ,
643
657
)
@@ -658,8 +672,9 @@ impl Source {
658
672
let namespaces = Api :: < Namespace > :: all ( client. clone ( ) ) ;
659
673
let ns_watcher = watcher (
660
674
namespaces,
661
- ListParams {
675
+ watcher :: Config {
662
676
label_selector : Some ( namespace_label_selector) ,
677
+ list_semantic : list_semantic. clone ( ) ,
663
678
..Default :: default ( )
664
679
} ,
665
680
)
@@ -680,8 +695,9 @@ impl Source {
680
695
let nodes = Api :: < Node > :: all ( client) ;
681
696
let node_watcher = watcher (
682
697
nodes,
683
- ListParams {
698
+ watcher :: Config {
684
699
field_selector : Some ( node_selector) ,
700
+ list_semantic,
685
701
..Default :: default ( )
686
702
} ,
687
703
)
0 commit comments