Replace controller with generated SharedIndexerInformers (#2103)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
+35
-39
@@ -27,9 +27,7 @@ import (
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
k8sInformers "k8s.io/client-go/informers"
|
||||
k8sCache "k8s.io/client-go/tools/cache"
|
||||
|
||||
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||
@@ -44,40 +42,36 @@ const (
|
||||
fissionSymlinkPath = "/var/log/fission"
|
||||
)
|
||||
|
||||
func makePodLoggerController(zapLogger *zap.Logger, k8sClientSet *kubernetes.Clientset) k8sCache.Controller {
|
||||
resyncPeriod := 30 * time.Second
|
||||
lw := k8sCache.NewListWatchFromClient(k8sClientSet.CoreV1().RESTClient(), "pods", metav1.NamespaceAll, fields.Everything())
|
||||
_, controller := k8sCache.NewInformer(lw, &corev1.Pod{}, resyncPeriod,
|
||||
k8sCache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
pod := obj.(*corev1.Pod)
|
||||
if !isValidFunctionPodOnNode(pod) || !utils.IsReadyPod(pod) {
|
||||
return
|
||||
}
|
||||
err := createLogSymlinks(zapLogger, pod)
|
||||
if err != nil {
|
||||
funcName := pod.Labels[fv1.FUNCTION_NAME]
|
||||
zapLogger.Error("error creating symlink",
|
||||
zap.String("function", funcName), zap.Error(err))
|
||||
}
|
||||
},
|
||||
UpdateFunc: func(_, obj interface{}) {
|
||||
pod := obj.(*corev1.Pod)
|
||||
if !isValidFunctionPodOnNode(pod) || !utils.IsReadyPod(pod) {
|
||||
return
|
||||
}
|
||||
err := createLogSymlinks(zapLogger, pod)
|
||||
if err != nil {
|
||||
funcName := pod.Labels[fv1.FUNCTION_NAME]
|
||||
zapLogger.Error("error creating symlink",
|
||||
zap.String("function", funcName), zap.Error(err))
|
||||
}
|
||||
},
|
||||
DeleteFunc: func(obj interface{}) {
|
||||
// Do nothing here, let symlink reaper to recycle orphan symlink file
|
||||
},
|
||||
})
|
||||
return controller
|
||||
func podInformerHandlers(zapLogger *zap.Logger) k8sCache.ResourceEventHandler {
|
||||
return k8sCache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
pod := obj.(*corev1.Pod)
|
||||
if !isValidFunctionPodOnNode(pod) || !utils.IsReadyPod(pod) {
|
||||
return
|
||||
}
|
||||
err := createLogSymlinks(zapLogger, pod)
|
||||
if err != nil {
|
||||
funcName := pod.Labels[fv1.FUNCTION_NAME]
|
||||
zapLogger.Error("error creating symlink",
|
||||
zap.String("function", funcName), zap.Error(err))
|
||||
}
|
||||
},
|
||||
UpdateFunc: func(_, obj interface{}) {
|
||||
pod := obj.(*corev1.Pod)
|
||||
if !isValidFunctionPodOnNode(pod) || !utils.IsReadyPod(pod) {
|
||||
return
|
||||
}
|
||||
err := createLogSymlinks(zapLogger, pod)
|
||||
if err != nil {
|
||||
funcName := pod.Labels[fv1.FUNCTION_NAME]
|
||||
zapLogger.Error("error creating symlink",
|
||||
zap.String("function", funcName), zap.Error(err))
|
||||
}
|
||||
},
|
||||
DeleteFunc: func(obj interface{}) {
|
||||
// Do nothing here, let symlink reaper to recycle orphan symlink file
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func createLogSymlinks(zapLogger *zap.Logger, pod *corev1.Pod) error {
|
||||
@@ -191,7 +185,9 @@ func Start() {
|
||||
if err != nil {
|
||||
log.Fatalf("Error starting pod watcher: %v", err)
|
||||
}
|
||||
controller := makePodLoggerController(zapLogger, kubernetesClient)
|
||||
controller.Run(make(chan struct{}))
|
||||
informerFactory := k8sInformers.NewSharedInformerFactory(kubernetesClient, 30*time.Second)
|
||||
podInformer := informerFactory.Core().V1().Pods().Informer()
|
||||
podInformer.AddEventHandler(podInformerHandlers(zapLogger))
|
||||
podInformer.Run(make(chan struct{}))
|
||||
zapLogger.Fatal("Stop watching pod changes")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user