Skip to main content

Kubernetes Cluster State

Kubernetes Cluster State

Plugin: go.d.plugin Module: k8s_state

Maintained by Netdata

Overview​

This collector monitors Kubernetes Nodes, Pods and Containers.

This collector is supported on all platforms.

This collector only supports collecting metrics from a single instance of this integration.

Kubernetes Cluster State can be monitored further using the following other integrations:

Default Behavior​

Auto-Detection​

This integration doesn't support auto-detection.

Limits​

The default configuration for this integration does not impose any limits on data collection.

Performance Impact​

The default configuration for this integration is not expected to impose a significant performance impact on the system.

Setup​

You can configure the k8s_state collector in two ways:

MethodBest forHow to
UIFast setup without editing filesGo to Nodes → Configure this node → Collectors → Jobs, search for k8s_state, then click + to add a job.
FileIf you prefer configuring via file, or need to automate deployments (e.g., with Ansible)Edit go.d/k8s_state.conf and add a job.
important

UI configuration requires paid Netdata Cloud plan.

Prerequisites​

No action required.

Configuration​

Options​

There are no configuration options.

via UI​

Configure the k8s_state collector from the Netdata web interface:

  1. Go to Nodes.
  2. Select the node where you want the k8s_state data-collection job to run and click the ⚙ (Configure this node). That node will run the data collection.
  3. The Collectors → Jobs view opens by default.
  4. In the Search box, type k8s_state (or scroll the list) to locate the k8s_state collector.
  5. Click the + next to the k8s_state collector to add a new job.
  6. Fill in the job fields, then click Test to verify the configuration and Submit to save.
    • Test runs the job with the provided settings and shows whether data can be collected.
    • If it fails, an error message appears with details (for example, connection refused, timeout, or command execution errors), so you can adjust and retest.

via File​

The configuration file name for this integration is go.d/k8s_state.conf.

The file format is YAML. Generally, the structure is:

update_every: 1
autodetection_retry: 0
jobs:
- name: some_name1
- name: some_name2

You can edit the configuration file using the edit-config script from the Netdata config directory.

cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
sudo ./edit-config go.d/k8s_state.conf
Examples​

There are no configuration examples.

Alerts​

The following alerts are available:

Alert nameOn metricDescription
k8s_state_deployment_condition_available k8s_state.deployment_conditionsDeployment ${label:k8s_deployment_name} does not have the minimum required replicas
k8s_state_cronjob_last_execution_failed k8s_state.cronjob_last_execution_statusCronJob ${label:k8s_cronjob_name} in ${label:k8s_namespace} failing

Metrics​

Metrics grouped by scope.

The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.

Per node​

These metrics refer to the Node.

Labels:

LabelDescription
k8s_cluster_idCluster ID. This is equal to the kube-system namespace UID.
k8s_cluster_nameCluster name. Cluster name discovery only works in GKE.
k8s_node_nameNode name.

Metrics:

MetricDescriptionDimensionsUnit
k8s_state.node_allocatable_cpu_requests_utilizationCPU requests utilizationrequests%
k8s_state.node_allocatable_cpu_requests_usedCPU requests usedrequestsmillicpu
k8s_state.node_allocatable_cpu_limits_utilizationCPU limits utilizationlimits%
k8s_state.node_allocatable_cpu_limits_usedCPU limits usedlimitsmillicpu
k8s_state.node_allocatable_mem_requests_utilizationMemory requests utilizationrequests%
k8s_state.node_allocatable_mem_requests_usedMemory requests usedrequestsbytes
k8s_state.node_allocatable_mem_limits_utilizationMemory limits utilizationlimits%
k8s_state.node_allocatable_mem_limits_usedMemory limits usedlimitsbytes
k8s_state.node_allocatable_pods_utilizationPods resource utilizationallocated%
k8s_state.node_allocatable_pods_usagePods resource usageavailable, allocatedpods
k8s_state.node_conditionCondition statusReady, DiskPressure, MemoryPressure, NetworkUnavailable, PIDPressurestatus
k8s_state.node_schedulabilitySchedulabilityschedulable, unschedulablestate
k8s_state.node_pods_readinessPods readinessready%
k8s_state.node_pods_readiness_statePods readiness stateready, unreadypods
k8s_state.node_pods_conditionPods conditionpod_ready, pod_scheduled, pod_initialized, containers_readypods
k8s_state.node_pods_phasePods phaserunning, failed, succeeded, pendingpods
k8s_state.node_containersContainerscontainers, init_containerscontainers
k8s_state.node_containers_stateContainers staterunning, waiting, terminatedcontainers
k8s_state.node_init_containers_stateInit containers staterunning, waiting, terminatedcontainers
k8s_state.node_ageAgeageseconds

Per deployment​

These metrics refer to Deployments.

Labels:

LabelDescription
k8s_cluster_idCluster ID. This is equal to the kube-system namespace UID.
k8s_cluster_nameCluster name. Cluster name discovery only works in GKE.
k8s_deployment_nameDeployment name.
k8s_namespaceNamespace.

Metrics:

MetricDescriptionDimensionsUnit
k8s_state.deployment_conditionsDeployment Conditionsavailable, replica_failure, progressingstatus
k8s_state.deployment_replicasDeployment Replicasdesired, current, readyreplicas
k8s_state.deployment_ageDeployment Ageageseconds

Per cronjob​

These metrics refer to CronJobs.

Labels:

LabelDescription
k8s_cluster_idCluster ID. This is equal to the kube-system namespace UID.
k8s_cluster_nameCluster name. Cluster name discovery only works in GKE.
k8s_cronjob_nameCronJob name.
k8s_namespaceNamespace.

Metrics:

MetricDescriptionDimensionsUnit
k8s_state.cronjob_jobs_count_by_statusCronJob Jobs Count by Statuscompleted, failed, running, suspendedjobs
k8s_state.cronjob_jobs_failed_by_reasonCronJob Jobs Failed by Reasonpod_failure_policy, backoff_limit_exceeded, deadline_exceededjobs
k8s_state.cronjob_last_execution_statusCronJob Last Execution Statuscompleted, failedstatus
k8s_state.cronjob_last_completion_durationCronJob Last Completion Durationlast_completionseconds
k8s_state.cronjob_last_completed_time_agoCronJob Last Completed Time Agolast_completed_agoseconds
k8s_state.cronjob_last_schedule_time_agoCronJob Last Schedule Time Agolast_schedule_agoseconds
k8s_state.cronjob_suspend_statusCronJob Suspend Statusenabled, suspendedstatus
k8s_state.cronjob_ageCronJob Ageageseconds

Per pod​

These metrics refer to the Pod.

Labels:

LabelDescription
k8s_cluster_idCluster ID. This is equal to the kube-system namespace UID.
k8s_cluster_nameCluster name. Cluster name discovery only works in GKE.
k8s_node_nameNode name.
k8s_namespaceNamespace.
k8s_controller_kindController kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.).
k8s_controller_nameController name.
k8s_pod_namePod name.
k8s_qos_classPod QOS class (burstable, guaranteed, besteffort).

Metrics:

MetricDescriptionDimensionsUnit
k8s_state.pod_cpu_requests_usedCPU requests usedrequestsmillicpu
k8s_state.pod_cpu_limits_usedCPU limits usedlimitsmillicpu
k8s_state.pod_mem_requests_usedMemory requests usedrequestsbytes
k8s_state.pod_mem_limits_usedMemory limits usedlimitsbytes
k8s_state.pod_conditionConditionpod_ready, pod_scheduled, pod_initialized, containers_readystate
k8s_state.pod_phasePhaserunning, failed, succeeded, pendingstate
k8s_state.pod_status_reasonStatus reasonEvicted, NodeAffinity, NodeLost, Shutdown, UnexpectedAdmissionError, Otherstatus
k8s_state.pod_ageAgeageseconds
k8s_state.pod_containersContainerscontainers, init_containerscontainers
k8s_state.pod_containers_stateContainers staterunning, waiting, terminatedcontainers
k8s_state.pod_init_containers_stateInit containers staterunning, waiting, terminatedcontainers

Per container​

These metrics refer to the Pod container.

Labels:

LabelDescription
k8s_cluster_idCluster ID. This is equal to the kube-system namespace UID.
k8s_cluster_nameCluster name. Cluster name discovery only works in GKE.
k8s_node_nameNode name.
k8s_namespaceNamespace.
k8s_controller_kindController kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.).
k8s_controller_nameController name.
k8s_pod_namePod name.
k8s_qos_classPod QOS class (burstable, guaranteed, besteffort).
k8s_container_nameContainer name.

Metrics:

MetricDescriptionDimensionsUnit
k8s_state.pod_container_readiness_stateReadiness statereadystate
k8s_state.pod_container_restartsRestartsrestartsrestarts
k8s_state.pod_container_stateContainer staterunning, waiting, terminatedstate
k8s_state.pod_container_waiting_state_reasonContainer waiting state reasonContainerCreating, CrashLoopBackOff, CreateContainerConfigError, CreateContainerError, ErrImagePull, ImagePullBackOff, InvalidImageName, PodInitializing, Otherstate
k8s_state.pod_container_terminated_state_reasonContainer terminated state reasonCompleted, ContainerCannotRun, DeadlineExceeded, Error, Evicted, OOMKilled, Otherstate

Troubleshooting​

Diagnostics​

Debug Mode​

Important: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature.

To troubleshoot issues with the k8s_state collector, run the go.d.plugin with the debug option enabled. The output should give you clues as to why the collector isn't working.

  • Navigate to the plugins.d directory, usually at /usr/libexec/netdata/plugins.d/. If that's not the case on your system, open netdata.conf and look for the plugins setting under [directories].

    cd /usr/libexec/netdata/plugins.d/
  • Switch to the netdata user.

    sudo -u netdata -s
  • Run the go.d.plugin to debug the collector:

    ./go.d.plugin -d -m k8s_state

    To debug a specific job:

    ./go.d.plugin -d -m k8s_state -j jobName

Getting Logs​

If you're encountering problems with the k8s_state collector, follow these steps to retrieve logs and identify potential issues:

  • Run the command specific to your system (systemd, non-systemd, or Docker container).
  • Examine the output for any warnings or error messages that might indicate issues. These messages should provide clues about the root cause of the problem.
System with systemd​

Use the following command to view logs generated since the last Netdata service restart:

journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep k8s_state
System without systemd​

Locate the collector log file, typically at /var/log/netdata/collector.log, and use grep to filter for collector's name:

grep k8s_state /var/log/netdata/collector.log

Note: This method shows logs from all restarts. Focus on the latest entries for troubleshooting current issues.

Docker Container​

If your Netdata runs in a Docker container named "netdata" (replace if different), use this command:

docker logs netdata 2>&1 | grep k8s_state

Do you have any feedback for this page? If so, you can open a new issue on our netdata/learn repository.