Skip to content

Commit 5324dc2

Browse files
committed
Add autoscaling using HorizontalPodAutoscaler (close #14)
1 parent bdbec67 commit 5324dc2

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

lib/cuber/cuberfile_validator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def validate_procs
8181
@options[:procs].each do |procname, proc|
8282
@errors << "proc \"#{procname}\" name can only include lowercase letters" if procname !~ /\A[a-z]+\z/
8383
@errors << "proc \"#{procname}\" command must be present" if proc[:cmd].to_s.strip.empty?
84-
@errors << "proc \"#{procname}\" scale must be a positive number" unless proc[:scale].is_a?(Integer) && proc[:scale] > 0
84+
@errors << "proc \"#{procname}\" scale must be a positive number or a range" unless (proc[:scale].is_a?(Integer) && proc[:scale] > 0) || (proc[:scale].is_a?(Range) && proc[:scale].minmax.all? { |m| m.is_a?(Integer) && m > 0 })
8585
@errors << "proc \"#{procname}\" cpu must be a positive number" unless proc[:cpu].nil? || proc[:cpu].is_a?(Numeric) && proc[:cpu] > 0
8686
@errors << "proc \"#{procname}\" ram must be a positive number" unless proc[:ram].nil? || proc[:ram].is_a?(Numeric) && proc[:ram] > 0
8787
@errors << "proc \"#{procname}\" term must be a positive number" unless proc[:term].is_a?(Integer) && proc[:term] > 0

lib/cuber/templates/deployment.yml.erb

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ metadata:
131131
app.kubernetes.io/managed-by: cuber
132132
spec:
133133
revisionHistoryLimit: 0
134-
replicas: <%= proc[:scale] %>
134+
replicas: <%= proc[:scale].is_a?(Range) ? proc[:scale].min : proc[:scale] %>
135135
selector:
136136
matchLabels:
137137
app: <%= procname %>-proc
@@ -225,6 +225,34 @@ spec:
225225
terminationGracePeriodSeconds: <%= proc[:term] %>
226226
<%- end -%>
227227

228+
<%- @options[:procs].select { |procname, proc| proc[:scale].is_a?(Range) }.each do |procname, proc| -%>
229+
---
230+
apiVersion: autoscaling/v2
231+
kind: HorizontalPodAutoscaler
232+
metadata:
233+
name: scale-<%= procname %>
234+
namespace: <%= @options[:app] %>
235+
labels:
236+
app.kubernetes.io/name: <%= @options[:app].to_s.to_json %>
237+
app.kubernetes.io/instance: <%= @options[:instance].to_s.to_json %>
238+
app.kubernetes.io/version: <%= @options[:release].to_s.to_json %>
239+
app.kubernetes.io/managed-by: cuber
240+
spec:
241+
scaleTargetRef:
242+
apiVersion: apps/v1
243+
kind: Deployment
244+
name: <%= procname %>
245+
minReplicas: <%= proc[:scale].min %>
246+
maxReplicas: <%= proc[:scale].max %>
247+
metrics:
248+
- type: Resource
249+
resource:
250+
name: cpu
251+
target:
252+
type: Utilization
253+
averageUtilization: 60
254+
<%- end -%>
255+
228256
<%- @options[:cron].each do |jobname, cron| -%>
229257
---
230258
apiVersion: batch/v1

lib/cuber/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Cuber
2-
VERSION = '1.10.0'.freeze
2+
VERSION = '1.11.0'.freeze
33
end

0 commit comments

Comments
 (0)