Skip to content

Commit 7aa00b9

Browse files
authored
Merge pull request #256 from yevgeny-shnaidman/yevgeny/tolerations-impl
Adding tolerations implementation to master and worker pod
2 parents c8185e1 + b8a47d9 commit 7aa00b9

File tree

5 files changed

+165
-10
lines changed

5 files changed

+165
-10
lines changed

internal/daemonset/daemonset.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,8 @@ func (d *daemonset) SetWorkerDaemonsetAsDesired(ctx context.Context, nfdInstance
239239
Labels: getWorkerLabelsAForApp("nfd-worker"),
240240
},
241241
Spec: corev1.PodSpec{
242-
Tolerations: []corev1.Toleration{
243-
{
244-
Operator: "Exists",
245-
Effect: "NoSchedule",
246-
},
247-
},
248-
Affinity: getWorkerAffinity(),
242+
Tolerations: getWorkerTolerations(nfdInstance),
243+
Affinity: getWorkerAffinity(),
249244

250245
ServiceAccountName: "nfd-worker",
251246
DNSPolicy: corev1.DNSClusterFirstWithHostNet,

internal/daemonset/worker.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
corev1 "k8s.io/api/core/v1"
2121

2222
"k8s.io/utils/ptr"
23+
nfdv1 "sigs.k8s.io/node-feature-discovery-operator/api/v1"
2324
)
2425

2526
func getWorkerAffinity() *corev1.Affinity {
@@ -212,3 +213,14 @@ func getWorkerVolumes() []corev1.Volume {
212213
func getWorkerLabelsAForApp(name string) map[string]string {
213214
return map[string]string{"app": name}
214215
}
216+
217+
func getWorkerTolerations(nfdInstance *nfdv1.NodeFeatureDiscovery) []corev1.Toleration {
218+
basicTolerations := []corev1.Toleration{
219+
{
220+
Operator: "Exists",
221+
Effect: "NoSchedule",
222+
},
223+
}
224+
225+
return append(basicTolerations, nfdInstance.Spec.Operand.WorkerTolerations...)
226+
}

internal/daemonset/worker_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package daemonset
2+
3+
import (
4+
. "github.com/onsi/ginkgo/v2"
5+
. "github.com/onsi/gomega"
6+
corev1 "k8s.io/api/core/v1"
7+
nfdv1 "sigs.k8s.io/node-feature-discovery-operator/api/v1"
8+
)
9+
10+
var _ = Describe("getWorkerToleration", func() {
11+
12+
It("worker tolerations are not defined in NFD CR", func() {
13+
nfdCR := nfdv1.NodeFeatureDiscovery{
14+
Spec: nfdv1.NodeFeatureDiscoverySpec{
15+
Operand: nfdv1.OperandSpec{},
16+
},
17+
}
18+
expectedTolerations := []corev1.Toleration{
19+
{
20+
Operator: "Exists",
21+
Effect: "NoSchedule",
22+
},
23+
}
24+
25+
res := getWorkerTolerations(&nfdCR)
26+
Expect(res).To(Equal(expectedTolerations))
27+
})
28+
29+
It("worker tolerations are defined in NFD CR", func() {
30+
workerTolerations := []corev1.Toleration{
31+
{
32+
Key: "key1",
33+
Value: "value1",
34+
Operator: corev1.TolerationOpEqual,
35+
Effect: corev1.TaintEffectNoSchedule,
36+
},
37+
{
38+
Key: "key1",
39+
Operator: corev1.TolerationOpEqual,
40+
Effect: corev1.TaintEffectNoSchedule,
41+
},
42+
}
43+
nfdCR := nfdv1.NodeFeatureDiscovery{
44+
Spec: nfdv1.NodeFeatureDiscoverySpec{
45+
Operand: nfdv1.OperandSpec{
46+
WorkerTolerations: workerTolerations,
47+
},
48+
},
49+
}
50+
expectedTolerations := []corev1.Toleration{
51+
{
52+
Operator: "Exists",
53+
Effect: "NoSchedule",
54+
},
55+
{
56+
Key: "key1",
57+
Value: "value1",
58+
Operator: corev1.TolerationOpEqual,
59+
Effect: corev1.TaintEffectNoSchedule,
60+
},
61+
{
62+
Key: "key1",
63+
Operator: corev1.TolerationOpEqual,
64+
Effect: corev1.TaintEffectNoSchedule,
65+
},
66+
}
67+
68+
res := getWorkerTolerations(&nfdCR)
69+
Expect(res).To(Equal(expectedTolerations))
70+
})
71+
})

internal/deployment/deployment.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (d *deployment) SetMasterDeploymentAsDesired(nfdInstance *nfdv1.NodeFeature
7474
ServiceAccountName: "nfd-master",
7575
DNSPolicy: corev1.DNSClusterFirstWithHostNet,
7676
RestartPolicy: corev1.RestartPolicyAlways,
77-
Tolerations: getPodsTolerations(),
77+
Tolerations: getPodsTolerations(nfdInstance),
7878
Affinity: getPodsAffinity(),
7979
Containers: []corev1.Container{
8080
{
@@ -151,8 +151,8 @@ func (d *deployment) GetDeployment(ctx context.Context, namespace, name string)
151151
return dep, err
152152
}
153153

154-
func getPodsTolerations() []corev1.Toleration {
155-
return []corev1.Toleration{
154+
func getPodsTolerations(nfdInstance *nfdv1.NodeFeatureDiscovery) []corev1.Toleration {
155+
basicTolerations := []corev1.Toleration{
156156
{
157157
Key: "node-role.kubernetes.io/master",
158158
Operator: corev1.TolerationOpEqual,
@@ -164,6 +164,8 @@ func getPodsTolerations() []corev1.Toleration {
164164
Effect: corev1.TaintEffectNoSchedule,
165165
},
166166
}
167+
168+
return append(basicTolerations, nfdInstance.Spec.Operand.MasterTolerations...)
167169
}
168170

169171
func getPodsAffinity() *corev1.Affinity {

internal/deployment/deployment_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
. "github.com/onsi/gomega"
2626
"go.uber.org/mock/gomock"
2727
appsv1 "k8s.io/api/apps/v1"
28+
corev1 "k8s.io/api/core/v1"
2829
apierrors "k8s.io/apimachinery/pkg/api/errors"
2930
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -202,3 +203,77 @@ var _ = Describe("GetDeployment", func() {
202203
Expect(err).To(HaveOccurred())
203204
})
204205
})
206+
207+
var _ = Describe("getPodsTolerations", func() {
208+
It("no tolerations defined in the NFD CR", func() {
209+
nfdCR := nfdv1.NodeFeatureDiscovery{
210+
Spec: nfdv1.NodeFeatureDiscoverySpec{
211+
Operand: nfdv1.OperandSpec{},
212+
},
213+
}
214+
expectedTolerations := []corev1.Toleration{
215+
{
216+
Key: "node-role.kubernetes.io/master",
217+
Operator: corev1.TolerationOpEqual,
218+
Effect: corev1.TaintEffectNoSchedule,
219+
},
220+
{
221+
Key: "node-role.kubernetes.io/control-plane",
222+
Operator: corev1.TolerationOpEqual,
223+
Effect: corev1.TaintEffectNoSchedule,
224+
},
225+
}
226+
227+
res := getPodsTolerations(&nfdCR)
228+
Expect(res).To(Equal(expectedTolerations))
229+
})
230+
231+
It("tolerations defined in the NFD CR", func() {
232+
masterTolerations := []corev1.Toleration{
233+
{
234+
Key: "key1",
235+
Value: "value1",
236+
Operator: corev1.TolerationOpEqual,
237+
Effect: corev1.TaintEffectNoSchedule,
238+
},
239+
{
240+
Key: "key1",
241+
Operator: corev1.TolerationOpEqual,
242+
Effect: corev1.TaintEffectNoSchedule,
243+
},
244+
}
245+
nfdCR := nfdv1.NodeFeatureDiscovery{
246+
Spec: nfdv1.NodeFeatureDiscoverySpec{
247+
Operand: nfdv1.OperandSpec{
248+
MasterTolerations: masterTolerations,
249+
},
250+
},
251+
}
252+
expectedTolerations := []corev1.Toleration{
253+
{
254+
Key: "node-role.kubernetes.io/master",
255+
Operator: corev1.TolerationOpEqual,
256+
Effect: corev1.TaintEffectNoSchedule,
257+
},
258+
{
259+
Key: "node-role.kubernetes.io/control-plane",
260+
Operator: corev1.TolerationOpEqual,
261+
Effect: corev1.TaintEffectNoSchedule,
262+
},
263+
{
264+
Key: "key1",
265+
Value: "value1",
266+
Operator: corev1.TolerationOpEqual,
267+
Effect: corev1.TaintEffectNoSchedule,
268+
},
269+
{
270+
Key: "key1",
271+
Operator: corev1.TolerationOpEqual,
272+
Effect: corev1.TaintEffectNoSchedule,
273+
},
274+
}
275+
276+
res := getPodsTolerations(&nfdCR)
277+
Expect(res).To(Equal(expectedTolerations))
278+
})
279+
})

0 commit comments

Comments
 (0)