Skip to content
This repository was archived by the owner on Jan 29, 2025. It is now read-only.

Commit c0dc087

Browse files
madalazaruniemimu
authored andcommitted
Updating Kind E2E scheduler set-up to support K8s Scheduler v19 to v25
In this commit: - E2E scripts set-up the K8s scheduler in Kind with the approprivate KubeSchedulerConfig version - E2E scripts set the version appropriate nodeAffinity rules for the TAS deployment Signed-off-by: Madalina Lazar <[email protected]>
1 parent 1e4739e commit c0dc087

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

.github/scripts/e2e_setup_cluster.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ CNIS_NAME="cni-plugins"
1515
# running the latest available image my default, unless instructed to
1616
KIND_IMAGE="kindest/node:v1.24.0@sha256:0866296e693efe1fed79d5e6c7af8df71fc73ae45e3679af05342239cdc5bc8e"
1717
[ -n "$1" ] && KIND_IMAGE=$1
18+
SCHEDULER_VERSION=""
19+
KUBE_SCHEDULER_API_VERSION=""
20+
CONTROL_PLANE_NODE_AFINITY_LABEL="control-plane"
21+
NODE_AFFINITY_LABEL_KEY=$CONTROL_PLANE_NODE_AFINITY_LABEL
1822

1923
# private registry set-up variables
2024
CHANGE_MIRROR_REPO="false"
@@ -26,13 +30,50 @@ KIND_SET_UP_CONFIG_TEMPLATE="${root}/.github/scripts/kind/config-template.yaml"
2630
KIND_SET_UP_CONFIG_FILE="${root}/.github/scripts/kind/config.yaml"
2731
UBUNTU_CERTS_DIR="/usr/local/share/ca-certificates/"
2832

33+
get_scheduler_version() {
34+
[ -z "${KIND_IMAGE}" ] && echo "### No image SHA provided for Kind: $KIND_IMAGE. Exit..." && exit 1
35+
scheduler_image_version=$(echo "$KIND_IMAGE" | cut -d "." -f 2 )
36+
[ -z "${scheduler_image_version}" ] && echo "### Unable to determine K8s scheduler version from $KIND_IMAGE, got $scheduler_image_version. Exit..." && exit 1
37+
38+
SCHEDULER_VERSION=$scheduler_image_version
39+
}
40+
41+
get_kube_scheduler_api_version() {
42+
[ -z "${SCHEDULER_VERSION}" ] && echo "### UEmpty value for K8s scheduler version: $SCHEDULER_VERSION. Exit..." && exit 1
43+
44+
scheduler_image_version_19=19
45+
scheduler_image_version_22=22
46+
scheduler_image_version_25=25
47+
scheduler_config_api_versions_v1beta1="v1beta1"
48+
scheduler_config_api_versions_v1beta2="v1beta2"
49+
scheduler_config_api_versions_v1="v1"
50+
51+
currentKubeSchedulerApiVersion=""
52+
if [ "$SCHEDULER_VERSION" -lt $scheduler_image_version_19 ]; then
53+
echo "E2E tests will not execute for K8s version older than $scheduler_image_version_19. Exit..."
54+
exit 1
55+
elif [ "$SCHEDULER_VERSION" -ge $scheduler_image_version_19 ] && [ "$SCHEDULER_VERSION" -lt $scheduler_image_version_22 ]; then
56+
currentKubeSchedulerApiVersion=$scheduler_config_api_versions_v1beta1
57+
elif [ "$SCHEDULER_VERSION" -ge $scheduler_image_version_22 ] && [ "$SCHEDULER_VERSION" -lt $scheduler_image_version_25 ]; then
58+
currentKubeSchedulerApiVersion=$scheduler_config_api_versions_v1beta2
59+
else
60+
currentKubeSchedulerApiVersion=$scheduler_config_api_versions_v1
61+
fi
62+
63+
[ -z "${currentKubeSchedulerApiVersion}" ] && echo "Invalid API version for Kube Scheduler Configuration, got: $currentKubeSchedulerApiVersion. Exit..." && exit 1
64+
65+
KUBE_SCHEDULER_API_VERSION=$currentKubeSchedulerApiVersion
66+
}
67+
2968
# create cluster CA and policy for Kubernetes Scheduler
3069
# CA cert & key along with will be mounted to control plane
3170
# path /etc/kubernetes/pki. Kubeadm will utilise generated CA cert/key as root
3271
# Kubernetes CA. Cert for scheduler/TAS will be signed by this CA
3372
generate_k8_scheduler_config_data() {
3473
mkdir -p "${TMP_DIR}"
3574
mount_dir="$(mktemp -q -p "${TMP_DIR}" -d -t tas-e2e-k8-XXXXXXXX)"
75+
[ -z "${KUBE_SCHEDULER_API_VERSION}" ] && echo "Invalid API version for Kube Scheduler Configuration, got: $KUBE_SCHEDULER_API_VERSION. Exit..." && exit 1
76+
sed -i "s/XVERSIONX/$currentKubeSchedulerApiVersion/g" "${K8_ADDITIONS_PATH}/policy.yaml"
3677
cp "${K8_ADDITIONS_PATH}/policy.yaml" "${mount_dir}/"
3778
}
3879

@@ -139,8 +180,20 @@ check_requirements() {
139180
done
140181
}
141182

183+
set_node_affinity_expression_label_key() {
184+
scheduler_image_version_24=24
185+
[ -z "${SCHEDULER_VERSION}" ] && echo "### Unable to get K8s scheduler value, got $SCHEDULER_VERSION. Exit..." && exit 1
186+
if [ "$SCHEDULER_VERSION" -lt $scheduler_image_version_24 ]; then
187+
NODE_AFFINITY_LABEL_KEY="master"
188+
fi
189+
}
190+
142191
echo "## checking requirements"
143192
check_requirements
193+
echo "## fetch K8s Scheduler version"
194+
get_scheduler_version
195+
echo "## fetch K8s KubeSchedulerAPI version"
196+
get_kube_scheduler_api_version
144197
# generate K8 API server CA key/cert and supporting files for mTLS with NRI
145198
echo "## generating K8s scheduler config"
146199
generate_k8_scheduler_config_data
@@ -195,4 +248,8 @@ docker cp kind-control-plane:/etc/kubernetes/pki/ca.key "${mount_dir}/certs/clie
195248

196249
kubectl create secret tls extender-secret --cert "${mount_dir}/certs/client.crt" --key "${mount_dir}/certs/client.key"
197250
sed "s/intel\/telemetry-aware-scheduling/tasextender/g" "${root}/telemetry-aware-scheduling/deploy/tas-deployment.yaml" -i
251+
set_node_affinity_expression_label_key
252+
if [ "$CONTROL_PLANE_NODE_AFINITY_LABEL" != "$NODE_AFFINITY_LABEL_KEY" ]; then
253+
sed "s/control-plane/$NODE_AFFINITY_LABEL_KEY/g" "$TAS_DEPLOYMENT_FILE" -i
254+
fi
198255
kubectl apply -f "${root}/telemetry-aware-scheduling/deploy/"

.github/scripts/policies/policy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"kind" : "KubeSchedulerConfiguration",
3-
"apiVersion" : "kubescheduler.config.k8s.io/v1beta2",
3+
"apiVersion" : "kubescheduler.config.k8s.io/XVERSIONX",
44
"clientConnection": {
55
"kubeconfig": "/etc/kubernetes/scheduler.conf"
66
},

0 commit comments

Comments
 (0)