From 68ffc69d418a0589e1712f6595d35ad87d98e6a8 Mon Sep 17 00:00:00 2001 From: Oleksandr Kovalchuk Date: Tue, 7 Apr 2020 13:36:52 +0300 Subject: [PATCH] Add possibility to set Jenkins master pod's priority Allow to set priorityClassName for master pod. This will make possible for jenkins master to either not be preempted on other's pod low resources or to preempt lesser priority pods on resources shortage. Ref: https://github.com/jenkinsci/kubernetes-operator/issues/321 --- pkg/apis/jenkins/v1alpha2/jenkins_types.go | 4 ++++ pkg/controller/jenkins/configuration/base/reconcile.go | 6 ++++++ pkg/controller/jenkins/configuration/base/resources/pod.go | 1 + 3 files changed, 11 insertions(+) diff --git a/pkg/apis/jenkins/v1alpha2/jenkins_types.go b/pkg/apis/jenkins/v1alpha2/jenkins_types.go index 1eb665d7..1e9eca80 100644 --- a/pkg/apis/jenkins/v1alpha2/jenkins_types.go +++ b/pkg/apis/jenkins/v1alpha2/jenkins_types.go @@ -374,6 +374,10 @@ type JenkinsMaster struct { // DisableCSRFProtection allows you to toggle CSRF Protection on Jenkins DisableCSRFProtection bool `json:"disableCSRFProtection"` + + // PriorityClassName for Jenkins master pod + // +optional + PriorityClassName string `json:"priorityClassName,omitempty"` } // Service defines Kubernetes service attributes diff --git a/pkg/controller/jenkins/configuration/base/reconcile.go b/pkg/controller/jenkins/configuration/base/reconcile.go index 64cada6a..420eb273 100644 --- a/pkg/controller/jenkins/configuration/base/reconcile.go +++ b/pkg/controller/jenkins/configuration/base/reconcile.go @@ -648,6 +648,12 @@ func (r *ReconcileJenkinsBaseConfiguration) checkForPodRecreation(currentJenkins len(currentJenkinsMasterPod.Spec.Containers), len(r.Configuration.Jenkins.Spec.Master.Containers))) } + if r.Configuration.Jenkins.Spec.Master.PriorityClassName != currentJenkinsMasterPod.Spec.PriorityClassName { + messages = append(messages, "Jenkins priorityClassName has changed") + verbose = append(verbose, fmt.Sprintf("Jenkins priorityClassName has changed, actual '%+v' required '%+v'", + currentJenkinsMasterPod.Spec.PriorityClassName, r.Configuration.Jenkins.Spec.Master.PriorityClassName)) + } + customResourceReplaced := (r.Configuration.Jenkins.Status.BaseConfigurationCompletedTime == nil || r.Configuration.Jenkins.Status.UserConfigurationCompletedTime == nil) && r.Configuration.Jenkins.Status.UserAndPasswordHash == "" diff --git a/pkg/controller/jenkins/configuration/base/resources/pod.go b/pkg/controller/jenkins/configuration/base/resources/pod.go index 22585cfd..dde4609b 100644 --- a/pkg/controller/jenkins/configuration/base/resources/pod.go +++ b/pkg/controller/jenkins/configuration/base/resources/pod.go @@ -328,6 +328,7 @@ func NewJenkinsMasterPod(objectMeta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins SecurityContext: jenkins.Spec.Master.SecurityContext, ImagePullSecrets: jenkins.Spec.Master.ImagePullSecrets, Tolerations: jenkins.Spec.Master.Tolerations, + PriorityClassName: jenkins.Spec.Master.PriorityClassName, }, } }