Skip to content

Commit

Permalink
Preset: scheduling.nodeAffinity.matchNodePurpose
Browse files Browse the repository at this point in the history
  • Loading branch information
consideRatio committed Sep 19, 2018
1 parent a3fbb8f commit 972af40
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 44 deletions.
48 changes: 48 additions & 0 deletions jupyterhub/schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -570,3 +570,51 @@ properties:
type:
- string
- "null"
corePods:
type: object
description: |
These settings influence the core pods like the hub, proxy and
user-scheduler pods.
properties:
nodeAffinity:
type: object
description: |
Where should pods be scheduled? Perhaps on nodes with a certain
label is preferred or even required?
properties:
matchNodePurpose:
type: string
enum:
- ignore
- prefer
- require
description: |
Decide if core pods *ignore*, *prefer* or *require* to
schedule on nodes with this label:
```
hub.jupyter.org/node-purpose=core
```
userPods:
type: object
description: |
These settings influence the user pods like the user-placeholder,
user-dummy and actual user pods named like jupyter-someusername.
properties:
nodeAffinity:
type: object
description: |
Where should pods be scheduled? Perhaps on nodes with a certain
label is preferred or even required?
properties:
matchNodePurpose:
type: string
enum:
- ignore
- prefer
- require
description: |
Decide if user pods *ignore*, *prefer* or *require* to
schedule on nodes with this label:
```
hub.jupyter.org/node-purpose=user
```
15 changes: 1 addition & 14 deletions jupyterhub/templates/hub/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,7 @@ spec:
{{- end }}
spec:
nodeSelector: {{ toJson .Values.hub.nodeSelector }}
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: component
operator: In
values: ['proxy']
- key: release
operator: In
values: [{{ .Release.Name | quote }}]
{{- include "jupyterhub.coreAffinity" . | nindent 6 }}
volumes:
- name: config
configMap:
Expand Down
17 changes: 2 additions & 15 deletions jupyterhub/templates/proxy/autohttps/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,9 @@ spec:
{{- if .Values.rbac.enabled }}
serviceAccountName: autohttps
{{- end }}
nodeSelector: {{ toJson .Values.proxy.nodeSelector }}
terminationGracePeriodSeconds: 60
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: component
operator: In
values: ['hub']
- key: release
operator: In
values: [{{ .Release.Name | quote }}]
nodeSelector: {{ toJson .Values.proxy.nodeSelector }}
{{- include "jupyterhub.coreAffinity" . | nindent 6 }}
containers:
- name: nginx
image: "{{ .Values.proxy.nginx.image.name }}:{{ .Values.proxy.nginx.image.tag }}"
Expand Down
17 changes: 2 additions & 15 deletions jupyterhub/templates/proxy/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,9 @@ spec:
{{- .Values.proxy.annotations | toYaml | trimSuffix "\n" | nindent 8 }}
{{- end }}
spec:
nodeSelector: {{ toJson .Values.proxy.nodeSelector }}
terminationGracePeriodSeconds: 60
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: component
operator: In
values: ['hub']
- key: release
operator: In
values: [{{ .Release.Name | quote }}]
nodeSelector: {{ toJson .Values.proxy.nodeSelector }}
{{- include "jupyterhub.coreAffinity" . | nindent 6 }}
{{- if $manualHTTPSwithsecret }}
volumes:
- name: tls-secret
Expand Down
44 changes: 44 additions & 0 deletions jupyterhub/templates/scheduling/_scheduling-helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,28 @@


{{- define "jupyterhub.userNodeAffinityRequired" -}}
{{- if eq .Values.scheduling.userPods.nodeAffinity.matchNodePurpose "require" -}}
- matchExpressions:
- key: hub.jupyter.org/node-purpose
operator: In
values: [user]
{{- if .Values.singleuser.extraNodeAffinity.required }}{{ println }}{{ end }}
{{- end }}
{{- if .Values.singleuser.extraNodeAffinity.required -}}
{{ .Values.singleuser.extraNodeAffinity.required | toYaml | trimSuffix "\n" }}
{{- end }}
{{- end }}

{{- define "jupyterhub.userNodeAffinityPreferred" -}}
{{- if eq .Values.scheduling.userPods.nodeAffinity.matchNodePurpose "prefer" -}}
- weight: 100
preference:
matchExpressions:
- key: hub.jupyter.org/node-purpose
operator: In
values: [user]
{{- if .Values.singleuser.extraNodeAffinity.preferred }}{{ println }}{{ end }}
{{- end }}
{{- if .Values.singleuser.extraNodeAffinity.preferred -}}
{{ .Values.singleuser.extraNodeAffinity.preferred | toYaml | trimSuffix "\n" }}
{{- end }}
Expand Down Expand Up @@ -53,3 +69,31 @@
{{ .Values.singleuser.extraPodAntiAffinity.preferred | toYaml | trimSuffix "\n" }}
{{- end }}
{{- end }}



{{- define "jupyterhub.coreAffinity" -}}
{{- $require := eq .Values.scheduling.corePods.nodeAffinity.matchNodePurpose "require" -}}
{{- $prefer := eq .Values.scheduling.corePods.nodeAffinity.matchNodePurpose "prefer" -}}
{{- if or $require $prefer -}}
affinity:
nodeAffinity:
{{- if $require }}
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: hub.jupyter.org/node-purpose
operator: In
values: [core]
{{- end }}
{{- if $prefer }}
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hub.jupyter.org/node-purpose
operator: In
values: [core]
{{- end }}
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ spec:
serviceAccountName: user-scheduler
{{- end }}
nodeSelector: {{ toJson .Values.scheduling.userScheduler.nodeSelector }}
{{- include "jupyterhub.coreAffinity" . | nindent 6 }}
containers:
- name: user-scheduler
image: {{ include "jupyterhub.scheduler.image" . }}
Expand Down
6 changes: 6 additions & 0 deletions jupyterhub/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,12 @@ scheduling:
requests:
cpu: 50m
memory: 256Mi
corePods:
nodeAffinity:
matchNodePurpose: prefer
userPods:
nodeAffinity:
matchNodePurpose: prefer


prePuller:
Expand Down
6 changes: 6 additions & 0 deletions tools/templates/lint-and-validate-values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,12 @@ scheduling:
image:
name: gcr.io/google_containers/kube-scheduler-amd64
tag: v1.11.2
corePods:
nodeAffinity:
matchNodePurpose: require
userPods:
nodeAffinity:
matchNodePurpose: require


prePuller:
Expand Down

0 comments on commit 972af40

Please sign in to comment.