| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package nodes
- import (
- "context"
- "fmt"
- "sync"
- v1 "k8s.io/api/core/v1"
- "k8s.io/client-go/kubernetes"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- )
- type NodeUsage struct {
- fractionCpuReqs float64
- fractionCpuLimits float64
- fractionMemoryReqs float64
- fractionMemoryLimits float64
- fractionEphemeralStorageReqs float64
- fractionEphemeralStorageLimits float64
- }
- type NodeWithUsageData struct {
- Name string `json:"name"`
- FractionCpuReqs float64 `json:"cpu_reqs"`
- FractionCpuLimits float64 `json:"cpu_limits"`
- FractionMemoryReqs float64 `json:"memory_reqs"`
- FractionMemoryLimits float64 `json:"memory_limits"`
- FractionEphemeralStorageReqs float64 `json:"ephemeral_storage_reqs"`
- FractionEphemeralStorageLimits float64 `json:"ephemeral_storage_limits"`
- Condition []v1.NodeCondition `json:"node_conditions"`
- }
- func (nu *NodeUsage) Externalize(node v1.Node) *NodeWithUsageData {
- return &NodeWithUsageData{
- Name: node.Name,
- FractionCpuReqs: nu.fractionCpuReqs,
- FractionCpuLimits: nu.fractionCpuLimits,
- FractionMemoryReqs: nu.fractionMemoryReqs,
- FractionMemoryLimits: nu.fractionMemoryLimits,
- FractionEphemeralStorageReqs: nu.fractionEphemeralStorageReqs,
- FractionEphemeralStorageLimits: nu.fractionEphemeralStorageLimits,
- Condition: node.Status.Conditions,
- }
- }
- func GetNodesUsage(clientset kubernetes.Interface) []*NodeWithUsageData {
- nodeList, _ := clientset.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
- extNodeList := make([]*NodeWithUsageData, len(nodeList.Items))
- var wg sync.WaitGroup
- for i := range nodeList.Items {
- index := i
- currentNode := &nodeList.Items[index]
- wg.Add(1)
- go func() {
- defer wg.Done()
- podList := getPodsForNode(clientset, currentNode.Name)
- nodeUsage := DescribeNodeResource(podList, currentNode)
- extNodeList[index] = nodeUsage.Externalize(*currentNode)
- }()
- }
- wg.Wait()
- return extNodeList
- }
- func getPodsForNode(clientset kubernetes.Interface, nodeName string) *v1.PodList {
- fmt.Printf("%s", nodeName)
- podList, _ := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{
- FieldSelector: "spec.nodeName=" + nodeName + ",status.phase=Running",
- })
- return podList
- }
|