Overview
The read-only operator (aka "zxporter") collects Kubernetes resource utilization data and sends it to the DevZero platform.
Read Operator (zxporter)
The Read Operator is a lightweight, read-only Kubernetes operator that collects resource utilization metrics from your cluster and exports them to the DevZero platform via gRPC.
It is open-source on GitHub and designed with the principle of least privilege -- it cannot modify any cluster resources.
What It Collects
The operator collects metadata and utilization data across 65+ Kubernetes resource types:
| Category | Resources |
|---|---|
| Workloads | Deployments, StatefulSets, DaemonSets, ReplicaSets, Jobs, CronJobs, Pods |
| Compute | Nodes, ResourceQuotas, LimitRanges, PriorityClasses, RuntimeClasses |
| Storage | PersistentVolumes, PersistentVolumeClaims, StorageClasses, CSI drivers |
| Networking | Services, Endpoints, Ingresses, NetworkPolicies |
| Configuration | ConfigMaps (metadata only), Namespaces, ServiceAccounts |
| Autoscaling | HorizontalPodAutoscalers, VerticalPodAutoscalers |
| Scheduling | PodDisruptionBudgets, PodTemplates |
| Custom Resources | Karpenter NodePools/NodeClaims/EC2NodeClasses, Argo Rollouts |
| GPU Metrics | NVIDIA DCGM metrics via Prometheus scraping |
Architecture
zxporter Operator (in-cluster)
Kubernetes Informers (65+ types)
- Watch for create/update/delete
- Delta-based (only changes)
|
Collection Manager
- Configurable frequency
- Namespace inclusion/exclusion
- Resource type filtering
|
Prometheus Scraper
- Scrapes cAdvisor, kubelet
- DCGM GPU metrics
- Node Exporter metrics
|
gRPC Transport (mTLS)
- Batched export
- Retry with backoff
- Compression
|
DevZero Control PlaneRBAC
zxporter uses a minimal ClusterRole with read-only access:
get,list,watchon all collected resource types- No
create,update,patch, ordeletepermissions - No access to
secretsresources
The operator's ServiceAccount is scoped to its own namespace (devzero-zxporter).
Resource Footprint
| Resource | Request | Limit |
|---|---|---|
| CPU | 200m | 500m |
| Memory | 128Mi | 512Mi |
The operator adds negligible load to the Kubernetes API server -- it uses informers (watch-based) rather than polling.