diff --git a/src/sources/kubernetes_logs/mod.rs b/src/sources/kubernetes_logs/mod.rs index fa0fedb80546a..0b2de0b1e1acc 100644 --- a/src/sources/kubernetes_logs/mod.rs +++ b/src/sources/kubernetes_logs/mod.rs @@ -107,6 +107,13 @@ pub struct Config { ))] extra_namespace_label_selector: String, + /// Specifies whether or not to enrich with namespace fields. + /// + /// This can be useful to make Vector not pull in namespaces to reduce load on + /// kube-apiserver and daemonset memory usage in clusters with lots of namespaces. + /// + add_namespace_fields: bool, + /// The name of the Kubernetes [Node][node] that is running. /// /// Configured to use an environment variable by default, to be evaluated to a value provided by @@ -280,6 +287,7 @@ impl Default for Config { Self { extra_label_selector: "".to_string(), extra_namespace_label_selector: "".to_string(), + add_namespace_fields: true, self_node_name: default_self_node_name_env_template(), extra_field_selector: "".to_string(), auto_partial_merge: true, @@ -544,6 +552,7 @@ struct Source { field_selector: String, label_selector: String, namespace_label_selector: String, + add_namespace_fields: bool, node_selector: String, self_node_name: String, include_paths: Vec, @@ -632,6 +641,7 @@ impl Source { field_selector, label_selector, namespace_label_selector, + add_namespace_fields: config.add_namespace_fields, node_selector, self_node_name, include_paths, @@ -667,6 +677,7 @@ impl Source { field_selector, label_selector, namespace_label_selector, + add_namespace_fields, node_selector, self_node_name, include_paths, @@ -720,27 +731,29 @@ impl Source { // ----------------------------------------------------------------- - let namespaces = Api::::all(client.clone()); - let ns_watcher = watcher( - namespaces, - watcher::Config { - label_selector: Some(namespace_label_selector), - list_semantic: list_semantic.clone(), - page_size: get_page_size(use_apiserver_cache), - ..Default::default() - }, - ) - .backoff(watcher::DefaultBackoff::default()); let ns_store_w = reflector::store::Writer::default(); let ns_state = ns_store_w.as_reader(); - let ns_cacher = MetaCache::new(); - - reflectors.push(tokio::spawn(custom_reflector( - ns_store_w, - ns_cacher, - ns_watcher, - delay_deletion, - ))); + if add_namespace_fields { + let namespaces = Api::::all(client.clone()); + let ns_watcher = watcher( + namespaces, + watcher::Config { + label_selector: Some(namespace_label_selector), + list_semantic: list_semantic.clone(), + page_size: get_page_size(use_apiserver_cache), + ..Default::default() + }, + ) + .backoff(watcher::DefaultBackoff::default()); + let ns_cacher = MetaCache::new(); + + reflectors.push(tokio::spawn(custom_reflector( + ns_store_w, + ns_cacher, + ns_watcher, + delay_deletion, + ))); + } // -----------------------------------------------------------------