kubernetes

package
v0.0.0-...-e6dcb73 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2026 License: Zlib Imports: 33 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrAPIServerRequestLatencyUnsupported = errors.New("api server request latency histogram family is not available")

Functions

func BuildLocalClient

func BuildLocalClient() (*kubernetes.Clientset, error)

func CollectAPIServerHealth

func CollectAPIServerHealth(ctx context.Context, kc *KubeClient) bool

CollectAPIServerHealth probes /livez on the Kubernetes API server and returns true when the server reports healthy (200), false for any non-200 response or connection failure. A connection failure is treated as unhealthy because the agent uses the same REST client for all API calls — if /livez is unreachable, the API server is effectively down from the agent's perspective.

func CollectEtcdHealth

func CollectEtcdHealth(ctx context.Context, kc *KubeClient) (bool, error)

CollectEtcdHealth calls /readyz?verbose on the API server and returns true when the etcd health check line reports healthy, false when it reports unhealthy. It returns an error when etcd health cannot be derived.

func CollectPerformanceMetrics

func CollectPerformanceMetrics(ctx context.Context, kc *KubeClient) (*portainer.PerformanceMetrics, error)

CollectPerformanceMetrics collects CPU, memory, disk, and network usage by querying each node's kubelet stats/summary endpoint directly via the Kubernetes API proxy (GET /api/v1/nodes/{name}/proxy/stats/summary). The kubelet proxy is used instead of metrics.k8s.io because the Metrics API does not expose filesystem data, and the kubelet endpoint works without metrics-server installed.

func CreateSnapshot

func CreateSnapshot(edgeKey string) (*portainer.KubernetesSnapshot, error)

CreateSnapshot creates a snapshot of a specific Kubernetes environment(endpoint)

Types

type APIServerLatencyHistogram

type APIServerLatencyHistogram struct {
	Buckets map[float64]float64 // le upper bound -> cumulative observation count
	Count   float64             // total observations (the +Inf bucket)
}

APIServerLatencyHistogram is the API server request-duration histogram pooled across every verb/resource into a single cluster-wide classic histogram.

The agent only parses and pools; quantile estimation is left to the evaluator, which re-exposes Buckets as le-labelled series and computes histogram_quantile(0.99, rate(...)) in the alert rule.

func CollectAPIServerRequestLatency

func CollectAPIServerRequestLatency(ctx context.Context, kc *KubeClient) (APIServerLatencyHistogram, error)

CollectAPIServerRequestLatency scrapes the API server /metrics endpoint and returns its request-duration histogram pooled across all verbs and resources. It prefers the SLI family (which already excludes legitimately-slow WATCH and long LIST calls) and falls back to the SLO family.

type ClusterRawMetrics

type ClusterRawMetrics struct {
	CPUUsageNanoCores                      uint64
	CPUCapacityNanoCores                   uint64
	MemoryWorkingSetBytes                  uint64
	MemoryCapacityBytes                    uint64
	DiskUsedBytes                          uint64
	DiskCapacityBytes                      uint64
	NetworkRxBytes                         uint64
	NetworkTxBytes                         uint64
	HasCPU, HasMemory, HasDisk, HasNetwork bool
}

ClusterRawMetrics holds raw (non-percentage) cluster-wide resource usage and capacity.

func CollectRawMetrics

func CollectRawMetrics(ctx context.Context, kc *KubeClient) (*ClusterRawMetrics, error)

CollectRawMetrics collects raw (non-percentage) CPU, memory, disk, and network values by querying each node's kubelet stats/summary endpoint. Returns uint64 values suitable for direct ingestion into a TSDB.

type ExecProcessParams

type ExecProcessParams struct {
	Token         string
	Namespace     string
	PodName       string
	ContainerName string
	Command       []string
	Stdin         io.Reader                       // bound to the exec process stdin
	Stdout        io.Writer                       // receives exec process output
	ResizeQueue   remotecommand.TerminalSizeQueue // nil if resize not needed
}

ExecProcessParams holds parameters for StartExecProcess.

type KubeClient

type KubeClient struct {
	// contains filtered or unexported fields
}

KubeClient can be used to query the Kubernetes API

func NewKubeClient

func NewKubeClient() (*KubeClient, error)

NewKubeClient returns a pointer to a new KubeClient instance

func (*KubeClient) CRDResourceReady

func (kcl *KubeClient) CRDResourceReady(ctx context.Context, crdName string) bool

CRDResourceReady checks whether a CRD's API endpoint is registered in discovery by attempting to list resources of that type. crdName is the full CRD name (e.g. "k8spspflexvolumes.constraints.gatekeeper.sh").

func (*KubeClient) DeleteResource

func (kcl *KubeClient) DeleteResource(ctx context.Context, apiVersion, kind, name, namespace string) error

DeleteResource deletes a Kubernetes resource group/version/resource and name/namespace

func (*KubeClient) GetDaemonSetStatus

func (kcl *KubeClient) GetDaemonSetStatus(namespace string, name string) ResourceStatus

func (*KubeClient) GetDeploymentStatus

func (kcl *KubeClient) GetDeploymentStatus(namespace string, name string) ResourceStatus

func (*KubeClient) GetPodStatus

func (kcl *KubeClient) GetPodStatus(namespace string, name string) ResourceStatus

func (*KubeClient) GetResource

func (kcl *KubeClient) GetResource(ctx context.Context, apiVersion, kind, name, namespace string) (any, error)

GetResource retrieves a Kubernetes resource by group/version/resource and name/namespace

func (*KubeClient) GetStatefulSetStatus

func (kcl *KubeClient) GetStatefulSetStatus(namespace string, name string) ResourceStatus

func (*KubeClient) PatchResource

func (kcl *KubeClient) PatchResource(ctx context.Context, apiVersion, kind, name, namespace, patch string) error

PatchResource applies a JSON merge patch to a Kubernetes resource

func (*KubeClient) StartExecProcess

func (kcl *KubeClient) StartExecProcess(params ExecProcessParams) error

StartExecProcess starts an exec process inside a container.

type NodeReadyStatus

type NodeReadyStatus struct {
	Name          string
	Ready         bool
	Unschedulable bool
}

NodeReadyStatus holds the readiness state of a single node.

func CollectNodeConditions

func CollectNodeConditions(ctx context.Context, kc *KubeClient) ([]NodeReadyStatus, error)

CollectNodeConditions lists all nodes and returns their Ready condition status.

type ResourceStatus

type ResourceStatus struct {
	Status  libstack.Status
	Message string
	Err     error
}

func AggregateStatuses

func AggregateStatuses(statuses []ResourceStatus) ResourceStatus

type TLSCertInfo

type TLSCertInfo struct {
	Source   string
	CN       string
	NotAfter time.Time
}

TLSCertInfo is a simplified API server certificate view for metrics export.

func CollectAPIServerCert

func CollectAPIServerCert(ctx context.Context, kc *KubeClient) (*TLSCertInfo, error)

CollectAPIServerCert collects the API server leaf TLS certificate details.

InsecureSkipVerify is intentional: we are inspecting the certificate itself (reading NotAfter), not authenticating the server. The cert must be readable even when it is expired, which is exactly the condition we need to report.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL