Deployment and ReplicaSet views for k8s

This commit is contained in:
Paul Bellamy
2016-05-04 17:03:05 +01:00
parent 0178babb0e
commit 16a5c738d9
17 changed files with 488 additions and 62 deletions

View File

@@ -361,6 +361,11 @@ func TestMakeDetailedPodNode(t *testing.T) {
Label: fixture.ServerHostName,
TopologyID: "hosts",
},
{
ID: fixture.ServiceNodeID,
Label: fixture.ServiceName,
TopologyID: "pods-by-service",
},
},
Connections: []detailed.ConnectionsSummary{
{

View File

@@ -78,6 +78,8 @@ func MakeNodeSummary(r report.Report, n report.Node) (NodeSummary, bool) {
report.ContainerImage: containerImageNodeSummary,
report.Pod: podNodeSummary,
report.Service: serviceNodeSummary,
report.Deployment: deploymentNodeSummary,
report.ReplicaSet: replicaSetNodeSummary,
report.Host: hostNodeSummary,
}
if renderer, ok := renderers[n.Topology]; ok {
@@ -270,6 +272,38 @@ func serviceNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) {
return base, true
}
func deploymentNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) {
base.Label, _ = n.Latest.Lookup(kubernetes.DeploymentName)
base.Rank, _ = n.Latest.Lookup(kubernetes.DeploymentID)
base.Stack = true
if p, ok := n.Counters.Lookup(report.Pod); ok {
if p == 1 {
base.LabelMinor = fmt.Sprintf("%d pod", p)
} else {
base.LabelMinor = fmt.Sprintf("%d pods", p)
}
}
return base, true
}
func replicaSetNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) {
base.Label, _ = n.Latest.Lookup(kubernetes.ReplicaSetName)
base.Rank, _ = n.Latest.Lookup(kubernetes.ReplicaSetID)
base.Stack = true
if p, ok := n.Counters.Lookup(report.Pod); ok {
if p == 1 {
base.LabelMinor = fmt.Sprintf("%d pod", p)
} else {
base.LabelMinor = fmt.Sprintf("%d pods", p)
}
}
return base, true
}
func hostNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) {
var (
hostname, _ = n.Latest.Lookup(host.HostName)

View File

@@ -50,6 +50,34 @@ var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies,
)),
)
// DeploymentRenderer is a Renderer which produces a renderable kubernetes deployments
// graph by merging the pods graph and the deployments topology.
var DeploymentRenderer = ApplyDecorators(
FilterEmpty(report.Pod,
MakeReduce(
MakeMap(
MapPod2Deployment,
PodRenderer,
),
SelectDeployment,
),
),
)
// ReplicaSetRenderer is a Renderer which produces a renderable kubernetes replica sets
// graph by merging the pods graph and the replica sets topology.
var ReplicaSetRenderer = ApplyDecorators(
FilterEmpty(report.Pod,
MakeReduce(
MakeMap(
MapPod2ReplicaSet,
PodRenderer,
),
SelectReplicaSet,
),
),
)
// MapContainer2Pod maps container Nodes to pod
// Nodes.
//
@@ -97,11 +125,13 @@ func MapContainer2Pod(n report.Node, _ report.Networks) report.Nodes {
// The various ways of grouping pods
var (
MapPod2Service = MapPod2Grouping(report.Service, kubernetes.ServiceIDs, report.MakeServiceNodeID)
MapPod2Service = MapPod2Parent(report.Service)
MapPod2Deployment = MapPod2Parent(report.Deployment)
MapPod2ReplicaSet = MapPod2Parent(report.ReplicaSet)
)
// MapPod2Grouping maps pod Nodes to some kubernetes grouping.
func MapPod2Grouping(topology, setKey string, idMaker func(uid string) string) func(pod report.Node, _ report.Networks) report.Nodes {
// MapPod2Parent maps pod Nodes to some kubernetes grouping.
func MapPod2Parent(topology string) func(pod report.Node, _ report.Networks) report.Nodes {
return func(pod report.Node, _ report.Networks) report.Nodes {
// Propagate all pseudo nodes
if pod.Topology == Pseudo {
@@ -111,14 +141,13 @@ func MapPod2Grouping(topology, setKey string, idMaker func(uid string) string) f
// Otherwise, if some some reason the pod doesn't have any of these ids
// (maybe slightly out of sync reports, or its not in this group), just
// drop it
groupIDs, ok := pod.Sets.Lookup(setKey)
groupIDs, ok := pod.Parents.Lookup(topology)
if !ok {
return report.Nodes{}
}
result := report.Nodes{}
for _, groupID := range groupIDs {
id := idMaker(groupID)
for _, id := range groupIDs {
node := NewDerivedNode(id, pod).WithTopology(topology)
node.Counters = node.Counters.Add(pod.Topology, 1)
result[id] = node

View File

@@ -29,4 +29,6 @@ var (
SelectHost = TopologySelector(report.Host)
SelectPod = TopologySelector(report.Pod)
SelectService = TopologySelector(report.Service)
SelectDeployment = TopologySelector(report.Deployment)
SelectReplicaSet = TopologySelector(report.ReplicaSet)
)