Skip to content

Commit

Permalink
update nodeSelector to affinity for chart to customize pod scheduling…
Browse files Browse the repository at this point in the history
… arch preference (istio#3856)

Automatic merge from submit-queue.

update nodeSelector to affinity for chart to customize pod scheduling arch preference

Replace `nodeSelector` with node `affinity` for `nodeSelector` will be deprecated:
> nodeSelector continues to work as usual, but will eventually be deprecated, as node affinity can express everything that nodeSelector can express.

With the power of `affinity`, users can customized arch preference based on their requirements.
When install `Istio` chart, specify pod scheduling arch(amd64, ppc64le, s390x) preference and weight as follows:
 - 0(Never scheduled)
 - 1(Least preferred)
 - 2(No preference)
 - 3(Most preferred)

default value:
```
  arch:
    amd64: 2
    s390x: 2
    ppc64le: 2
```
  • Loading branch information
morvencao authored and istio-merge-robot committed Apr 2, 2018
1 parent 391a510 commit 33075b8
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,8 @@ spec:
volumeMounts:
- name: data
mountPath: /data/grafana
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
volumes:
- name: data
emptyDir: {}
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,5 @@ spec:
secret:
secretName: istio-ingress-certs
optional: true
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
secret:
secretName: istio.istio-mixer-service-account
optional: true
{{- if $.Values.nodeSelector }}
nodeSelector:
{{ toYaml $.Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
containers:
- name: mixer
image: "{{ $.Values.global.hub }}/mixer:{{ $.Values.global.tag }}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,5 @@ spec:
secret:
secretName: "istio.istio-pilot-service-account"
optional: true
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,5 @@ spec:
- name: config-volume
configMap:
name: prometheus
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,5 @@ spec:
- --self-signed-ca=true
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,5 @@ spec:
# port: {{ .Values.service.internalPort }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,5 @@ spec:
items:
- key: config
path: config
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,5 @@ spec:
port: {{ .Values.service.internalPort }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
{{- end }}
affinity:
{{- include "nodeaffinity" . | indent 6 }}
36 changes: 36 additions & 0 deletions install/kubernetes/helm/istio/templates/_affinity.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{{/* affinity - https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ */}}

{{- define "nodeaffinity" }}
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
{{- include "nodeAffinityRequiredDuringScheduling" . }}
preferredDuringSchedulingIgnoredDuringExecution:
{{- include "nodeAffinityPreferredDuringScheduling" . }}
{{- end }}

{{- define "nodeAffinityRequiredDuringScheduling" }}
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
{{- range $key, $val := .Values.global.arch }}
{{- if gt ($val | int) 0 }}
- {{ $key }}
{{- end }}
{{- end }}
{{- end }}

{{- define "nodeAffinityPreferredDuringScheduling" }}
{{- range $key, $val := .Values.global.arch }}
{{- if gt ($val | int) 0 }}
- weight: {{ $val | int }}
preference:
matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- {{ $key }}
{{- end }}
{{- end }}
{{- end }}
20 changes: 10 additions & 10 deletions install/kubernetes/helm/istio/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,16 @@ global:
# is desired.
multicluster:
enabled: false

# Specify pod scheduling arch(amd64, ppc64le, s390x) and weight as follows:
# 0 - Never scheduled
# 1 - Least preferred
# 2 - No preference
# 3 - Most preferred
arch:
amd64: 2
s390x: 2
ppc64le: 2

# Any customization for istio testing should be here
istiotesting:
Expand All @@ -71,7 +81,6 @@ ingress:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
service:
nodePort:
enabled: false
Expand All @@ -92,7 +101,6 @@ sidecar-injector:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

# istio egress capture whitelist
# https://istio.io/docs/tasks/traffic-management/egress.html#calling-external-services-directly
Expand All @@ -116,7 +124,6 @@ mixer:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

prometheusStatsdExporter:
repository: prom/statsd-exporter
Expand All @@ -139,7 +146,6 @@ pilot:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

#
# security configuration
Expand All @@ -155,7 +161,6 @@ security:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

#
# addons configuration
Expand Down Expand Up @@ -190,7 +195,6 @@ grafana:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

prometheus:
enabled: false
Expand Down Expand Up @@ -219,7 +223,6 @@ prometheus:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
service:
nodePort:
enabled: false
Expand Down Expand Up @@ -254,7 +257,6 @@ servicegraph:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
# prometheus addres
prometheusAddr: http://prometheus:9090

Expand Down Expand Up @@ -290,5 +292,3 @@ zipkin:
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}

0 comments on commit 33075b8

Please sign in to comment.