summaryrefslogtreecommitdiffstats
path: root/clover/clovisor/libclovisor/clovisor_k8s.go
diff options
context:
space:
mode:
Diffstat (limited to 'clover/clovisor/libclovisor/clovisor_k8s.go')
-rw-r--r--clover/clovisor/libclovisor/clovisor_k8s.go52
1 files changed, 37 insertions, 15 deletions
diff --git a/clover/clovisor/libclovisor/clovisor_k8s.go b/clover/clovisor/libclovisor/clovisor_k8s.go
index 8f4b481..9587437 100644
--- a/clover/clovisor/libclovisor/clovisor_k8s.go
+++ b/clover/clovisor/libclovisor/clovisor_k8s.go
@@ -33,8 +33,9 @@ type monitoring_info_t struct {
svc_name string
pod_name string
container_name string
- protocol string
+ protocols []string
port_num uint32
+ pod_ip string
}
var DEFAULT_NAMESPACE = "default"
@@ -87,7 +88,10 @@ func (client *ClovisorK8s) Get_monitoring_info(nodeName string) (map[string]*mon
func (client *ClovisorK8s) getPodsForSvc(svc *core_v1.Service,
namespace string) (*core_v1.PodList, error) {
set := labels.Set(svc.Spec.Selector)
+ //label := strings.Split(set.AsSelector().String(), ",")[0]
+ //fmt.Printf("Trying to get pods for service %v with label %v from %v\n", svc.GetName(), label, set.AsSelector().String())
listOptions := metav1.ListOptions{LabelSelector: set.AsSelector().String()}
+ //listOptions := metav1.ListOptions{LabelSelector: label}
return client.client.CoreV1().Pods(namespace).List(listOptions)
}
@@ -104,7 +108,8 @@ func (client *ClovisorK8s) get_monitoring_pods(nodeName string,
monitoring_info := make(map[string]*monitoring_info_t)
if len(labels_list) == 0 {
// TODO(s3wong): set it to 'default'
- namespace = "linux-foundation-gke"
+ //namespace = "linux-foundation-gke"
+ namespace = "default"
if svcs_list, err :=
client.client.CoreV1().Services(namespace).List(metav1.ListOptions{});
err != nil {
@@ -151,14 +156,25 @@ func (client *ClovisorK8s) get_monitoring_pods(nodeName string,
for ns, svc_slice := range ns_svc_map {
for _, svc_list_ := range svc_slice {
for _, svc := range svc_list_.Items {
- fmt.Printf("Looking for supported protocols for service %v:%v\n", ns, svc.GetName())
- var svc_port_map = map[string]core_v1.ServicePort{}
+ if ns == "default" && svc.GetName() == "kubernetes" {
+ continue
+ }
+ //fmt.Printf("Looking for supported protocols for service %v:%v\n", ns, svc.GetName())
+ //var svc_port_map = map[string]core_v1.ServicePort{}
+ var svc_port_map = map[string][]string{}
for _, svc_port := range svc.Spec.Ports {
if len(svc_port.Name) > 0 {
- for _, sp := range SUPPORTED_PROTOCOLS {
- if strings.Contains(svc_port.Name, sp) {
- target_port := svc_port.TargetPort.String()
- svc_port_map[target_port] = svc_port
+ svc_protos := strings.Split(svc_port.Name, "-")
+ for _, proto := range svc_protos {
+ if err := loadProtoParser(proto, false); err == nil {
+ for _, sp := range SUPPORTED_PROTOCOLS {
+ if strings.Contains(proto, sp) {
+ target_port := svc_port.TargetPort.String()
+ svc_port_map[target_port] = append(svc_port_map[target_port], proto)
+ }
+ }
+ } else {
+ fmt.Printf("Unsupported protocol: %v\n", proto)
}
}
}
@@ -166,13 +182,23 @@ func (client *ClovisorK8s) get_monitoring_pods(nodeName string,
if len(svc_port_map) == 0 {
fmt.Printf("Found no port with supported protocol for %v:%v\n", ns, svc.GetName())
continue
+ } else {
+ fmt.Printf("svc_port_map for service %v is %v\n", svc.GetName(), svc_port_map)
}
- fmt.Printf("Fetching pods for namespace %v service: %v\n", ns, svc.GetName())
+ //fmt.Printf("Fetching pods for namespace %v service: %v\n", ns, svc.GetName())
pod_list, err := client.getPodsForSvc(&svc, ns)
if err != nil {
fmt.Print("Error fetching pods for %v:%v [%v]\n", ns, svc.GetName(), err)
continue
}
+ /*
+ labelSet := labels.Set(svc.Spec.Selector)
+ pod_list, err := client.client.CoreV1().Pods(ns).List(metav1.ListOptions{})
+ if err != nil {
+ fmt.Print("Error fetching pods for %v:%v [%v]\n", ns, svc.GetName(), err)
+ continue
+ }
+ */
for _, pod := range pod_list.Items {
if pod.Spec.NodeName == nodeName {
for _, container := range pod.Spec.Containers {
@@ -191,12 +217,8 @@ func (client *ClovisorK8s) get_monitoring_pods(nodeName string,
monitoring_info[pod_name].pod_name = pod_name
monitoring_info[pod_name].container_name = container.Name
monitoring_info[pod_name].port_num = port_num
- svc_port_name := svc_port_map[tp_string].Name
- if (strings.Contains(svc_port_name, "-")) {
- monitoring_info[pod_name].protocol = svc_port_name[:strings.Index(svc_port_name, "-")]
- } else {
- monitoring_info[pod_name].protocol = svc_port_name
- }
+ monitoring_info[pod_name].protocols = svc_port_map[tp_string]
+ monitoring_info[pod_name].pod_ip = pod.Status.PodIP
}
}
}