class Reschedule::Reschedulers::MemoryThreshold
Attributes
heapster_api[R]
kubernetes_api[R]
Public Class Methods
new(options={})
click to toggle source
Calls superclass method
Reschedule::Reschedulers::Base::new
# File lib/reschedule/reschedulers/memory_threshold.rb, line 11 def initialize(options={}) super @heapster_api = Reschedule::Heapster::Api.new @kubernetes_api = Reschedule::Kubernetes::Api.new end
Public Instance Methods
run()
click to toggle source
Calls superclass method
Reschedule::Reschedulers::Base#run
# File lib/reschedule/reschedulers/memory_threshold.rb, line 17 def run super node_names = rescheduleable_node_names Reschedule.logger.debug "Found #{node_names.length} rescheduleable nodes" return if node_names.blank? pods = get_pods Reschedule.logger.debug "Found #{pods.length} total pods" replication_controller_names = pods_and_node_names_to_replication_controller_names(pods, node_names) replication_controller_names.each do |replication_controller_name| reschedule_replication_controller(replication_controller_name) end end
Private Instance Methods
get_pods()
click to toggle source
# File lib/reschedule/reschedulers/memory_threshold.rb, line 33 def get_pods pods = kubernetes_api.get_pods pods.select { |pod| pod.metadata.namespace == options['namespace'] } end
nodes_to_rescheduleable_node_names(nodes)
click to toggle source
# File lib/reschedule/reschedulers/memory_threshold.rb, line 64 def nodes_to_rescheduleable_node_names(nodes) rescheduleable_node_names = [] nodes.each do |node| node_name = node['name'] node_stats = heapster_api.get_node_stats(node_name) if node_stats.code != 200 Reschedule.logger.debug "Node stats not found: #{node_stats}" next end memory_limit = node_stats['stats']['memory-limit']['hour']['average'] memory_usage = node_stats['stats']['memory-usage']['hour']['average'] if memory_usage.to_f / memory_limit > options['memory_threshold'] rescheduleable_node_names << node_name end end rescheduleable_node_names end
pods_and_node_names_to_replication_controller_names(pods, node_names)
click to toggle source
# File lib/reschedule/reschedulers/memory_threshold.rb, line 38 def pods_and_node_names_to_replication_controller_names(pods, node_names) node_pods = pods.select do |pod| node_names.include?(pod.spec.nodeName) end pods_to_replication_controller_names(node_pods) end
pods_to_replication_controller_names(pods)
click to toggle source
# File lib/reschedule/reschedulers/memory_threshold.rb, line 45 def pods_to_replication_controller_names(pods) replication_controller_names = pods.map do |pod| created_by = pod.metadata.annotations['kubernetes.io/created-by'] created_by = JSON.parse(created_by) created_by['reference']['name'] end replication_controller_names.uniq end
rescheduleable_node_names()
click to toggle source
# File lib/reschedule/reschedulers/memory_threshold.rb, line 54 def rescheduleable_node_names nodes = heapster_api.get_nodes if nodes.code != 200 Reschedule.logger.debug "Unable to get nodes in Heapster: #{nodes}" return end Reschedule.logger.debug "Found #{nodes.length} nodes in Heapster" nodes_to_rescheduleable_node_names(nodes) end