mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Clean shutdown of statefulset integration tests
This commit is contained in:
parent
aee829abf4
commit
5073506aa7
@ -37,6 +37,7 @@ import (
|
|||||||
apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
|
apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/controller/statefulset"
|
"k8s.io/kubernetes/pkg/controller/statefulset"
|
||||||
|
"k8s.io/kubernetes/pkg/controlplane"
|
||||||
"k8s.io/kubernetes/pkg/features"
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/test/integration/framework"
|
"k8s.io/kubernetes/test/integration/framework"
|
||||||
)
|
)
|
||||||
@ -49,10 +50,7 @@ const (
|
|||||||
// TestVolumeTemplateNoopUpdate ensures embedded StatefulSet objects with embedded PersistentVolumes can be updated
|
// TestVolumeTemplateNoopUpdate ensures embedded StatefulSet objects with embedded PersistentVolumes can be updated
|
||||||
func TestVolumeTemplateNoopUpdate(t *testing.T) {
|
func TestVolumeTemplateNoopUpdate(t *testing.T) {
|
||||||
// Start the server with default storage setup
|
// Start the server with default storage setup
|
||||||
server, err := apiservertesting.StartTestServer(t, apiservertesting.NewDefaultTestServerOptions(), nil, framework.SharedEtcd())
|
server := apiservertesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd())
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer server.TearDownFn()
|
defer server.TearDownFn()
|
||||||
|
|
||||||
c, err := dynamic.NewForConfig(server.ClientConfig)
|
c, err := dynamic.NewForConfig(server.ClientConfig)
|
||||||
@ -125,8 +123,8 @@ func TestVolumeTemplateNoopUpdate(t *testing.T) {
|
|||||||
func TestSpecReplicasChange(t *testing.T) {
|
func TestSpecReplicasChange(t *testing.T) {
|
||||||
closeFn, rm, informers, c := scSetup(t)
|
closeFn, rm, informers, c := scSetup(t)
|
||||||
defer closeFn()
|
defer closeFn()
|
||||||
ns := framework.CreateTestingNamespace("test-spec-replicas-change", t)
|
ns := framework.CreateNamespaceOrDie(c, "test-spec-replicas-change", t)
|
||||||
defer framework.DeleteTestingNamespace(ns, t)
|
defer framework.DeleteNamespaceOrDie(c, ns, t)
|
||||||
cancel := runControllerAndInformers(rm, informers)
|
cancel := runControllerAndInformers(rm, informers)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@ -168,8 +166,8 @@ func TestSpecReplicasChange(t *testing.T) {
|
|||||||
func TestDeletingAndFailedPods(t *testing.T) {
|
func TestDeletingAndFailedPods(t *testing.T) {
|
||||||
closeFn, rm, informers, c := scSetup(t)
|
closeFn, rm, informers, c := scSetup(t)
|
||||||
defer closeFn()
|
defer closeFn()
|
||||||
ns := framework.CreateTestingNamespace("test-deleting-and-failed-pods", t)
|
ns := framework.CreateNamespaceOrDie(c, "test-deleting-and-failed-pods", t)
|
||||||
defer framework.DeleteTestingNamespace(ns, t)
|
defer framework.DeleteNamespaceOrDie(c, ns, t)
|
||||||
cancel := runControllerAndInformers(rm, informers)
|
cancel := runControllerAndInformers(rm, informers)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@ -269,8 +267,8 @@ func TestStatefulSetAvailable(t *testing.T) {
|
|||||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetMinReadySeconds, test.enabled)()
|
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetMinReadySeconds, test.enabled)()
|
||||||
closeFn, rm, informers, c := scSetup(t)
|
closeFn, rm, informers, c := scSetup(t)
|
||||||
defer closeFn()
|
defer closeFn()
|
||||||
ns := framework.CreateTestingNamespace("test-available-pods", t)
|
ns := framework.CreateNamespaceOrDie(c, "test-available-pods", t)
|
||||||
defer framework.DeleteTestingNamespace(ns, t)
|
defer framework.DeleteNamespaceOrDie(c, ns, t)
|
||||||
cancel := runControllerAndInformers(rm, informers)
|
cancel := runControllerAndInformers(rm, informers)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@ -358,31 +356,28 @@ func setPodsReadyCondition(t *testing.T, clientSet clientset.Interface, pods *v1
|
|||||||
// add for issue: https://github.com/kubernetes/kubernetes/issues/108837
|
// add for issue: https://github.com/kubernetes/kubernetes/issues/108837
|
||||||
func TestStatefulSetStatusWithPodFail(t *testing.T) {
|
func TestStatefulSetStatusWithPodFail(t *testing.T) {
|
||||||
limitedPodNumber := 2
|
limitedPodNumber := 2
|
||||||
controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig()
|
c, config, closeFn := framework.StartTestServer(t, framework.TestServerSetup{
|
||||||
controlPlaneConfig.GenericConfig.AdmissionControl = &fakePodFailAdmission{
|
ModifyServerConfig: func(config *controlplane.Config) {
|
||||||
limitedPodNumber: limitedPodNumber,
|
config.GenericConfig.AdmissionControl = &fakePodFailAdmission{
|
||||||
}
|
limitedPodNumber: limitedPodNumber,
|
||||||
_, s, closeFn := framework.RunAnAPIServer(controlPlaneConfig)
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
defer closeFn()
|
defer closeFn()
|
||||||
|
|
||||||
config := restclient.Config{Host: s.URL}
|
|
||||||
c, err := clientset.NewForConfig(&config)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Could not create clientset: %v", err)
|
|
||||||
}
|
|
||||||
resyncPeriod := 12 * time.Hour
|
resyncPeriod := 12 * time.Hour
|
||||||
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-informers")), resyncPeriod)
|
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-informers")), resyncPeriod)
|
||||||
|
|
||||||
ssc := statefulset.NewStatefulSetController(
|
ssc := statefulset.NewStatefulSetController(
|
||||||
informers.Core().V1().Pods(),
|
informers.Core().V1().Pods(),
|
||||||
informers.Apps().V1().StatefulSets(),
|
informers.Apps().V1().StatefulSets(),
|
||||||
informers.Core().V1().PersistentVolumeClaims(),
|
informers.Core().V1().PersistentVolumeClaims(),
|
||||||
informers.Apps().V1().ControllerRevisions(),
|
informers.Apps().V1().ControllerRevisions(),
|
||||||
clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-controller")),
|
||||||
)
|
)
|
||||||
|
|
||||||
ns := framework.CreateTestingNamespace("test-pod-fail", t)
|
ns := framework.CreateNamespaceOrDie(c, "test-pod-fail", t)
|
||||||
defer framework.DeleteTestingNamespace(ns, t)
|
defer framework.DeleteNamespaceOrDie(c, ns, t)
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
@ -390,7 +385,7 @@ func TestStatefulSetStatusWithPodFail(t *testing.T) {
|
|||||||
go ssc.Run(ctx, 5)
|
go ssc.Run(ctx, 5)
|
||||||
|
|
||||||
sts := newSTS("sts", ns.Name, 4)
|
sts := newSTS("sts", ns.Name, 4)
|
||||||
_, err = c.AppsV1().StatefulSets(sts.Namespace).Create(context.TODO(), sts, metav1.CreateOptions{})
|
_, err := c.AppsV1().StatefulSets(sts.Namespace).Create(context.TODO(), sts, metav1.CreateOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Could not create statefuleSet %s: %v", sts.Name, err)
|
t.Fatalf("Could not create statefuleSet %s: %v", sts.Name, err)
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ import (
|
|||||||
typedv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
typedv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/util/retry"
|
"k8s.io/client-go/util/retry"
|
||||||
|
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
|
|
||||||
//svc "k8s.io/kubernetes/pkg/api/v1/service"
|
//svc "k8s.io/kubernetes/pkg/api/v1/service"
|
||||||
@ -159,27 +160,27 @@ func newStatefulSetPVC(name string) v1.PersistentVolumeClaim {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scSetup sets up necessities for Statefulset integration test, including control plane, apiserver, informers, and clientset
|
// scSetup sets up necessities for Statefulset integration test, including control plane, apiserver, informers, and clientset
|
||||||
func scSetup(t *testing.T) (framework.CloseFunc, *statefulset.StatefulSetController, informers.SharedInformerFactory, clientset.Interface) {
|
func scSetup(t *testing.T) (kubeapiservertesting.TearDownFunc, *statefulset.StatefulSetController, informers.SharedInformerFactory, clientset.Interface) {
|
||||||
controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig()
|
// Disable ServiceAccount admission plugin as we don't have serviceaccount controller running.
|
||||||
_, s, closeFn := framework.RunAnAPIServer(controlPlaneConfig)
|
server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd())
|
||||||
|
|
||||||
config := restclient.Config{Host: s.URL}
|
config := restclient.CopyConfig(server.ClientConfig)
|
||||||
clientSet, err := clientset.NewForConfig(&config)
|
clientSet, err := clientset.NewForConfig(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error in create clientset: %v", err)
|
t.Fatalf("error in create clientset: %v", err)
|
||||||
}
|
}
|
||||||
resyncPeriod := 12 * time.Hour
|
resyncPeriod := 12 * time.Hour
|
||||||
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-informers")), resyncPeriod)
|
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-informers")), resyncPeriod)
|
||||||
|
|
||||||
sc := statefulset.NewStatefulSetController(
|
sc := statefulset.NewStatefulSetController(
|
||||||
informers.Core().V1().Pods(),
|
informers.Core().V1().Pods(),
|
||||||
informers.Apps().V1().StatefulSets(),
|
informers.Apps().V1().StatefulSets(),
|
||||||
informers.Core().V1().PersistentVolumeClaims(),
|
informers.Core().V1().PersistentVolumeClaims(),
|
||||||
informers.Apps().V1().ControllerRevisions(),
|
informers.Apps().V1().ControllerRevisions(),
|
||||||
clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-controller")),
|
||||||
)
|
)
|
||||||
|
|
||||||
return closeFn, sc, informers, clientSet
|
return server.TearDownFn, sc, informers, clientSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run STS controller and informers
|
// Run STS controller and informers
|
||||||
|
Loading…
Reference in New Issue
Block a user