Commit 3f887171 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #49253 from Quentin-M/no_host_pred_test

Automatic merge from submit-queue (batch tested with PRs 49358, 49253) Remove hostname label condition in SchedulerPredicates **What this PR does / why we need it**: ``` validates that NodeSelector is respected if matching [Conformance] validates that required NodeAffinity setting is respected if matching ``` The two tests above make the assumption that the node names are equal to the `kubernetes.io/hostname` labels. Unfortunately, this is not necessarily true all the time. For instance, when using the AWS Cloud Provider + Container Linux: - The node name is set using the AWS SDK's `ec2.Instance.PrivateDnsName` and has the form `ip-10-0-35-57.ca-central-1.compute.internal` [[1](https://github.com/kubernetes/kubernetes/blob/v1.7.1/pkg/cloudprovider/providers/aws/aws.go#L3343-L3346)] [[2](https://raw.githubusercontent.com/aws/aws-sdk-go/master/service/ec2/api.go)] - The node's hostname, however, is a simple call to `os.Hostname()`, itself reading `/proc/sys/kernel/hostname`, which contains what the AWS DHCP assigned to the instance, typically the hostname short-form: `ip-10-0-16-137`. [[1](https://github.com/kubernetes/kubernetes/blob/v1.7.1/pkg/util/node/node.go#L43-L54)] Consequently, we are trying to assign a pod to a node having the following label: `kubernetes.io/hostname=ip-10-0-35-57.ca-central-1.compute.internal` (in addition to the randomly generated label), whereas the actual label on the node is `kubernetes.io/hostname=ip-10-0-35-57`. Furthermore, this inaccurate `kubernetes.io/hostname=<nodename>` condition is actually useless given we already match over a random label, that was assigned to that node. Later, the test ensures that the scheduled pod was scheduled to the right node by comparing the pod's node name and the node name we expected the pod to be on: ``` framework.ExpectNoError(framework.WaitForPodNotPending(cs, ns, labelPodName)) labelPod, err := cs.Core().Pods(ns).Get(labelPodName, metav1.GetOptions{}) framework.ExpectNoError(err) Expect(labelPod.Spec.NodeName).To(Equal(nodeName)) ``` The `k8s.io/apimachinery/pkg/types/nodename` data structure actually [warns](https://github.com/kubernetes/kubernetes/blob/55bee3ad21f025b1416a4e1f10de753f484b66d3/staging/src/k8s.io/apimachinery/pkg/types/nodename.go#L40-L43) about the fact that the node name might be different than the hostname on AWS. **Release note**: ```release-note NONE ```
parents 144a4c2b d4db482a
...@@ -281,7 +281,6 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() { ...@@ -281,7 +281,6 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() {
createPausePod(f, pausePodConfig{ createPausePod(f, pausePodConfig{
Name: labelPodName, Name: labelPodName,
NodeSelector: map[string]string{ NodeSelector: map[string]string{
"kubernetes.io/hostname": nodeName,
k: v, k: v,
}, },
}) })
...@@ -361,10 +360,6 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() { ...@@ -361,10 +360,6 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() {
{ {
MatchExpressions: []v1.NodeSelectorRequirement{ MatchExpressions: []v1.NodeSelectorRequirement{
{ {
Key: "kubernetes.io/hostname",
Operator: v1.NodeSelectorOpIn,
Values: []string{nodeName},
}, {
Key: k, Key: k,
Operator: v1.NodeSelectorOpIn, Operator: v1.NodeSelectorOpIn,
Values: []string{v}, Values: []string{v},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment