Last active
November 28, 2018 04:13
-
-
Save ryotarai/2117d44ebb042f51d2990d876b52992a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'json' | |
require 'terminal-table' | |
def cpu_to_milli(cpu) | |
if cpu =~ /\A(\d+)m\z/ | |
return $1.to_i | |
end | |
return cpu.to_i * 1000 | |
end | |
def memory_to_mib(s) | |
if s =~ /\A(\d+)Mi\z/ | |
return $1.to_i | |
elsif s =~ /\A(\d+)Gi\z/ | |
return $1.to_i * 1024 | |
elsif s =~ /\A(\d+)Ki\z/ | |
return $1.to_i / 1024 | |
end | |
raise "Invalid memory: #{s}" | |
end | |
nodes = {} | |
JSON.parse(`kubectl get nodes -ojson`)['items'].each do |n| | |
nodes[n['metadata']['name']] = n | |
end | |
pods = JSON.parse(`kubectl get pod --all-namespaces -ojson`)['items'] | |
pods.group_by do |pod| | |
pod['spec']['nodeName'] | |
end.each do |nodename, pods| | |
puts ">>> #{nodename}" | |
rows = [] | |
rows << ['namespace', 'name', 'phase', 'milli cpu', 'memory (MiB)'] | |
rows << :separator | |
total_cpu = 0 | |
total_memory = 0 | |
pods.each do |pod| | |
namespace = pod['metadata']['namespace'] | |
name = pod['metadata']['name'] | |
phase = pod['status']['phase'] | |
pod['spec']['containers'].each do |container| | |
if container['resources'] && container['resources']['requests'] | |
requests = container['resources']['requests'] | |
if requests['cpu'] | |
cpu = cpu_to_milli(requests['cpu']) | |
total_cpu += cpu | |
end | |
if requests['memory'] | |
memory = memory_to_mib(requests['memory']) | |
total_memory += memory | |
end | |
end | |
rows << [namespace, name, phase, cpu, memory] | |
end | |
end | |
rows << :separator | |
rows << ['total', '', '', total_cpu, total_memory] | |
allocatable = nodes[nodename]['status']['allocatable'] | |
allocatable_cpu = cpu_to_milli(allocatable['cpu']) | |
allocatable_memory = memory_to_mib(allocatable['memory']) | |
rows << ['allocatable', '', '', allocatable_cpu, allocatable_memory] | |
rows << ['remain', '', '', allocatable_cpu - total_cpu, allocatable_memory - total_memory] | |
puts Terminal::Table.new(rows: rows) | |
puts | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment