we're suddenly a python thing :)
This commit is contained in:
6
.project
6
.project
@@ -5,7 +5,13 @@
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.python.pydev.PyDevBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.python.pydev.pythonNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
5
.pydevproject
Normal file
5
.pydevproject
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?eclipse-pydev version="1.0"?><pydev_project>
|
||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
||||
</pydev_project>
|
||||
73
_scripts/get_resources.py
Executable file
73
_scripts/get_resources.py
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/python3
|
||||
import kubernetes as k8s
|
||||
|
||||
from pint import UnitRegistry
|
||||
from collections import defaultdict
|
||||
|
||||
__all__ = ["compute_allocated_resources"]
|
||||
|
||||
|
||||
def compute_allocated_resources():
|
||||
ureg = UnitRegistry()
|
||||
ureg.load_definitions('kubernetes_units.txt')
|
||||
|
||||
Q_ = ureg.Quantity
|
||||
data = {}
|
||||
|
||||
# doing this computation within a k8s cluster
|
||||
k8s.config.load_kube_config()
|
||||
core_v1 = k8s.client.CoreV1Api()
|
||||
|
||||
# print("Listing pods with their IPs:")
|
||||
# ret = core_v1.list_pod_for_all_namespaces(watch=False)
|
||||
# for i in ret.items:
|
||||
# print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
|
||||
|
||||
for node in core_v1.list_node().items:
|
||||
|
||||
stats = {}
|
||||
node_name = node.metadata.name
|
||||
allocatable = node.status.allocatable
|
||||
max_pods = int(int(allocatable["pods"]) * 1.5)
|
||||
# print("{} ALLOC: {} MAX_PODS: {}".format(node_name,allocatable,max_pods))
|
||||
field_selector = ("status.phase!=Succeeded,status.phase!=Failed," +
|
||||
"spec.nodeName=" + node_name)
|
||||
|
||||
stats["cpu_alloc"] = Q_(allocatable["cpu"])
|
||||
stats["mem_alloc"] = Q_(allocatable["memory"])
|
||||
|
||||
pods = core_v1.list_pod_for_all_namespaces(limit=max_pods,
|
||||
field_selector=field_selector).items
|
||||
|
||||
# compute the allocated resources
|
||||
cpureqs, cpulmts, memreqs, memlmts = [], [], [], []
|
||||
for pod in pods:
|
||||
for container in pod.spec.containers:
|
||||
res = container.resources
|
||||
reqs = defaultdict(lambda: 0, res.requests or {})
|
||||
lmts = defaultdict(lambda: 0, res.limits or {})
|
||||
cpureqs.append(Q_(reqs["cpu"]))
|
||||
memreqs.append(Q_(reqs["memory"]))
|
||||
cpulmts.append(Q_(lmts["cpu"]))
|
||||
memlmts.append(Q_(lmts["memory"]))
|
||||
|
||||
stats["cpu_req"] = sum(cpureqs)
|
||||
stats["cpu_lmt"] = sum(cpulmts)
|
||||
stats["cpu_req_per"] = (stats["cpu_req"] / stats["cpu_alloc"] * 100)
|
||||
stats["cpu_lmt_per"] = (stats["cpu_lmt"] / stats["cpu_alloc"] * 100)
|
||||
|
||||
stats["mem_req"] = sum(memreqs)
|
||||
stats["mem_lmt"] = sum(memlmts)
|
||||
stats["mem_req_per"] = (stats["mem_req"] / stats["mem_alloc"] * 100)
|
||||
stats["mem_lmt_per"] = (stats["mem_lmt"] / stats["mem_alloc"] * 100)
|
||||
|
||||
data[node_name] = stats
|
||||
|
||||
return data
|
||||
|
||||
if __name__ == "__main__":
|
||||
# execute only if run as a script
|
||||
print(compute_allocated_resources())
|
||||
|
||||
|
||||
|
||||
20
_scripts/kubernetes_units.txt
Normal file
20
_scripts/kubernetes_units.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
# memory units
|
||||
|
||||
kmemunits = 1 = [kmemunits]
|
||||
Ki = 1024 * kmemunits
|
||||
Mi = Ki^2
|
||||
Gi = Ki^3
|
||||
Ti = Ki^4
|
||||
Pi = Ki^5
|
||||
Ei = Ki^6
|
||||
|
||||
# cpu units
|
||||
|
||||
kcpuunits = 1 = [kcpuunits]
|
||||
m = 1/1000 * kcpuunits
|
||||
k = 1000 * kcpuunits
|
||||
M = k^2
|
||||
G = k^3
|
||||
T = k^4
|
||||
P = k^5
|
||||
E = k^6
|
||||
Reference in New Issue
Block a user