draw unassigned pods
This commit is contained in:
10
app.py
10
app.py
@@ -43,6 +43,7 @@ def get_clusters():
|
|||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
nodes = []
|
nodes = []
|
||||||
nodes_by_name = {}
|
nodes_by_name = {}
|
||||||
|
unassigned_pods = []
|
||||||
for node in response.json()['items']:
|
for node in response.json()['items']:
|
||||||
obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []}
|
obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []}
|
||||||
nodes.append(obj)
|
nodes.append(obj)
|
||||||
@@ -50,14 +51,15 @@ def get_clusters():
|
|||||||
response = session.get(urljoin(api_server_url, '/api/v1/pods'), timeout=5)
|
response = session.get(urljoin(api_server_url, '/api/v1/pods'), timeout=5)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
for pod in response.json()['items']:
|
for pod in response.json()['items']:
|
||||||
if 'nodeName' in pod['spec']:
|
|
||||||
obj = {'name': pod['metadata']['name'],
|
obj = {'name': pod['metadata']['name'],
|
||||||
'namespace': pod['metadata']['namespace'],
|
'namespace': pod['metadata']['namespace'],
|
||||||
'labels': pod['metadata']['labels'], 'status': pod['status'], 'containers': []}
|
'labels': pod['metadata'].get('labels', {}), 'status': pod['status'], 'containers': []}
|
||||||
for cont in pod['spec']['containers']:
|
for cont in pod['spec']['containers']:
|
||||||
obj['containers'].append({'name': cont['name'], 'image': cont['image'], 'resources': cont['resources']})
|
obj['containers'].append({'name': cont['name'], 'image': cont['image'], 'resources': cont['resources']})
|
||||||
# TODO: filter pod attributes
|
if 'nodeName' in pod['spec'] and pod['spec']['nodeName'] in nodes_by_name:
|
||||||
nodes_by_name[pod['spec']['nodeName']]['pods'].append(obj)
|
nodes_by_name[pod['spec']['nodeName']]['pods'].append(obj)
|
||||||
|
else:
|
||||||
|
unassigned_pods.append(obj)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = session.get(urljoin(api_server_url, '/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'), timeout=5)
|
response = session.get(urljoin(api_server_url, '/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'), timeout=5)
|
||||||
@@ -66,7 +68,7 @@ def get_clusters():
|
|||||||
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage']
|
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage']
|
||||||
except:
|
except:
|
||||||
logging.exception('Failed to get metrics')
|
logging.exception('Failed to get metrics')
|
||||||
clusters.append({'api_server_url': api_server_url, 'nodes': nodes})
|
clusters.append({'api_server_url': api_server_url, 'nodes': nodes, 'unassigned_pods': unassigned_pods})
|
||||||
|
|
||||||
return json.dumps({'kubernetes_clusters': clusters}, separators=(',',':'))
|
return json.dumps({'kubernetes_clusters': clusters}, separators=(',',':'))
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import Node from './node.js'
|
import Node from './node.js'
|
||||||
|
import Pod from './pod.js'
|
||||||
const PIXI = require('pixi.js')
|
const PIXI = require('pixi.js')
|
||||||
|
|
||||||
export default class Cluster extends PIXI.Graphics {
|
export default class Cluster extends PIXI.Graphics {
|
||||||
@@ -24,6 +25,18 @@ export default class Cluster extends PIXI.Graphics {
|
|||||||
}
|
}
|
||||||
this.addChild(nodeBox)
|
this.addChild(nodeBox)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (var pod of this.cluster.unassigned_pods) {
|
||||||
|
console.log(pod)
|
||||||
|
var podBox = new Pod(pod, this.tooltip)
|
||||||
|
podBox.x = rows[0]
|
||||||
|
podBox.y = 20
|
||||||
|
podBox.draw()
|
||||||
|
this.addChild(podBox)
|
||||||
|
rows[0] += 20
|
||||||
|
}
|
||||||
|
|
||||||
this.lineStyle(2, 0xaaaaff, 1);
|
this.lineStyle(2, 0xaaaaff, 1);
|
||||||
const width = Math.max(rows[0], rows[1])
|
const width = Math.max(rows[0], rows[1])
|
||||||
this.drawRect(0, 0, width, nodeBox.height * 2 + 30);
|
this.drawRect(0, 0, width, nodeBox.height * 2 + 30);
|
||||||
|
|||||||
12
examples/unassigned-pod.yaml
Normal file
12
examples/unassigned-pod.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# example Pod which cannot be assigned to any node
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: unassigned-test
|
||||||
|
spec:
|
||||||
|
# use a node selector which will never match..
|
||||||
|
nodeSelector:
|
||||||
|
stuff: x
|
||||||
|
containers:
|
||||||
|
- name: test
|
||||||
|
image: foo
|
||||||
Reference in New Issue
Block a user