Skip to content

Commit 3b0f9c6

Browse files
vvbogdanov87kimoonkim
authored andcommitted
Move nodeSelector, affinity and tolerations from templates to values (#45)
* Move nodeSelector, affinity and tolerations from templates to values * Fix typo * Fix readme and default values Add default datanode affinity Add emptyline to the end of journalnode values file Fix namenode readme
1 parent df1c7fb commit 3b0f9c6

File tree

9 files changed

+92
-40
lines changed

9 files changed

+92
-40
lines changed

charts/hdfs-datanode-k8s/templates/datanode-daemonset.yaml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ spec:
2525
labels:
2626
name: hdfs-datanode
2727
spec:
28+
{{- if .Values.affinity }}
29+
affinity:
30+
{{ toYaml .Values.affinity | indent 8 }}
31+
{{- end }}
32+
{{- if .Values.nodeSelector }}
33+
nodeSelector:
34+
{{ toYaml .Values.nodeSelector | indent 8 }}
35+
{{- end }}
36+
{{- if .Values.tolerations }}
37+
tolerations:
38+
{{ toYaml .Values.tolerations | indent 8 }}
39+
{{- end }}
2840
hostNetwork: true
2941
hostPID: true
3042
dnsPolicy: ClusterFirstWithHostNet
@@ -164,13 +176,6 @@ spec:
164176
- name: jsvc-home
165177
mountPath: /jsvc-home
166178
{{- end }}
167-
affinity:
168-
nodeAffinity:
169-
requiredDuringSchedulingIgnoredDuringExecution:
170-
nodeSelectorTerms:
171-
- matchExpressions:
172-
- key: hdfs-datanode-exclude
173-
operator: DoesNotExist
174179
restartPolicy: Always
175180
volumes:
176181
{{- range $index, $path := .Values.dataNodeHostPath }}

charts/hdfs-datanode-k8s/values.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,14 @@ jsvcEnabled: true
6262

6363
# Whether or not to expect namenodes in the HA setup.
6464
namenodeHAEnabled: true
65+
66+
# Node labels and tolerations for pod assignment
67+
nodeSelector: {}
68+
tolerations: []
69+
affinity:
70+
nodeAffinity:
71+
requiredDuringSchedulingIgnoredDuringExecution:
72+
nodeSelectorTerms:
73+
- matchExpressions:
74+
- key: hdfs-datanode-exclude
75+
operator: DoesNotExist

charts/hdfs-journalnode-k8s/templates/journalnode-statefulset.yaml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,18 @@ spec:
6060
labels:
6161
app: hdfs-journalnode
6262
spec:
63+
{{- if .Values.affinity }}
6364
affinity:
64-
podAntiAffinity:
65-
requiredDuringSchedulingIgnoredDuringExecution:
66-
- labelSelector:
67-
matchExpressions:
68-
- key: "app"
69-
operator: In
70-
values:
71-
- hfds-journalnode
72-
topologyKey: "kubernetes.io/hostname"
65+
{{ toYaml .Values.affinity | indent 8 }}
66+
{{- end }}
67+
{{- if .Values.nodeSelector }}
68+
nodeSelector:
69+
{{ toYaml .Values.nodeSelector | indent 8 }}
70+
{{- end }}
71+
{{- if .Values.tolerations }}
72+
tolerations:
73+
{{ toYaml .Values.tolerations | indent 8 }}
74+
{{- end }}
7375
containers:
7476
- name: hdfs-journalnode
7577
image: uhopper/hadoop-namenode:2.7.2

charts/hdfs-journalnode-k8s/values.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,17 @@ kerberosConfigFileName: krb5.conf
5050
# where HOST-NAME should match the cluster node
5151
# host name that each per-host hdfs principal is associated with.
5252
kerberosKeytabsSecret: hdfs-kerberos-keytabs
53+
54+
# Node labels and tolerations for pod assignment
55+
nodeSelector: {}
56+
tolerations: []
57+
affinity:
58+
podAntiAffinity:
59+
requiredDuringSchedulingIgnoredDuringExecution:
60+
- labelSelector:
61+
matchExpressions:
62+
- key: "app"
63+
operator: In
64+
values:
65+
- hfds-journalnode
66+
topologyKey: "kubernetes.io/hostname"

charts/hdfs-namenode-k8s/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ See the other chart for `datanodes`.
132132
The two variables above are required. For other variables, see values.yaml.
133133
134134
If also using namenode labels for Kerberos, add
135-
the namenodePinningEnabled option:
135+
the nodeSelector option:
136136
```
137137
$ helm install -n my-hdfs-namenode \
138138
--set kerberosEnabled=true \
139139
--set kerberosRealm=MYCOMPANY.COM \
140-
--set namenodePinningEnabled=true \
140+
--set nodeSelector.hdfs-namenode-selector=hdfs-namenode \
141141
hdfs-namenode-k8s
142142
```
143143

charts/hdfs-namenode-k8s/templates/namenode-statefulset.yaml

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,18 @@ spec:
117117
{{- else }}
118118
dnsPolicy: ClusterFirst
119119
{{- end }}
120+
{{- if .Values.affinity }}
120121
affinity:
121-
podAntiAffinity:
122-
requiredDuringSchedulingIgnoredDuringExecution:
123-
- labelSelector:
124-
matchExpressions:
125-
- key: "app"
126-
operator: In
127-
values:
128-
- hfds-namenode
129-
topologyKey: "kubernetes.io/hostname"
122+
{{ toYaml .Values.affinity | indent 8 }}
123+
{{- end }}
124+
{{- if .Values.nodeSelector }}
125+
nodeSelector:
126+
{{ toYaml .Values.nodeSelector | indent 8 }}
127+
{{- end }}
128+
{{- if .Values.tolerations }}
129+
tolerations:
130+
{{ toYaml .Values.tolerations | indent 8 }}
131+
{{- end }}
130132
containers:
131133
# TODO: Support hadoop version as option.
132134
- name: hdfs-namenode
@@ -243,12 +245,6 @@ spec:
243245
- name: kerberos-keytab-copy
244246
mountPath: /kerberos-keytab-copy
245247
{{- end }}
246-
{{- if .Values.namenodePinningEnabled }}
247-
# Pin namenode pods to a set of nodes. You can label your node like below:
248-
# $ kubectl label nodes YOUR-NODE hdfs-namenode-selector=hdfs-namenode
249-
nodeSelector:
250-
hdfs-namenode-selector: hdfs-namenode
251-
{{- end }}
252248
restartPolicy: Always
253249
volumes:
254250
- name: nn-start

charts/hdfs-namenode-k8s/values.yaml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ zookeeperQuorum: zk-0.zk-svc.default.svc.cluster.local:2181,zk-1.zk-svc.default.
3939
# a standby namenode. Separated by the semicolon character.
4040
journalQuorum: hdfs-journalnode-0.hdfs-journalnode.default.svc.cluster.local:8485;hdfs-journalnode-1.hdfs-journalnode.default.svc.cluster.local:8485;hdfs-journalnode-2.hdfs-journalnode.default.svc.cluster.local:8485
4141

42-
# Whether or not to enable pinning of namenode pods to labeled k8s cluster nodes.
43-
namenodePinningEnabled: false
44-
4542
# Whether or not to use hostNetwork in namenode pods. Disabling this will break
4643
# data locality as namenode will see pod virtual IPs and fails to equate them with
4744
# cluster node physical IPs associated with data nodes.
@@ -87,3 +84,17 @@ kerberosConfigFileName: krb5.conf
8784
# where HOST-NAME should match the cluster node
8885
# host name that each per-host hdfs principal is associated with.
8986
kerberosKeytabsSecret: hdfs-kerberos-keytabs
87+
88+
# Node labels and tolerations for pod assignment
89+
nodeSelector: {}
90+
tolerations: []
91+
affinity:
92+
podAntiAffinity:
93+
requiredDuringSchedulingIgnoredDuringExecution:
94+
- labelSelector:
95+
matchExpressions:
96+
- key: "app"
97+
operator: In
98+
values:
99+
- hfds-namenode
100+
topologyKey: "kubernetes.io/hostname"

charts/hdfs-simple-namenode-k8s/templates/namenode-statefulset.yaml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ spec:
4242
labels:
4343
app: hdfs-namenode
4444
spec:
45+
{{- if .Values.affinity }}
46+
affinity:
47+
{{ toYaml .Values.affinity | indent 8 }}
48+
{{- end }}
49+
{{- if .Values.nodeSelector }}
50+
nodeSelector:
51+
{{ toYaml .Values.nodeSelector | indent 8 }}
52+
{{- end }}
53+
{{- if .Values.tolerations }}
54+
tolerations:
55+
{{ toYaml .Values.tolerations | indent 8 }}
56+
{{- end }}
4557
# Use hostNetwork so datanodes connect to namenode without going through an overlay network
4658
# like weave. Otherwise, namenode fails to see physical IP address of datanodes.
4759
hostNetwork: true
@@ -67,10 +79,6 @@ spec:
6779
volumeMounts:
6880
- name: hdfs-name
6981
mountPath: /hadoop/dfs/name
70-
# Pin the pod to a node. You can label your node like below:
71-
# $ kubectl label nodes YOUR-NODE hdfs-namenode-selector=hdfs-namenode-0
72-
nodeSelector:
73-
hdfs-namenode-selector: hdfs-namenode-0
7482
restartPolicy: Always
7583
volumes:
7684
- name: hdfs-name

charts/hdfs-simple-namenode-k8s/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@ nameNodeHostPath: /hdfs-name
2929
customHadoopConfig: {}
3030
# Set variables through a hash where env variable is the key, e.g.
3131
# HDFS_CONF_dfs_datanode_use_datanode_hostname: "false"
32+
33+
# Node labels and tolerations for pod assignment
34+
nodeSelector: {}
35+
tolerations: []
36+
affinity: {}

0 commit comments

Comments
 (0)