Skip to content

Commit 94e4b83

Browse files
lzf575rvql
authored andcommitted
feat: supports collecting k8s configmaps
1 parent f18fd24 commit 94e4b83

4 files changed

Lines changed: 68 additions & 93 deletions

File tree

agent/src/platform/kubernetes/resource_watcher.rs

Lines changed: 58 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,10 @@ use flate2::{write::ZlibEncoder, Compression};
3030
use futures::StreamExt;
3131
use k8s_openapi::{
3232
api::{
33-
apps::v1::{
34-
DaemonSet, DaemonSetSpec, Deployment, DeploymentSpec, ReplicaSet, ReplicaSetSpec,
35-
StatefulSet, StatefulSetSpec,
36-
},
33+
apps::v1::{DaemonSet, Deployment, ReplicaSet, ReplicaSetSpec, StatefulSet},
3734
core::v1::{
38-
Container, ContainerStatus, Namespace, Node, NodeSpec, NodeStatus, Pod, PodSpec,
39-
PodStatus, ReplicationController, ReplicationControllerSpec, Service, ServiceSpec,
40-
ServiceStatus,
35+
ConfigMap, Container, ContainerStatus, Namespace, Node, NodeSpec, NodeStatus, Pod,
36+
PodSpec, PodStatus, ReplicationController, Service, ServiceStatus,
4137
},
4238
extensions, networking,
4339
},
@@ -212,6 +208,7 @@ pub enum GenericResourceWatcher {
212208
V1beta1Ingress(ResourceWatcher<networking::v1beta1::Ingress>),
213209
ExtV1beta1Ingress(ResourceWatcher<extensions::v1beta1::Ingress>),
214210
Route(ResourceWatcher<Route>),
211+
ConfigMap(ResourceWatcher<ConfigMap>),
215212

216213
// CRDs
217214
ServiceRule(ResourceWatcher<ServiceRule>),
@@ -278,6 +275,16 @@ impl fmt::Display for Resource {
278275

279276
pub fn default_resources() -> Vec<Resource> {
280277
vec![
278+
Resource {
279+
name: "configmaps",
280+
pb_name: "*v1.ConfigMap",
281+
group_versions: vec![GroupVersion {
282+
group: "core",
283+
version: "v1",
284+
}],
285+
selected_gv: SelectedGv::None,
286+
field_selector: String::new(),
287+
},
281288
Resource {
282289
name: "namespaces",
283290
pb_name: "*v1.Namespace",
@@ -393,6 +400,16 @@ pub fn default_resources() -> Vec<Resource> {
393400

394401
pub fn supported_resources() -> Vec<Resource> {
395402
vec![
403+
Resource {
404+
name: "configmaps",
405+
pb_name: "*v1.ConfigMap",
406+
group_versions: vec![GroupVersion {
407+
group: "core",
408+
version: "v1",
409+
}],
410+
selected_gv: SelectedGv::None,
411+
field_selector: String::new(),
412+
},
396413
Resource {
397414
name: "namespaces",
398415
pb_name: "*v1.Namespace",
@@ -1165,25 +1182,12 @@ impl Trimmable for ReplicaSet {
11651182
}
11661183

11671184
impl Trimmable for ReplicationController {
1168-
fn trim(mut self) -> Self {
1169-
let mut trim_rc = ReplicationController::default();
1170-
trim_rc.metadata = ObjectMeta {
1171-
uid: self.metadata.uid.take(),
1172-
name: self.metadata.name.take(),
1173-
namespace: self.metadata.namespace.take(),
1185+
fn trim(self) -> Self {
1186+
ReplicationController {
1187+
metadata: self.metadata,
1188+
spec: self.spec,
11741189
..Default::default()
1175-
};
1176-
1177-
if let Some(rc_spec) = self.spec.take() {
1178-
trim_rc.spec = Some(ReplicationControllerSpec {
1179-
replicas: rc_spec.replicas,
1180-
selector: rc_spec.selector,
1181-
template: rc_spec.template,
1182-
..Default::default()
1183-
});
11841190
}
1185-
1186-
trim_rc
11871191
}
11881192
}
11891193

@@ -1239,96 +1243,51 @@ impl Trimmable for Route {
12391243
}
12401244
}
12411245

1242-
impl Trimmable for DaemonSet {
1243-
fn trim(mut self) -> Self {
1244-
let mut trim_ds = DaemonSet::default();
1245-
trim_ds.metadata = ObjectMeta {
1246-
uid: self.metadata.uid.take(),
1247-
name: self.metadata.name.take(),
1248-
namespace: self.metadata.namespace.take(),
1249-
labels: self.metadata.labels.take(),
1246+
impl Trimmable for ConfigMap {
1247+
fn trim(self) -> Self {
1248+
ConfigMap {
1249+
data: self.data,
1250+
metadata: self.metadata,
12501251
..Default::default()
1251-
};
1252-
if let Some(ds_spec) = self.spec.take() {
1253-
trim_ds.spec = Some(DaemonSetSpec {
1254-
selector: ds_spec.selector,
1255-
template: ds_spec.template,
1256-
..Default::default()
1257-
})
12581252
}
1253+
}
1254+
}
12591255

1260-
trim_ds
1256+
impl Trimmable for DaemonSet {
1257+
fn trim(self) -> Self {
1258+
DaemonSet {
1259+
metadata: self.metadata,
1260+
spec: self.spec,
1261+
..Default::default()
1262+
}
12611263
}
12621264
}
12631265

12641266
impl Trimmable for StatefulSet {
1265-
fn trim(mut self) -> Self {
1266-
let mut trim_st = StatefulSet::default();
1267-
trim_st.metadata = ObjectMeta {
1268-
uid: self.metadata.uid.take(),
1269-
name: self.metadata.name.take(),
1270-
namespace: self.metadata.namespace.take(),
1271-
labels: self.metadata.labels.take(),
1267+
fn trim(self) -> Self {
1268+
StatefulSet {
1269+
metadata: self.metadata,
1270+
spec: self.spec,
12721271
..Default::default()
1273-
};
1274-
1275-
if let Some(st_spec) = self.spec.take() {
1276-
trim_st.spec = Some(StatefulSetSpec {
1277-
replicas: st_spec.replicas,
1278-
selector: st_spec.selector,
1279-
template: st_spec.template,
1280-
..Default::default()
1281-
})
12821272
}
1283-
trim_st
12841273
}
12851274
}
12861275

12871276
impl Trimmable for Deployment {
1288-
fn trim(mut self) -> Self {
1289-
let mut trim_de = Deployment::default();
1290-
trim_de.metadata = ObjectMeta {
1291-
uid: self.metadata.uid.take(),
1292-
name: self.metadata.name.take(),
1293-
namespace: self.metadata.namespace.take(),
1294-
labels: self.metadata.labels.take(),
1277+
fn trim(self) -> Self {
1278+
Deployment {
1279+
metadata: self.metadata,
1280+
spec: self.spec,
12951281
..Default::default()
1296-
};
1297-
1298-
if let Some(de_spec) = self.spec.take() {
1299-
trim_de.spec = Some(DeploymentSpec {
1300-
replicas: de_spec.replicas,
1301-
selector: de_spec.selector,
1302-
template: de_spec.template,
1303-
..Default::default()
1304-
});
13051282
}
1306-
1307-
trim_de
13081283
}
13091284
}
13101285

13111286
impl Trimmable for Service {
13121287
fn trim(mut self) -> Self {
13131288
let mut trim_svc = Service::default();
1314-
trim_svc.metadata = ObjectMeta {
1315-
uid: self.metadata.uid.take(),
1316-
name: self.metadata.name.take(),
1317-
namespace: self.metadata.namespace.take(),
1318-
annotations: self.metadata.annotations.take(),
1319-
labels: self.metadata.labels.take(),
1320-
..Default::default()
1321-
};
1322-
1323-
if let Some(svc_spec) = self.spec.take() {
1324-
trim_svc.spec = Some(ServiceSpec {
1325-
selector: svc_spec.selector,
1326-
type_: svc_spec.type_,
1327-
cluster_ip: svc_spec.cluster_ip,
1328-
ports: svc_spec.ports,
1329-
..Default::default()
1330-
});
1331-
}
1289+
trim_svc.metadata = self.metadata;
1290+
trim_svc.spec = self.spec;
13321291
if let Some(svc_status) = self.status.take() {
13331292
trim_svc.status = Some(ServiceStatus {
13341293
load_balancer: svc_status.load_balancer,
@@ -1436,6 +1395,12 @@ impl ResourceWatcherFactory {
14361395
) -> Option<GenericResourceWatcher> {
14371396
let namespace = namespace.unwrap_or("");
14381397
let watcher = match resource.name {
1398+
"configmaps" => GenericResourceWatcher::ConfigMap(self.new_namespace_resource(
1399+
resource,
1400+
stats_collector,
1401+
namespace,
1402+
config,
1403+
)),
14391404
// 特定namespace不支持Node/Namespace资源
14401405
"nodes" => GenericResourceWatcher::Node(self.new_cluster_resource(
14411406
resource,

server/agent_config/README-CH.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5012,6 +5012,7 @@ inputs:
50125012
- name: replicasets
50135013
- name: statefulsets
50145014
- name: ingresses
5015+
- name: configmaps
50155016
```
50165017

50175018
**模式**:
@@ -5043,6 +5044,7 @@ inputs:
50435044
- replicasets
50445045
- statefulsets
50455046
- ingresses
5047+
- configmaps
50465048

50475049
禁用某个资源,在列表中添加 `disabled: true` 的条目:
50485050
```yaml
@@ -5118,6 +5120,7 @@ inputs:
51185120
| clonesets | |
51195121
| ippools | |
51205122
| opengaussclusters | |
5123+
| configmaps | |
51215124

51225125
**模式**:
51235126
| Key | Value |

server/agent_config/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5143,6 +5143,7 @@ inputs:
51435143
- name: replicasets
51445144
- name: statefulsets
51455145
- name: ingresses
5146+
- name: configmaps
51465147
```
51475148

51485149
**Schema**:
@@ -5174,6 +5175,7 @@ Agent will watch the following resources by default:
51745175
- replicasets
51755176
- statefulsets
51765177
- ingresses
5178+
- configmaps
51775179

51785180
To disable a resource, add an entry to the list with `disabled: true`:
51795181
```yaml
@@ -5251,6 +5253,7 @@ inputs:
52515253
| clonesets | |
52525254
| ippools | |
52535255
| opengaussclusters | |
5256+
| configmaps | |
52545257

52555258
**Schema**:
52565259
| Key | Value |

server/agent_config/template.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3711,6 +3711,7 @@ inputs:
37113711
# - replicasets
37123712
# - statefulsets
37133713
# - ingresses
3714+
# - configmaps
37143715
#
37153716
# To disable a resource, add an entry to the list with `disabled: true`:
37163717
# ```yaml
@@ -3771,6 +3772,7 @@ inputs:
37713772
# - replicasets
37723773
# - statefulsets
37733774
# - ingresses
3775+
# - configmaps
37743776
#
37753777
# 禁用某个资源,在列表中添加 `disabled: true` 的条目:
37763778
# ```yaml
@@ -3830,6 +3832,7 @@ inputs:
38303832
# - clonesets
38313833
# - ippools
38323834
# - opengaussclusters
3835+
# - configmaps
38333836
# modification: agent_restart
38343837
# ee_feature: false
38353838
# description:
@@ -3919,6 +3922,7 @@ inputs:
39193922
- name: replicasets
39203923
- name: statefulsets
39213924
- name: ingresses
3925+
- name: configmaps
39223926
# type: int
39233927
# name:
39243928
# en: K8s API List Page Size

0 commit comments

Comments
 (0)