diff --git a/cmd/kubeadm/app/phases/controlplane/BUILD b/cmd/kubeadm/app/phases/controlplane/BUILD index 4a3c9c8e1fb70..97ca9e06e5871 100644 --- a/cmd/kubeadm/app/phases/controlplane/BUILD +++ b/cmd/kubeadm/app/phases/controlplane/BUILD @@ -21,6 +21,7 @@ go_test( "//cmd/kubeadm/app/constants:go_default_library", "//pkg/util/version:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library", ], diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index 17e92ce64e5ca..ba861534468c7 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -166,6 +166,9 @@ func componentPod(container v1.Container, volumes []v1.Volume) v1.Pod { Name: container.Name, Namespace: metav1.NamespaceSystem, Annotations: map[string]string{kubetypes.CriticalPodAnnotationKey: ""}, + // The component and tier labels are useful for quickly identifying the control plane Pods when doing a .List() + // against Pods in the kube-system namespace. Can for example be used together with the WaitForPodsWithLabel function + Labels: map[string]string{"component": container.Name, "tier": "control-plane"}, }, Spec: v1.PodSpec{ Containers: []v1.Container{container}, diff --git a/cmd/kubeadm/app/phases/controlplane/manifests_test.go b/cmd/kubeadm/app/phases/controlplane/manifests_test.go index 25780b00c87c0..260dfc6b72ae8 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -26,6 +26,7 @@ import ( "testing" "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/yaml" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" @@ -179,22 +180,43 @@ func TestComponentProbe(t *testing.T) { func TestComponentPod(t *testing.T) { var tests = []struct { - n string + name string + expected v1.Pod }{ { - n: "foo", + name: "foo", + expected: v1.Pod{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Pod", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "kube-system", + Annotations: map[string]string{"scheduler.alpha.kubernetes.io/critical-pod": ""}, + Labels: map[string]string{"component": "foo", "tier": "control-plane"}, + }, + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + }, + }, + HostNetwork: true, + Volumes: []v1.Volume{}, + }, + }, }, } for _, rt := range tests { - c := v1.Container{Name: rt.n} - v := []v1.Volume{} - actual := componentPod(c, v) - if actual.ObjectMeta.Name != rt.n { + c := v1.Container{Name: rt.name} + actual := componentPod(c, []v1.Volume{}) + if !reflect.DeepEqual(rt.expected, actual) { t.Errorf( - "failed componentPod:\n\texpected: %s\n\t actual: %s", - rt.n, - actual.ObjectMeta.Name, + "failed componentPod:\n\texpected: %v\n\t actual: %v", + rt.expected, + actual, ) } }