Executor user informer factory in executors in place of informers (#2666)
* Use informerfactory across executor * Run function informer for poolpodcontroller if istio enabled * Use same namespace for secret as keda mqtriggers Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
+6
-1
@@ -33,6 +33,7 @@ import (
|
|||||||
metricsclient "k8s.io/metrics/pkg/client/clientset/versioned"
|
metricsclient "k8s.io/metrics/pkg/client/clientset/versioned"
|
||||||
|
|
||||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||||
|
"github.com/fission/fission/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetKubernetesClient gets a kubernetes client using the kubeconfig file at the
|
// GetKubernetesClient gets a kubernetes client using the kubeconfig file at the
|
||||||
@@ -91,9 +92,13 @@ func MakeFissionClient() (versioned.Interface, kubernetes.Interface, apiextensio
|
|||||||
// WaitForCRDs does a timeout to check if CRDs have been installed
|
// WaitForCRDs does a timeout to check if CRDs have been installed
|
||||||
func WaitForCRDs(ctx context.Context, logger *zap.Logger, fissionClient versioned.Interface) error {
|
func WaitForCRDs(ctx context.Context, logger *zap.Logger, fissionClient versioned.Interface) error {
|
||||||
logger.Info("Waiting for CRDs to be installed")
|
logger.Info("Waiting for CRDs to be installed")
|
||||||
|
defaultNs := utils.DefaultNSResolver().DefaultNamespace
|
||||||
|
if defaultNs == "" {
|
||||||
|
defaultNs = metav1.NamespaceDefault
|
||||||
|
}
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
for {
|
for {
|
||||||
fi := fissionClient.CoreV1().Functions(metav1.NamespaceDefault)
|
fi := fissionClient.CoreV1().Functions(defaultNs)
|
||||||
_, err := fi.List(ctx, metav1.ListOptions{})
|
_, err := fi.List(ctx, metav1.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|||||||
+11
-22
@@ -42,7 +42,6 @@ import (
|
|||||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||||
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
"github.com/fission/fission/pkg/utils/metrics"
|
"github.com/fission/fission/pkg/utils/metrics"
|
||||||
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
||||||
@@ -276,13 +275,9 @@ func StartExecutor(ctx context.Context, logger *zap.Logger, port int) error {
|
|||||||
|
|
||||||
logger.Info("Starting executor", zap.String("instanceID", executorInstanceID))
|
logger.Info("Starting executor", zap.String("instanceID", executorInstanceID))
|
||||||
|
|
||||||
funcInformer := make(map[string]finformerv1.FunctionInformer, 0)
|
finformerFactory := make(map[string]genInformer.SharedInformerFactory, 0)
|
||||||
envInformer := make(map[string]finformerv1.EnvironmentInformer, 0)
|
|
||||||
|
|
||||||
for _, ns := range utils.DefaultNSResolver().FissionResourceNS {
|
for _, ns := range utils.DefaultNSResolver().FissionResourceNS {
|
||||||
factory := genInformer.NewFilteredSharedInformerFactory(fissionClient, time.Minute*30, ns, nil)
|
finformerFactory[ns] = genInformer.NewFilteredSharedInformerFactory(fissionClient, time.Minute*30, ns, nil)
|
||||||
funcInformer[ns] = factory.Core().V1().Functions()
|
|
||||||
envInformer[ns] = factory.Core().V1().Environments()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypePoolmgr)
|
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypePoolmgr)
|
||||||
@@ -294,7 +289,7 @@ func StartExecutor(ctx context.Context, logger *zap.Logger, port int) error {
|
|||||||
logger,
|
logger,
|
||||||
fissionClient, kubernetesClient, metricsClient,
|
fissionClient, kubernetesClient, metricsClient,
|
||||||
fetcherConfig, executorInstanceID,
|
fetcherConfig, executorInstanceID,
|
||||||
funcInformer, envInformer,
|
finformerFactory,
|
||||||
gpmInformerFactory, podSpecPatch)
|
gpmInformerFactory, podSpecPatch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "pool manager creation failed")
|
return errors.Wrap(err, "pool manager creation failed")
|
||||||
@@ -309,7 +304,7 @@ func StartExecutor(ctx context.Context, logger *zap.Logger, port int) error {
|
|||||||
logger,
|
logger,
|
||||||
fissionClient, kubernetesClient,
|
fissionClient, kubernetesClient,
|
||||||
fetcherConfig, executorInstanceID,
|
fetcherConfig, executorInstanceID,
|
||||||
funcInformer, envInformer,
|
finformerFactory,
|
||||||
ndmInformerFactory, podSpecPatch)
|
ndmInformerFactory, podSpecPatch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "new deploy manager creation failed")
|
return errors.Wrap(err, "new deploy manager creation failed")
|
||||||
@@ -323,7 +318,7 @@ func StartExecutor(ctx context.Context, logger *zap.Logger, port int) error {
|
|||||||
cnm, err := container.MakeContainer(
|
cnm, err := container.MakeContainer(
|
||||||
ctx, logger,
|
ctx, logger,
|
||||||
fissionClient, kubernetesClient,
|
fissionClient, kubernetesClient,
|
||||||
executorInstanceID, funcInformer,
|
executorInstanceID, finformerFactory,
|
||||||
cnmInformerFactory)
|
cnmInformerFactory)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "container manager creation failed")
|
return errors.Wrap(err, "container manager creation failed")
|
||||||
@@ -356,29 +351,23 @@ func StartExecutor(ctx context.Context, logger *zap.Logger, port int) error {
|
|||||||
cms := cms.MakeConfigSecretController(ctx, logger, fissionClient, kubernetesClient, executorTypes, configMapInformer, secretInformer)
|
cms := cms.MakeConfigSecretController(ctx, logger, fissionClient, kubernetesClient, executorTypes, configMapInformer, secretInformer)
|
||||||
|
|
||||||
fissionInformers := make([]k8sCache.SharedIndexInformer, 0)
|
fissionInformers := make([]k8sCache.SharedIndexInformer, 0)
|
||||||
for _, informer := range funcInformer {
|
|
||||||
fissionInformers = append(fissionInformers, informer.Informer())
|
|
||||||
}
|
|
||||||
for _, informer := range envInformer {
|
|
||||||
fissionInformers = append(fissionInformers, informer.Informer())
|
|
||||||
}
|
|
||||||
for _, informer := range configMapInformer {
|
for _, informer := range configMapInformer {
|
||||||
fissionInformers = append(fissionInformers, informer)
|
fissionInformers = append(fissionInformers, informer)
|
||||||
}
|
}
|
||||||
for _, informer := range secretInformer {
|
for _, informer := range secretInformer {
|
||||||
fissionInformers = append(fissionInformers, informer)
|
fissionInformers = append(fissionInformers, informer)
|
||||||
}
|
}
|
||||||
|
for _, factory := range finformerFactory {
|
||||||
|
factory.Start(ctx.Done())
|
||||||
|
}
|
||||||
for _, informerFactory := range gpmInformerFactory {
|
for _, informerFactory := range gpmInformerFactory {
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Core().V1().Pods().Informer())
|
informerFactory.Start(ctx.Done())
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Apps().V1().ReplicaSets().Informer())
|
|
||||||
}
|
}
|
||||||
for _, informerFactory := range ndmInformerFactory {
|
for _, informerFactory := range ndmInformerFactory {
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Apps().V1().Deployments().Informer())
|
informerFactory.Start(ctx.Done())
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Core().V1().Services().Informer())
|
|
||||||
}
|
}
|
||||||
for _, informerFactory := range cnmInformerFactory {
|
for _, informerFactory := range cnmInformerFactory {
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Apps().V1().Deployments().Informer())
|
informerFactory.Start(ctx.Done())
|
||||||
fissionInformers = append(fissionInformers, informerFactory.Core().V1().Services().Informer())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
api, err := MakeExecutor(ctx, logger, cms, fissionClient, executorTypes,
|
api, err := MakeExecutor(ctx, logger, cms, fissionClient, executorTypes,
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ import (
|
|||||||
executorUtils "github.com/fission/fission/pkg/executor/util"
|
executorUtils "github.com/fission/fission/pkg/executor/util"
|
||||||
hpautils "github.com/fission/fission/pkg/executor/util/hpa"
|
hpautils "github.com/fission/fission/pkg/executor/util/hpa"
|
||||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
"github.com/fission/fission/pkg/throttler"
|
"github.com/fission/fission/pkg/throttler"
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
"github.com/fission/fission/pkg/utils/maps"
|
"github.com/fission/fission/pkg/utils/maps"
|
||||||
@@ -98,7 +98,7 @@ func MakeContainer(
|
|||||||
fissionClient versioned.Interface,
|
fissionClient versioned.Interface,
|
||||||
kubernetesClient kubernetes.Interface,
|
kubernetesClient kubernetes.Interface,
|
||||||
instanceID string,
|
instanceID string,
|
||||||
funcInformer map[string]finformerv1.FunctionInformer,
|
finformerFactory map[string]genInformer.SharedInformerFactory,
|
||||||
cnmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
cnmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
||||||
) (executortype.ExecutorType, error) {
|
) (executortype.ExecutorType, error) {
|
||||||
enableIstio := false
|
enableIstio := false
|
||||||
@@ -139,8 +139,8 @@ func MakeContainer(
|
|||||||
caaf.svcLister[ns] = informerFactory.Core().V1().Services().Lister()
|
caaf.svcLister[ns] = informerFactory.Core().V1().Services().Lister()
|
||||||
caaf.svcListerSynced[ns] = informerFactory.Core().V1().Services().Informer().HasSynced
|
caaf.svcListerSynced[ns] = informerFactory.Core().V1().Services().Informer().HasSynced
|
||||||
}
|
}
|
||||||
for _, informer := range funcInformer {
|
for _, factory := range finformerFactory {
|
||||||
informer.Informer().AddEventHandler(caaf.FuncInformerHandler(ctx))
|
factory.Core().V1().Functions().Informer().AddEventHandler(caaf.FuncInformerHandler(ctx))
|
||||||
}
|
}
|
||||||
return caaf, nil
|
return caaf, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ import (
|
|||||||
hpautils "github.com/fission/fission/pkg/executor/util/hpa"
|
hpautils "github.com/fission/fission/pkg/executor/util/hpa"
|
||||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
"github.com/fission/fission/pkg/throttler"
|
"github.com/fission/fission/pkg/throttler"
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
"github.com/fission/fission/pkg/utils/maps"
|
"github.com/fission/fission/pkg/utils/maps"
|
||||||
@@ -103,8 +103,7 @@ func MakeNewDeploy(
|
|||||||
kubernetesClient kubernetes.Interface,
|
kubernetesClient kubernetes.Interface,
|
||||||
fetcherConfig *fetcherConfig.Config,
|
fetcherConfig *fetcherConfig.Config,
|
||||||
instanceID string,
|
instanceID string,
|
||||||
funcInformer map[string]finformerv1.FunctionInformer,
|
finformerFactory map[string]genInformer.SharedInformerFactory,
|
||||||
envInformer map[string]finformerv1.EnvironmentInformer,
|
|
||||||
ndmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
ndmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
||||||
podSpecPatch *apiv1.PodSpec,
|
podSpecPatch *apiv1.PodSpec,
|
||||||
) (executortype.ExecutorType, error) {
|
) (executortype.ExecutorType, error) {
|
||||||
@@ -148,11 +147,11 @@ func MakeNewDeploy(
|
|||||||
nd.svcLister[ns] = informerFactory.Core().V1().Services().Lister()
|
nd.svcLister[ns] = informerFactory.Core().V1().Services().Lister()
|
||||||
nd.svcListerSynced[ns] = informerFactory.Core().V1().Services().Informer().HasSynced
|
nd.svcListerSynced[ns] = informerFactory.Core().V1().Services().Informer().HasSynced
|
||||||
}
|
}
|
||||||
for _, fnInformer := range funcInformer {
|
for _, factory := range finformerFactory {
|
||||||
fnInformer.Informer().AddEventHandler(nd.FunctionEventHandlers(ctx))
|
factory.Core().V1().Functions().Informer().AddEventHandler(nd.FunctionEventHandlers(ctx))
|
||||||
}
|
}
|
||||||
for _, envInformer := range envInformer {
|
for _, factory := range finformerFactory {
|
||||||
envInformer.Informer().AddEventHandler(nd.EnvEventHandlers(ctx))
|
factory.Core().V1().Environments().Informer().AddEventHandler(nd.EnvEventHandlers(ctx))
|
||||||
}
|
}
|
||||||
return nd, nil
|
return nd, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import (
|
|||||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||||
fClient "github.com/fission/fission/pkg/generated/clientset/versioned/fake"
|
fClient "github.com/fission/fission/pkg/generated/clientset/versioned/fake"
|
||||||
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
"github.com/fission/fission/pkg/utils/loggerfactory"
|
"github.com/fission/fission/pkg/utils/loggerfactory"
|
||||||
)
|
)
|
||||||
@@ -35,25 +34,13 @@ const (
|
|||||||
configmapName string = "newdeploy-test-configmap"
|
configmapName string = "newdeploy-test-configmap"
|
||||||
)
|
)
|
||||||
|
|
||||||
func runInformers(ctx context.Context, informers []k8sCache.SharedIndexInformer) {
|
|
||||||
// Run all informers
|
|
||||||
for _, informer := range informers {
|
|
||||||
go informer.Run(ctx.Done())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRefreshFuncPods(t *testing.T) {
|
func TestRefreshFuncPods(t *testing.T) {
|
||||||
os.Setenv("DEBUG_ENV", "true")
|
os.Setenv("DEBUG_ENV", "true")
|
||||||
logger := loggerfactory.GetLogger()
|
logger := loggerfactory.GetLogger()
|
||||||
kubernetesClient := fake.NewSimpleClientset()
|
kubernetesClient := fake.NewSimpleClientset()
|
||||||
fissionClient := fClient.NewSimpleClientset()
|
fissionClient := fClient.NewSimpleClientset()
|
||||||
informerFactory := genInformer.NewSharedInformerFactory(fissionClient, time.Minute*30)
|
factory := make(map[string]genInformer.SharedInformerFactory, 0)
|
||||||
funcInformer := map[string]finformerv1.FunctionInformer{
|
factory[metav1.NamespaceAll] = genInformer.NewSharedInformerFactory(fissionClient, time.Minute*30)
|
||||||
metav1.NamespaceAll: informerFactory.Core().V1().Functions(),
|
|
||||||
}
|
|
||||||
envInformer := map[string]finformerv1.EnvironmentInformer{
|
|
||||||
metav1.NamespaceAll: informerFactory.Core().V1().Environments(),
|
|
||||||
}
|
|
||||||
|
|
||||||
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypeNewdeploy)
|
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypeNewdeploy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -70,7 +57,7 @@ func TestRefreshFuncPods(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
executor, err := MakeNewDeploy(ctx, logger, fissionClient, kubernetesClient, fetcherConfig, "test",
|
executor, err := MakeNewDeploy(ctx, logger, fissionClient, kubernetesClient, fetcherConfig, "test",
|
||||||
funcInformer, envInformer, ndmInformerFactory, nil)
|
factory, ndmInformerFactory, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("new deploy manager creation failed: %s", err)
|
t.Fatalf("new deploy manager creation failed: %s", err)
|
||||||
}
|
}
|
||||||
@@ -87,16 +74,13 @@ func TestRefreshFuncPods(t *testing.T) {
|
|||||||
go ndm.Run(ctx)
|
go ndm.Run(ctx)
|
||||||
t.Log("New deploy manager started")
|
t.Log("New deploy manager started")
|
||||||
|
|
||||||
informer := []k8sCache.SharedIndexInformer{
|
for _, f := range factory {
|
||||||
envInformer[metav1.NamespaceAll].Informer(),
|
f.Start(ctx.Done())
|
||||||
funcInformer[metav1.NamespaceAll].Informer(),
|
|
||||||
}
|
}
|
||||||
for _, informerFactory := range ndmInformerFactory {
|
for _, informerFactory := range ndmInformerFactory {
|
||||||
informer = append(informer, informerFactory.Apps().V1().Deployments().Informer())
|
informerFactory.Start(ctx.Done())
|
||||||
informer = append(informer, informerFactory.Core().V1().Services().Informer())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runInformers(ctx, informer)
|
|
||||||
t.Log("Informers required for new deploy manager started")
|
t.Log("Informers required for new deploy manager started")
|
||||||
|
|
||||||
waitSynced := make([]k8sCache.InformerSynced, 0)
|
waitSynced := make([]k8sCache.InformerSynced, 0)
|
||||||
|
|||||||
@@ -59,12 +59,6 @@ func FunctionEventHandlers(ctx context.Context, logger *zap.Logger, kubernetesCl
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// create or update role-binding
|
|
||||||
envNs := fissionfnNamespace
|
|
||||||
if fn.Spec.Environment.Namespace != metav1.NamespaceDefault {
|
|
||||||
envNs = fn.Spec.Environment.Namespace
|
|
||||||
}
|
|
||||||
|
|
||||||
if istioEnabled {
|
if istioEnabled {
|
||||||
// create a same name service for function
|
// create a same name service for function
|
||||||
// since istio only allows the traffic to service
|
// since istio only allows the traffic to service
|
||||||
@@ -74,6 +68,7 @@ func FunctionEventHandlers(ctx context.Context, logger *zap.Logger, kubernetesCl
|
|||||||
}
|
}
|
||||||
|
|
||||||
svcName := utils.GetFunctionIstioServiceName(fn.ObjectMeta.Name, fn.ObjectMeta.Namespace)
|
svcName := utils.GetFunctionIstioServiceName(fn.ObjectMeta.Name, fn.ObjectMeta.Namespace)
|
||||||
|
envNs := utils.DefaultNSResolver().GetFunctionNS(fn.Spec.Environment.Namespace)
|
||||||
|
|
||||||
// service for accepting user traffic
|
// service for accepting user traffic
|
||||||
svc := apiv1.Service{
|
svc := apiv1.Service{
|
||||||
@@ -124,12 +119,9 @@ func FunctionEventHandlers(ctx context.Context, logger *zap.Logger, kubernetesCl
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
envNs := fissionfnNamespace
|
|
||||||
if fn.Spec.Environment.Namespace != metav1.NamespaceDefault {
|
|
||||||
envNs = fn.Spec.Environment.Namespace
|
|
||||||
}
|
|
||||||
|
|
||||||
if istioEnabled {
|
if istioEnabled {
|
||||||
|
envNs := utils.DefaultNSResolver().GetFunctionNS(fn.Spec.Environment.Namespace)
|
||||||
|
|
||||||
svcName := utils.GetFunctionIstioServiceName(fn.ObjectMeta.Name, fn.ObjectMeta.Namespace)
|
svcName := utils.GetFunctionIstioServiceName(fn.ObjectMeta.Name, fn.ObjectMeta.Namespace)
|
||||||
// delete function istio service
|
// delete function istio service
|
||||||
err := kubernetesClient.CoreV1().Services(envNs).Delete(ctx, svcName, metav1.DeleteOptions{})
|
err := kubernetesClient.CoreV1().Services(envNs).Delete(ctx, svcName, metav1.DeleteOptions{})
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import (
|
|||||||
executorUtils "github.com/fission/fission/pkg/executor/util"
|
executorUtils "github.com/fission/fission/pkg/executor/util"
|
||||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
||||||
)
|
)
|
||||||
@@ -117,8 +117,7 @@ func MakeGenericPoolManager(ctx context.Context,
|
|||||||
metricsClient metricsclient.Interface,
|
metricsClient metricsclient.Interface,
|
||||||
fetcherConfig *fetcherConfig.Config,
|
fetcherConfig *fetcherConfig.Config,
|
||||||
instanceID string,
|
instanceID string,
|
||||||
funcInformer map[string]finformerv1.FunctionInformer,
|
finformerFactory map[string]genInformer.SharedInformerFactory,
|
||||||
envInformer map[string]finformerv1.EnvironmentInformer,
|
|
||||||
gpmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
gpmInformerFactory map[string]k8sInformers.SharedInformerFactory,
|
||||||
podSpecPatch *apiv1.PodSpec,
|
podSpecPatch *apiv1.PodSpec,
|
||||||
) (executortype.ExecutorType, error) {
|
) (executortype.ExecutorType, error) {
|
||||||
@@ -135,7 +134,7 @@ func MakeGenericPoolManager(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
poolPodC := NewPoolPodController(ctx, gpmLogger, kubernetesClient,
|
poolPodC := NewPoolPodController(ctx, gpmLogger, kubernetesClient,
|
||||||
enableIstio, funcInformer, envInformer, gpmInformerFactory)
|
enableIstio, finformerFactory, gpmInformerFactory)
|
||||||
|
|
||||||
gpm := &GenericPoolManager{
|
gpm := &GenericPoolManager{
|
||||||
logger: gpmLogger,
|
logger: gpmLogger,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import (
|
|||||||
|
|
||||||
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||||
"github.com/fission/fission/pkg/executor/fscache"
|
"github.com/fission/fission/pkg/executor/fscache"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
flisterv1 "github.com/fission/fission/pkg/generated/listers/core/v1"
|
flisterv1 "github.com/fission/fission/pkg/generated/listers/core/v1"
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
)
|
)
|
||||||
@@ -70,8 +70,7 @@ type (
|
|||||||
func NewPoolPodController(ctx context.Context, logger *zap.Logger,
|
func NewPoolPodController(ctx context.Context, logger *zap.Logger,
|
||||||
kubernetesClient kubernetes.Interface,
|
kubernetesClient kubernetes.Interface,
|
||||||
enableIstio bool,
|
enableIstio bool,
|
||||||
funcInformer map[string]finformerv1.FunctionInformer,
|
finformerFactory map[string]genInformer.SharedInformerFactory,
|
||||||
envInformer map[string]finformerv1.EnvironmentInformer,
|
|
||||||
gpmInformerFactory map[string]k8sInformers.SharedInformerFactory) *PoolPodController {
|
gpmInformerFactory map[string]k8sInformers.SharedInformerFactory) *PoolPodController {
|
||||||
logger = logger.Named("pool_pod_controller")
|
logger = logger.Named("pool_pod_controller")
|
||||||
p := &PoolPodController{
|
p := &PoolPodController{
|
||||||
@@ -87,17 +86,19 @@ func NewPoolPodController(ctx context.Context, logger *zap.Logger,
|
|||||||
envDeleteQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "EnvDeleteQueue"),
|
envDeleteQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "EnvDeleteQueue"),
|
||||||
spCleanupPodQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "SpecializedPodCleanupQueue"),
|
spCleanupPodQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "SpecializedPodCleanupQueue"),
|
||||||
}
|
}
|
||||||
for _, informer := range funcInformer {
|
if p.enableIstio {
|
||||||
informer.Informer().AddEventHandler(FunctionEventHandlers(ctx, p.logger, p.kubernetesClient, p.nsResolver.ResolveNamespace(p.nsResolver.FunctionNamespace), p.enableIstio))
|
for _, factory := range finformerFactory {
|
||||||
|
factory.Core().V1().Functions().Informer().AddEventHandler(FunctionEventHandlers(ctx, p.logger, p.kubernetesClient, p.nsResolver.ResolveNamespace(p.nsResolver.FunctionNamespace), p.enableIstio))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for ns, informer := range envInformer {
|
for ns, informer := range finformerFactory {
|
||||||
informer.Informer().AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
informer.Core().V1().Environments().Informer().AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: p.enqueueEnvAdd,
|
AddFunc: p.enqueueEnvAdd,
|
||||||
UpdateFunc: p.enqueueEnvUpdate,
|
UpdateFunc: p.enqueueEnvUpdate,
|
||||||
DeleteFunc: p.enqueueEnvDelete,
|
DeleteFunc: p.enqueueEnvDelete,
|
||||||
})
|
})
|
||||||
p.envLister[ns] = informer.Lister()
|
p.envLister[ns] = informer.Core().V1().Environments().Lister()
|
||||||
p.envListerSynced[ns] = informer.Informer().HasSynced
|
p.envListerSynced[ns] = informer.Core().V1().Environments().Informer().HasSynced
|
||||||
}
|
}
|
||||||
for ns, informerFactory := range gpmInformerFactory {
|
for ns, informerFactory := range gpmInformerFactory {
|
||||||
informerFactory.Apps().V1().ReplicaSets().Informer().AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
informerFactory.Apps().V1().ReplicaSets().Informer().AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
||||||
@@ -105,8 +106,8 @@ func NewPoolPodController(ctx context.Context, logger *zap.Logger,
|
|||||||
UpdateFunc: p.handleRSUpdate,
|
UpdateFunc: p.handleRSUpdate,
|
||||||
DeleteFunc: p.handleRSDelete,
|
DeleteFunc: p.handleRSDelete,
|
||||||
})
|
})
|
||||||
p.podLister[ns] = informerFactory.Core().V1().Pods().Lister()
|
|
||||||
p.podListerSynced[ns] = informerFactory.Core().V1().Pods().Informer().HasSynced
|
p.podListerSynced[ns] = informerFactory.Core().V1().Pods().Informer().HasSynced
|
||||||
|
p.podLister[ns] = informerFactory.Core().V1().Pods().Lister()
|
||||||
}
|
}
|
||||||
|
|
||||||
p.logger.Info("pool pod controller handlers registered")
|
p.logger.Info("pool pod controller handlers registered")
|
||||||
|
|||||||
@@ -32,34 +32,18 @@ import (
|
|||||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||||
fClient "github.com/fission/fission/pkg/generated/clientset/versioned/fake"
|
fClient "github.com/fission/fission/pkg/generated/clientset/versioned/fake"
|
||||||
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||||
finformerv1 "github.com/fission/fission/pkg/generated/informers/externalversions/core/v1"
|
|
||||||
"github.com/fission/fission/pkg/utils"
|
"github.com/fission/fission/pkg/utils"
|
||||||
"github.com/fission/fission/pkg/utils/loggerfactory"
|
"github.com/fission/fission/pkg/utils/loggerfactory"
|
||||||
)
|
)
|
||||||
|
|
||||||
func runInformers(ctx context.Context, informers []k8sCache.SharedIndexInformer) {
|
|
||||||
// Run all informers
|
|
||||||
for _, informer := range informers {
|
|
||||||
go informer.Run(ctx.Done())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPoolPodControllerPodCleanup(t *testing.T) {
|
func TestPoolPodControllerPodCleanup(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
logger := loggerfactory.GetLogger()
|
logger := loggerfactory.GetLogger()
|
||||||
kubernetesClient := fake.NewSimpleClientset()
|
kubernetesClient := fake.NewSimpleClientset()
|
||||||
fissionClient := fClient.NewSimpleClientset()
|
fissionClient := fClient.NewSimpleClientset()
|
||||||
informerFactory := genInformer.NewSharedInformerFactory(fissionClient, time.Minute*30)
|
factory := make(map[string]genInformer.SharedInformerFactory, 0)
|
||||||
funcInformer := map[string]finformerv1.FunctionInformer{
|
factory[metav1.NamespaceDefault] = genInformer.NewFilteredSharedInformerFactory(fissionClient, time.Minute*30, metav1.NamespaceDefault, nil)
|
||||||
metav1.NamespaceAll: informerFactory.Core().V1().Functions(),
|
|
||||||
}
|
|
||||||
pkgInformer := map[string]finformerv1.PackageInformer{
|
|
||||||
metav1.NamespaceAll: informerFactory.Core().V1().Packages(),
|
|
||||||
}
|
|
||||||
envInformer := map[string]finformerv1.EnvironmentInformer{
|
|
||||||
metav1.NamespaceAll: informerFactory.Core().V1().Environments(),
|
|
||||||
}
|
|
||||||
|
|
||||||
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypePoolmgr)
|
executorLabel, err := utils.GetInformerLabelByExecutor(fv1.ExecutorTypePoolmgr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -68,9 +52,7 @@ func TestPoolPodControllerPodCleanup(t *testing.T) {
|
|||||||
gpmInformerFactory := utils.GetInformerFactoryByExecutor(kubernetesClient, executorLabel, time.Minute*30)
|
gpmInformerFactory := utils.GetInformerFactoryByExecutor(kubernetesClient, executorLabel, time.Minute*30)
|
||||||
|
|
||||||
ppc := NewPoolPodController(ctx, logger, kubernetesClient, false,
|
ppc := NewPoolPodController(ctx, logger, kubernetesClient, false,
|
||||||
funcInformer,
|
factory, gpmInformerFactory)
|
||||||
envInformer,
|
|
||||||
gpmInformerFactory)
|
|
||||||
|
|
||||||
executorInstanceID := strings.ToLower(uniuri.NewLen(8))
|
executorInstanceID := strings.ToLower(uniuri.NewLen(8))
|
||||||
metricsClient := metricsclient.NewSimpleClientset()
|
metricsClient := metricsclient.NewSimpleClientset()
|
||||||
@@ -82,8 +64,7 @@ func TestPoolPodControllerPodCleanup(t *testing.T) {
|
|||||||
logger,
|
logger,
|
||||||
fissionClient, kubernetesClient, metricsClient,
|
fissionClient, kubernetesClient, metricsClient,
|
||||||
fetcherConfig, executorInstanceID,
|
fetcherConfig, executorInstanceID,
|
||||||
funcInformer, envInformer,
|
factory, gpmInformerFactory, nil)
|
||||||
gpmInformerFactory, nil)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error creating generic pool manager: %v", err)
|
t.Fatalf("Error creating generic pool manager: %v", err)
|
||||||
}
|
}
|
||||||
@@ -92,23 +73,18 @@ func TestPoolPodControllerPodCleanup(t *testing.T) {
|
|||||||
|
|
||||||
go ppc.Run(ctx, ctx.Done())
|
go ppc.Run(ctx, ctx.Done())
|
||||||
|
|
||||||
informers := []k8sCache.SharedIndexInformer{
|
for _, f := range factory {
|
||||||
funcInformer[metav1.NamespaceAll].Informer(),
|
f.Start(ctx.Done())
|
||||||
pkgInformer[metav1.NamespaceAll].Informer(),
|
|
||||||
envInformer[metav1.NamespaceAll].Informer(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, informerFactory := range gpmInformerFactory {
|
for _, informerFactory := range gpmInformerFactory {
|
||||||
informers = append(informers, informerFactory.Core().V1().Pods().Informer())
|
informerFactory.Start(ctx.Done())
|
||||||
informers = append(informers, informerFactory.Apps().V1().ReplicaSets().Informer())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runInformers(ctx, informers)
|
|
||||||
|
|
||||||
pod := &corev1.Pod{
|
pod := &corev1.Pod{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "test-pod",
|
Name: "test-pod",
|
||||||
Namespace: "test-different-namespace",
|
Namespace: metav1.NamespaceDefault,
|
||||||
},
|
},
|
||||||
Status: corev1.PodStatus{
|
Status: corev1.PodStatus{
|
||||||
Phase: corev1.PodRunning,
|
Phase: corev1.PodRunning,
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ func getEnvVarlist(ctx context.Context, mqt *fv1.MessageQueueTrigger, routerURL
|
|||||||
// Add Auth Fields
|
// Add Auth Fields
|
||||||
secretName := mqt.Spec.Secret
|
secretName := mqt.Spec.Secret
|
||||||
if len(secretName) > 0 {
|
if len(secretName) > 0 {
|
||||||
secret, err := kubeClient.CoreV1().Secrets(apiv1.NamespaceDefault).Get(ctx, secretName, metav1.GetOptions{})
|
secret, err := kubeClient.CoreV1().Secrets(mqt.Namespace).Get(ctx, secretName, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -304,7 +304,7 @@ func checkAndUpdateTriggerFields(mqt, newMqt *fv1.MessageQueueTrigger) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getAuthTriggerSpec(ctx context.Context, mqt *fv1.MessageQueueTrigger, authenticationRef string, kubeClient kubernetes.Interface) (*unstructured.Unstructured, error) {
|
func getAuthTriggerSpec(ctx context.Context, mqt *fv1.MessageQueueTrigger, authenticationRef string, kubeClient kubernetes.Interface) (*unstructured.Unstructured, error) {
|
||||||
secret, err := kubeClient.CoreV1().Secrets(apiv1.NamespaceDefault).Get(ctx, mqt.Spec.Secret, metav1.GetOptions{})
|
secret, err := kubeClient.CoreV1().Secrets(mqt.Namespace).Get(ctx, mqt.Spec.Secret, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user