kube-controller-manager: readjust log verbosity

- Increase the global level for broadcaster's logging to 3 so that users can ignore event messages by lowering the logging level. It reduces information noise.
- Making sure the context is properly injected into the broadcaster, this will allow the -v flag value to be used also in that broadcaster, rather than the above global value.
- test: use cancellation from ktesting
- golangci-hints: checked error return value
This commit is contained in:
Mengjiao Liu
2023-12-13 16:11:08 +08:00
parent 1b07df8845
commit b584b87a94
66 changed files with 770 additions and 649 deletions

View File

@@ -38,12 +38,12 @@ import (
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/retry"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/klog/v2/ktesting"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/controller/replication"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/test/integration/framework"
"k8s.io/kubernetes/test/utils/ktesting"
)
const (
@@ -111,7 +111,8 @@ func newMatchingPod(podName, namespace string) *v1.Pod {
}
}
func rmSetup(t *testing.T) (kubeapiservertesting.TearDownFunc, *replication.ReplicationManager, informers.SharedInformerFactory, clientset.Interface) {
func rmSetup(t *testing.T) (context.Context, kubeapiservertesting.TearDownFunc, *replication.ReplicationManager, informers.SharedInformerFactory, clientset.Interface) {
tCtx := ktesting.Init(t)
// Disable ServiceAccount admission plugin as we don't have serviceaccount controller running.
server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd())
@@ -123,16 +124,19 @@ func rmSetup(t *testing.T) (kubeapiservertesting.TearDownFunc, *replication.Repl
resyncPeriod := 12 * time.Hour
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "rc-informers")), resyncPeriod)
logger, _ := ktesting.NewTestContext(t)
rm := replication.NewReplicationManager(
logger,
tCtx,
informers.Core().V1().Pods(),
informers.Core().V1().ReplicationControllers(),
clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "replication-controller")),
replication.BurstReplicas,
)
newTeardown := func() {
tCtx.Cancel("tearing down controller")
server.TearDownFn()
}
return server.TearDownFn, rm, informers, clientSet
return tCtx, newTeardown, rm, informers, clientSet
}
// Run RC controller and informers
@@ -414,7 +418,7 @@ func TestAdoption(t *testing.T) {
}
for i, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
closeFn, rm, informers, clientSet := rmSetup(t)
tCtx, closeFn, rm, informers, clientSet := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(clientSet, fmt.Sprintf("rc-adoption-%d", i), t)
defer framework.DeleteNamespaceOrDie(clientSet, ns, t)
@@ -422,14 +426,14 @@ func TestAdoption(t *testing.T) {
rcClient := clientSet.CoreV1().ReplicationControllers(ns.Name)
podClient := clientSet.CoreV1().Pods(ns.Name)
const rcName = "rc"
rc, err := rcClient.Create(context.TODO(), newRC(rcName, ns.Name, 1), metav1.CreateOptions{})
rc, err := rcClient.Create(tCtx, newRC(rcName, ns.Name, 1), metav1.CreateOptions{})
if err != nil {
t.Fatalf("Failed to create replication controllers: %v", err)
}
podName := fmt.Sprintf("pod%d", i)
pod := newMatchingPod(podName, ns.Name)
pod.OwnerReferences = tc.existingOwnerReferences(rc)
_, err = podClient.Create(context.TODO(), pod, metav1.CreateOptions{})
_, err = podClient.Create(tCtx, pod, metav1.CreateOptions{})
if err != nil {
t.Fatalf("Failed to create Pod: %v", err)
}
@@ -437,7 +441,7 @@ func TestAdoption(t *testing.T) {
stopControllers := runControllerAndInformers(t, rm, informers, 1)
defer stopControllers()
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
updatedPod, err := podClient.Get(context.TODO(), pod.Name, metav1.GetOptions{})
updatedPod, err := podClient.Get(tCtx, pod.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
@@ -457,7 +461,7 @@ func TestAdoption(t *testing.T) {
}
func TestSpecReplicasChange(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-spec-replicas-change", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -488,7 +492,7 @@ func TestSpecReplicasChange(t *testing.T) {
}
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
newRC, err := rcClient.Get(context.TODO(), rc.Name, metav1.GetOptions{})
newRC, err := rcClient.Get(tCtx, rc.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
@@ -500,7 +504,7 @@ func TestSpecReplicasChange(t *testing.T) {
func TestLogarithmicScaleDown(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.LogarithmicScaleDown, true)()
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-spec-replicas-change", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -513,7 +517,7 @@ func TestLogarithmicScaleDown(t *testing.T) {
waitRCStable(t, c, rc)
// get list of pods in the cluster
pods, err := c.CoreV1().Pods(ns.Name).List(context.TODO(), metav1.ListOptions{})
pods, err := c.CoreV1().Pods(ns.Name).List(tCtx, metav1.ListOptions{})
if err != nil {
t.Fatalf("failed to get pods in namespace %s: %+v", ns.Name, err)
}
@@ -526,7 +530,7 @@ func TestLogarithmicScaleDown(t *testing.T) {
// (meaning the 3rd one was deleted)
scaleRC(t, c, rc, 2)
newPods, err := c.CoreV1().Pods(ns.Name).List(context.TODO(), metav1.ListOptions{})
newPods, err := c.CoreV1().Pods(ns.Name).List(tCtx, metav1.ListOptions{})
if err != nil {
t.Fatalf("failed to get pods in namespace %s: %+v", ns.Name, err)
}
@@ -537,7 +541,7 @@ func TestLogarithmicScaleDown(t *testing.T) {
}
func TestDeletingAndFailedPods(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-deleting-and-failed-pods", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -562,7 +566,7 @@ func TestDeletingAndFailedPods(t *testing.T) {
updatePod(t, podClient, deletingPod.Name, func(pod *v1.Pod) {
pod.Finalizers = []string{"fake.example.com/blockDeletion"}
})
if err := c.CoreV1().Pods(ns.Name).Delete(context.TODO(), deletingPod.Name, metav1.DeleteOptions{}); err != nil {
if err := c.CoreV1().Pods(ns.Name).Delete(tCtx, deletingPod.Name, metav1.DeleteOptions{}); err != nil {
t.Fatalf("Error deleting pod %s: %v", deletingPod.Name, err)
}
@@ -602,7 +606,7 @@ func TestDeletingAndFailedPods(t *testing.T) {
}
func TestOverlappingRCs(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-overlapping-rcs", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -626,7 +630,7 @@ func TestOverlappingRCs(t *testing.T) {
// Expect both RCs have .status.replicas = .spec.replicas
for i := 0; i < 2; i++ {
newRC, err := c.CoreV1().ReplicationControllers(ns.Name).Get(context.TODO(), fmt.Sprintf("rc-%d", i+1), metav1.GetOptions{})
newRC, err := c.CoreV1().ReplicationControllers(ns.Name).Get(tCtx, fmt.Sprintf("rc-%d", i+1), metav1.GetOptions{})
if err != nil {
t.Fatalf("failed to obtain rc rc-%d: %v", i+1, err)
}
@@ -637,7 +641,7 @@ func TestOverlappingRCs(t *testing.T) {
}
func TestPodOrphaningAndAdoptionWhenLabelsChange(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-pod-orphaning-and-adoption-when-labels-change", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -666,7 +670,7 @@ func TestPodOrphaningAndAdoptionWhenLabelsChange(t *testing.T) {
pod.Labels = newLabelMap
})
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
newPod, err := podClient.Get(context.TODO(), pod.Name, metav1.GetOptions{})
newPod, err := podClient.Get(tCtx, pod.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
@@ -681,7 +685,7 @@ func TestPodOrphaningAndAdoptionWhenLabelsChange(t *testing.T) {
pod.Labels = labelMap()
})
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
newPod, err := podClient.Get(context.TODO(), pod.Name, metav1.GetOptions{})
newPod, err := podClient.Get(tCtx, pod.Name, metav1.GetOptions{})
if err != nil {
// If the pod is not found, it means the RC picks the pod for deletion (it is extra)
// Verify there is only one pod in namespace and it has ControllerRef to the RC
@@ -715,7 +719,7 @@ func TestPodOrphaningAndAdoptionWhenLabelsChange(t *testing.T) {
}
func TestGeneralPodAdoption(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
_, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-general-pod-adoption", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -747,7 +751,7 @@ func TestGeneralPodAdoption(t *testing.T) {
}
func TestReadyAndAvailableReplicas(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-ready-and-available-replicas", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -787,7 +791,7 @@ func TestReadyAndAvailableReplicas(t *testing.T) {
rcClient := c.CoreV1().ReplicationControllers(ns.Name)
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
newRC, err := rcClient.Get(context.TODO(), rc.Name, metav1.GetOptions{})
newRC, err := rcClient.Get(tCtx, rc.Name, metav1.GetOptions{})
if err != nil {
return false, err
}
@@ -799,7 +803,7 @@ func TestReadyAndAvailableReplicas(t *testing.T) {
}
func TestRCScaleSubresource(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
_, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-rc-scale-subresource", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -818,7 +822,7 @@ func TestRCScaleSubresource(t *testing.T) {
}
func TestExtraPodsAdoptionAndDeletion(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
_, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-extra-pods-adoption-and-deletion", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -850,7 +854,7 @@ func TestExtraPodsAdoptionAndDeletion(t *testing.T) {
}
func TestFullyLabeledReplicas(t *testing.T) {
closeFn, rm, informers, c := rmSetup(t)
tCtx, closeFn, rm, informers, c := rmSetup(t)
defer closeFn()
ns := framework.CreateNamespaceOrDie(c, "test-fully-labeled-replicas", t)
defer framework.DeleteNamespaceOrDie(c, ns, t)
@@ -882,7 +886,7 @@ func TestFullyLabeledReplicas(t *testing.T) {
// Verify only one pod is fully labeled
if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
newRC, err := rcClient.Get(context.TODO(), rc.Name, metav1.GetOptions{})
newRC, err := rcClient.Get(tCtx, rc.Name, metav1.GetOptions{})
if err != nil {
return false, err
}