utils

package
v0.10.1 Latest Latest
Warning

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

Go to latest
Published: Nov 30, 2023 License: Apache-2.0 Imports: 46 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// WorkloadCpuUsageExprTemplate is used to query workload cpu usage by promql,  param is namespace,workload-name,duration str
	WorkloadCpuUsageExprTemplate = `sum(irate(container_cpu_usage_seconds_total{namespace="%s",pod=~"%s",container!=""}[%s]))`
	// WorkloadMemUsageExprTemplate is used to query workload mem usage by promql, param is namespace, workload-name
	WorkloadMemUsageExprTemplate = `sum(container_memory_working_set_bytes{namespace="%s",pod=~"%s",container!=""})`

	// following is node exporter metric for node cpu/memory usage
	// NodeCpuUsageExprTemplate is used to query node cpu usage by promql,  param is node name which prometheus scrape, duration str
	NodeCpuUsageExprTemplate = `` /* 166-byte string literal not displayed */
	// NodeMemUsageExprTemplate is used to query node cpu memory by promql,  param is node name, node name which prometheus scrape
	NodeMemUsageExprTemplate = `sum(node_memory_MemTotal_bytes{instance=~"(%s)(:\\d+)?"} - node_memory_MemAvailable_bytes{instance=~"(%s)(:\\d+)?"})`

	// PodCpuUsageExprTemplate is used to query pod cpu usage by promql,  param is namespace,pod, duration str
	PodCpuUsageExprTemplate = `sum(irate(container_cpu_usage_seconds_total{container!="POD",namespace="%s",pod="%s"}[%s]))`
	// PodMemUsageExprTemplate is used to query pod cpu usage by promql,  param is namespace,pod
	PodMemUsageExprTemplate = `sum(container_memory_working_set_bytes{container!="POD",namespace="%s",pod="%s"})`

	// ContainerCpuUsageExprTemplate is used to query container cpu usage by promql,  param is namespace,pod,container duration str
	ContainerCpuUsageExprTemplate = `irate(container_cpu_usage_seconds_total{container!="POD",namespace="%s",pod=~"%s",container="%s"}[%s])`
	// ContainerMemUsageExprTemplate is used to query container cpu usage by promql,  param is namespace,pod,container
	ContainerMemUsageExprTemplate = `container_memory_working_set_bytes{container!="POD",namespace="%s",pod=~"%s",container="%s"}`

	CustomerExprTemplate = `sum(%s{%s})`
)

todo: later we change these templates to configurable like prometheus-adapter

View Source
const (
	PostRegMatchesPodDeployment  = `[a-z0-9]+-[a-z0-9]{5}$`
	PostRegMatchesPodReplicaset  = `[a-z0-9]+$`
	PostRegMatchesPodStatefulset = `[0-9]+$`
)
View Source
const (
	CgroupKubePods  = "kubepods"
	CgroupPodPrefix = "pod"
)
View Source
const (
	ExtResourcePrefixFormat = "gocrane.io/%s"
)

Variables

View Source
var RootCgroupName = CgroupName([]string{})

Functions

func AlmostEqual added in v0.2.0

func AlmostEqual(a, b float64) bool

func Bool2Int32 added in v0.3.0

func Bool2Int32(b bool) int32

func Bool2Uint added in v0.6.0

func Bool2Uint(b bool) uint

func BuildZoneName added in v0.8.0

func BuildZoneName(nodeID int) string

BuildZoneName returns the canonical name of a NUMA zone from its ID.

func CalculatePodRequests

func CalculatePodRequests(pods []v1.Pod, resource v1.ResourceName) (int64, error)

CalculatePodRequests sum request total from pods

func CalculatePodTemplateRequests added in v0.3.0

func CalculatePodTemplateRequests(podTemplate *v1.PodTemplateSpec, resource v1.ResourceName) (int64, error)

CalculatePodTemplateRequests sum request total from podTemplate

func CmpFloat added in v0.6.0

func CmpFloat(p1, p2 float64) int32

func ContainMaps added in v0.2.0

func ContainMaps(a map[string]string, b map[string]string) bool

ContainMaps to judge the maps b is contained by maps a

func ContainsString

func ContainsString(slice []string, str string) bool

func EvictPodWithGracePeriod

func EvictPodWithGracePeriod(client clientset.Interface, pod *v1.Pod, gracePeriodSeconds *int32) error

EvictPodWithGracePeriod evict pod with grace period

func ExpandSlice added in v0.8.0

func ExpandSlice(slice string) (string, error)

func GetAddressAndDialer

func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error)

GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer.

func GetAvailablePods added in v0.5.0

func GetAvailablePods(pods []v1.Pod) []v1.Pod

GetAvailablePods return a set with pod names that paas IsPodAvailable check

func GetCgroupPath added in v0.8.0

func GetCgroupPath(p *v1.Pod, cgroupDriver string) string

func GetContainerCpuUsageExpression added in v0.8.0

func GetContainerCpuUsageExpression(namespace string, workloadName string, kind string, containerName string) string

func GetContainerExtCpuResFromPod added in v0.5.0

func GetContainerExtCpuResFromPod(pod *v1.Pod, containerName string) (resource.Quantity, bool)

GetContainerExtCpuResFromPod get container's gocrane.io/cpu usage

func GetContainerExtMemResFromPod added in v0.8.0

func GetContainerExtMemResFromPod(pod *v1.Pod, containerName string) (resource.Quantity, bool)

GetContainerExtMemResFromPod get container's gocrane.io/memory usage

func GetContainerFromPod added in v0.5.0

func GetContainerFromPod(pod *v1.Pod, containerName string) *v1.Container

func GetContainerIdFromKey added in v0.2.0

func GetContainerIdFromKey(key string) string

func GetContainerIdFromPod added in v0.3.0

func GetContainerIdFromPod(pod *v1.Pod, containerName string) string

func GetContainerMemUsageExpression added in v0.8.0

func GetContainerMemUsageExpression(namespace string, workloadName string, kind string, containerName string) string

func GetContainerNameFromPod added in v0.5.0

func GetContainerNameFromPod(pod *v1.Pod, containerId string) string

func GetContainerStatus added in v0.3.0

func GetContainerStatus(pod *v1.Pod, container v1.Container) v1.ContainerState

func GetCronMetricName added in v0.8.0

func GetCronMetricName() string

GetCronMetricName return metric name used by cron

func GetCustomerExpression added in v0.8.0

func GetCustomerExpression(metricName string, labels string) string

func GetDaemonSetPods added in v0.7.0

func GetDaemonSetPods(kubeClient client.Client, namespace string, name string) ([]corev1.Pod, error)

func GetEHPAFromScaleTarget added in v0.3.0

func GetEHPAFromScaleTarget(context context.Context, kubeClient client.Client, namespace string, objRef corev1.ObjectReference) (*autoscalingapi.EffectiveHorizontalPodAutoscaler, error)

func GetEVPAFromScaleTarget added in v0.4.0

func GetEVPAFromScaleTarget(context context.Context, kubeClient client.Client, namespace string, objRef corev1.ObjectReference) (*autoscalingapi.EffectiveVerticalPodAutoscaler, error)

func GetElasticResourceLimit added in v0.8.0

func GetElasticResourceLimit(pod *v1.Pod, resName v1.ResourceName) (amount int64)

GetElasticResourceLimit sum all containers resources limit for gocrane.io/resource As extended resource is not over committable resource, so request = limit

func GetExpressionQueryAnnotation added in v0.8.0

func GetExpressionQueryAnnotation(metricIdentifier string, annotations map[string]string) string

GetExpressionQueryAnnotation return metric query from annotation by metricName

func GetExpressionQueryDefault added in v0.8.0

func GetExpressionQueryDefault(metric autoscalingv2.MetricSpec, namespace string, name string, kind string) string

GetExpressionQuery return metric query

func GetExtCpuRes added in v0.3.0

func GetExtCpuRes(container v1.Container) (resource.Quantity, bool)

GetExtCpuRes get container's gocrane.io/cpu usage

func GetExtMemRes added in v0.8.0

func GetExtMemRes(container v1.Container) (resource.Quantity, bool)

GetExtMemRes get container's gocrane.io/memory usage

func GetGroupVersionResource added in v0.9.0

func GetGroupVersionResource(discoveryClient discovery.DiscoveryInterface, apiVersion string, kind string) (*schema.GroupVersionResource, error)

func GetHPAFromScaleTarget added in v0.3.0

func GetHPAFromScaleTarget(context context.Context, kubeClient client.Client, namespace string, objRef corev1.ObjectReference) (*autoscalingv2.HorizontalPodAutoscaler, error)

func GetInt32withDefault

func GetInt32withDefault(i *int32, value int32) int32

func GetInt64withDefault

func GetInt64withDefault(i *int64, value int64) int64

func GetKubeletConfig added in v0.8.0

func GetMetricIdentifier added in v0.8.0

func GetMetricIdentifier(metric autoscalingv2.MetricSpec, name string) string

GetGeneralPredictionMetricName return metric name used by prediction

func GetNodeCpuUsageExpression added in v0.8.0

func GetNodeCpuUsageExpression(nodeName string) string

func GetNodeMemUsageExpression added in v0.8.0

func GetNodeMemUsageExpression(nodeName string) string

func GetNodePods added in v0.8.0

func GetNodePods(kubeClient client.Client, nodeName string) ([]corev1.Pod, error)

func GetNodeRef

func GetNodeRef(nodeName string) *v1.ObjectReference

func GetPodCgroupNameSuffix added in v0.8.0

func GetPodCgroupNameSuffix(podUID types.UID) string

func GetPodCondition

func GetPodCondition(status *v1.PodStatus, conditionType v1.PodConditionType) (int, *v1.PodCondition)

GetPodCondition extracts the provided condition from the given status and returns that. Returns nil and -1 if the condition is not present, and the index of the located condition. copied from k8s.io/kubernetes/pkg/api/v1/pod.go

func GetPodContainerByName added in v0.2.0

func GetPodContainerByName(pod *v1.Pod, containerName string) (v1.Container, error)

GetPodContainerByName get container info by container name

func GetPodCpuUsageExpression added in v0.8.0

func GetPodCpuUsageExpression(namespace string, name string) string

func GetPodMemUsageExpression added in v0.8.0

func GetPodMemUsageExpression(namespace string, name string) string

func GetPodNameReg added in v0.9.0

func GetPodNameReg(resourceName string, resourceType string) string

func GetPodReadyCondition

func GetPodReadyCondition(status v1.PodStatus) *v1.PodCondition

GetPodReadyCondition extracts the pod ready condition from the given status and returns that. Returns nil if the condition is not present. copied from k8s.io/kubernetes/pkg/api/v1/pod.go

func GetPodTemplate added in v0.3.0

func GetPodTemplate(context context.Context, namespace string, name string, kind string, apiVersion string, kubeClient client.Client) (*v1.PodTemplateSpec, error)

func GetPodsFromScale

func GetPodsFromScale(kubeClient client.Client, scale *autoscalingapiv1.Scale) ([]v1.Pod, error)

func GetPredictionMetricName added in v0.5.0

func GetPredictionMetricName(sourceType autoscalingv2.MetricSourceType) (metricName string)

GetPredictionMetricName return metric name used by prediction

func GetReadyPredictionMetric added in v0.6.0

func GetReadyPredictionMetric(metric string, resourceIdentifier string, prediction *predictionapi.TimeSeriesPrediction) (*predictionapi.MetricTimeSeries, error)

func GetRecommendationRuleOwnerReference added in v0.10.0

func GetRecommendationRuleOwnerReference(recommend *analysisv1alpha1.Recommendation) *metav1.OwnerReference

func GetReservedCPUs added in v0.10.0

func GetReservedCPUs(cpus string) (cpuset.CPUSet, error)

GetReservedCPUs ...

func GetResourceByPodTemplate added in v0.3.0

func GetResourceByPodTemplate(podTemplate *corev1.PodTemplateSpec, containerName string) (*corev1.ResourceRequirements, bool)

func GetRunNumber added in v0.10.0

func GetRunNumber(recommendation *analysisv1alpha1.Recommendation) (int32, error)

func GetScaleFromObjectReference added in v0.10.0

func GetScaleFromObjectReference(ctx context.Context, restMapper meta.RESTMapper, scaleClient scale.ScalesGetter, ref v1.ObjectReference) (*autoscalingapiv1.Scale, *meta.RESTMapping, error)

func GetUint32withDefault

func GetUint32withDefault(i *uint32, value uint32) uint32

func GetUint64FromMaps

func GetUint64FromMaps(key string, maps map[string]uint64) uint64

func GetUint64withDefault

func GetUint64withDefault(i *uint64, value uint64) uint64

func GetWorkloadCpuUsageExpression added in v0.8.0

func GetWorkloadCpuUsageExpression(namespace string, name string, kind string) string

func GetWorkloadMemUsageExpression added in v0.8.0

func GetWorkloadMemUsageExpression(namespace string, name string, kind string) string

func Int32P added in v0.3.0

func Int32P(value int32) *int32

func IsCPUResourceEqual added in v0.3.0

func IsCPUResourceEqual(oldResource, desiredResource corev1.ResourceList) bool

func IsEHPACronEnabled added in v0.4.0

func IsEHPACronEnabled(ehpa *autoscalingapi.EffectiveHorizontalPodAutoscaler) bool

func IsEHPAHasPredictionMetric added in v0.5.0

func IsEHPAHasPredictionMetric(ehpa *autoscalingapi.EffectiveHorizontalPodAutoscaler) bool

func IsEHPAPredictionEnabled added in v0.4.0

func IsEHPAPredictionEnabled(ehpa *autoscalingapi.EffectiveHorizontalPodAutoscaler) bool

func IsEqual added in v0.3.0

func IsEqual(oldResource, desiredResource *corev1.ResourceRequirements) bool

func IsExpressionQueryAnnotationEnabled added in v0.9.0

func IsExpressionQueryAnnotationEnabled(metricIdentifier string, annotations map[string]string) bool

func IsHPAControlledByEHPA added in v0.8.0

func IsHPAControlledByEHPA(hpa *autoscalingv2.HorizontalPodAutoscaler) bool

func IsMemoryResourceEqual added in v0.3.0

func IsMemoryResourceEqual(oldResource, desiredResource corev1.ResourceList) bool

func IsNodeAwareOfTopology added in v0.8.0

func IsNodeAwareOfTopology(attr map[string]string) *bool

IsNodeAwareOfTopology returns default topology awareness policy.

func IsPodAvailable

func IsPodAvailable(pod *v1.Pod, minReadySeconds int32, now metav1.Time) bool

IsPodAvailable returns true if a pod is available; false otherwise. copied from k8s.io/kubernetes/pkg/api/v1/pod.go

func IsPodReady

func IsPodReady(pod *v1.Pod) bool

IsPodReady returns true if a pod is ready; false otherwise. copied from k8s.io/kubernetes/pkg/api/v1/pod.go and modified

func IsPodTerminated added in v0.8.0

func IsPodTerminated(pod *corev1.Pod) bool

func IsRecommendationControlledByRule added in v0.10.0

func IsRecommendationControlledByRule(recommend *analysisv1alpha1.Recommendation) bool

func IsResourceEqual added in v0.3.0

func IsResourceEqual(oldResource, desiredResource corev1.ResourceList) bool

func KindForResource added in v0.2.0

func KindForResource(resource string, restMapper meta.RESTMapper) (string, error)

func LabelSelectorMatched

func LabelSelectorMatched(maps map[string]string, selector *metav1.LabelSelector) (bool, error)

func MapSortToArray added in v0.9.0

func MapSortToArray(m map[string]string) []string

func ParseDuration

func ParseDuration(s string) (time.Duration, error)

ParseDuration parse a string to time.Duration

func ParseFloat

func ParseFloat(str string, defaultValue float64) (float64, error)

func ParsePercentage added in v0.5.0

func ParsePercentage(input string) (float64, error)

parsePercentage parse the percent string value

func ParseTimestamp added in v0.7.0

func ParseTimestamp(ts string) (time.Time, error)

ParseTimestamp parse a string to time.Time

func PodExcludeReservedCPUs added in v0.10.0

func PodExcludeReservedCPUs(pod *corev1.Pod) bool

PodExcludeReservedCPUs ...

func QueryPredictedTimeSeriesOnce added in v0.3.0

func QueryPredictedTimeSeriesOnce(predictor prediction.Interface, caller string, pConfig *config.Config, namer metricnaming.MetricNamer, startTime time.Time, endTime time.Time) ([]*common.TimeSeries, error)

func QueryPredictedValues added in v0.4.0

func QueryPredictedValues(predictor prediction.Interface, caller string, pConfig *config.Config, namer metricnaming.MetricNamer) ([]*common.TimeSeries, error)

func QueryPredictedValuesOnce added in v0.3.0

func QueryPredictedValuesOnce(recommendation *v1alpha1.Recommendation, predictor prediction.Interface, caller string, pConfig *config.Config, namer metricnaming.MetricNamer) ([]*common.TimeSeries, error)

func RemoveNodeTaints added in v0.2.0

func RemoveNodeTaints(client clientset.Interface, nodeLister corelisters.NodeLister, nodeName string, taint v1.Taint, retry *uint64) (*v1.Node, error)

func RemoveString added in v0.4.0

func RemoveString(slice []string, str string) []string

func SetRunNumber added in v0.10.0

func SetRunNumber(recommendation *analysisv1alpha1.Recommendation, runNumber int32)

func StringPtr added in v0.3.0

func StringPtr(str string) *string

func Uint32P added in v0.3.0

func Uint32P(value uint32) *uint32

func Uint64P added in v0.3.0

func Uint64P(value uint64) *uint64

func UpdateNodeConditionsStatues added in v0.2.0

func UpdateNodeConditionsStatues(client clientset.Interface, nodeLister corelisters.NodeLister, nodeName string, condition v1.NodeCondition, retry *uint64) (*v1.Node, error)

UpdateNodeConditionsStatues be used to update node condition with check whether it needs to update

func UpdateNodeTaints added in v0.2.0

func UpdateNodeTaints(client clientset.Interface, nodeLister corelisters.NodeLister, nodeName string, taint v1.Taint, retry *uint64) (*v1.Node, error)

UpdateNodeTaints be used to update node taints with check whether it needs to update

Types

type CgroupName added in v0.8.0

type CgroupName []string

func GetCgroupName added in v0.8.0

func GetCgroupName(p *v1.Pod) CgroupName

func NewCgroupName added in v0.8.0

func NewCgroupName(base CgroupName, components ...string) CgroupName

func (CgroupName) ToCgroupfs added in v0.8.0

func (cgroupName CgroupName) ToCgroupfs() string

func (CgroupName) ToSystemd added in v0.8.0

func (cgroupName CgroupName) ToSystemd() string

type SortMap added in v0.9.0

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

type SortMaps added in v0.9.0

type SortMaps []SortMap

func (SortMaps) Len added in v0.9.0

func (a SortMaps) Len() int

func (SortMaps) Less added in v0.9.0

func (a SortMaps) Less(i, j int) bool

func (SortMaps) Swap added in v0.9.0

func (a SortMaps) Swap(i, j int)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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