blob: 9937cc65e1252b3f10f365370d093f2134c38caf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2018
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -o errexit
set -o nounset
set -o pipefail
source _common_test.sh
rm -f $HOME/*.yaml
pod_name=nfd-pod
install_deps
function create_pod_yaml_with_affinity {
cat << POD > $HOME/$pod_name-affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: $pod_name
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "feature.node.kubernetes.io/kernel-version.major"
operator: Gt
values:
- '3'
- matchExpressions:
- key: "feature.node.kubernetes.io/kernel-version.major"
operator: Lt
values:
- '20'
- matchExpressions:
- key: "feature.node.kubernetes.io/kernel-version.major"
operator: In
values:
- '3'
- '4'
- '5'
- matchExpressions:
- key: "feature.node.kubernetes.io/kernel-version.major"
operator: NotIn
values:
- '1'
- matchExpressions:
- key: "feature.node.kubernetes.io/kernel-version.major"
operator: Exists
- matchExpressions:
- key: "feature.node.kubernetes.io/label_does_not_exist"
operator: DoesNotExist
containers:
- name: with-node-affinity
image: gcr.io/google_containers/pause:2.0
POD
}
function create_pod_yaml_with_nodeSelector {
# Get the major kernel version of a worker node in the cluster:
# this will be used below in the node selector of the test pod
local -r node_name=$(kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name} {.spec.taints[?(@.effect=="NoSchedule")].effect}{"\n"}{end}' | awk 'NF==1 {print $0;exit}')
local -r kernel_version=$(kubectl get node ${node_name} -o jsonpath='{.metadata.labels.feature\.node\.kubernetes\.io/kernel-version\.major}')
cat << POD > $HOME/$pod_name-nodeSelector.yaml
apiVersion: v1
kind: Pod
metadata:
name: ${pod_name}
spec:
nodeSelector:
feature.node.kubernetes.io/kernel-version.major: '${kernel_version}'
containers:
- name: with-node-affinity
image: gcr.io/google_containers/pause:2.0
POD
}
if $(kubectl version &>/dev/null); then
labels=$(kubectl get nodes -o json | jq .items[].metadata.labels)
echo $labels
if [[ $labels != *"kubernetes.io"* ]]; then
exit 1
fi
create_pod_yaml_with_affinity
create_pod_yaml_with_nodeSelector
for podType in ${POD_TYPE:-nodeSelector affinity}; do
kubectl delete pod $pod_name --ignore-not-found=true --now
while kubectl get pod $pod_name &>/dev/null; do
sleep 5
done
kubectl create -f $HOME/$pod_name-$podType.yaml --validate=false
for pod in $pod_name; do
status_phase=""
while [[ $status_phase != "Running" ]]; do
new_phase=$(kubectl get pods $pod | awk 'NR==2{print $3}')
if [[ $new_phase != $status_phase ]]; then
echo "$(date +%H:%M:%S) - $pod-$podType : $new_phase"
status_phase=$new_phase
fi
if [[ $new_phase == "Running" ]]; then
echo " Test is complete.."
fi
if [[ $new_phase == "Err"* ]]; then
exit 1
fi
done
done
kubectl delete pod $pod_name
while kubectl get pod $pod_name &>/dev/null; do
sleep 5
done
done
fi
|