Function Update if config/secret changes (#1224)

* Config and secret change to invoke function update
* Added recycle function for pool manager as well - where it recycles the specialized pods
* Switched to rolling update of pods and env variable based change instead of deleting pods in new deploy executor
This commit is contained in:
Vishal
2019-07-23 09:27:43 +08:00
committed by Ta-Ching Chen
parent 1beaa9ec13
commit 93c5b53b77
7 changed files with 305 additions and 11 deletions
+44
View File
@@ -25,7 +25,9 @@ import (
"github.com/fission/fission/pkg/utils"
"go.uber.org/zap"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
k8sTypes "k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache"
@@ -130,6 +132,48 @@ func (gpm *GenericPoolManager) Run(ctx context.Context) {
go gpm.idleObjectReaper()
}
func (gpm *GenericPoolManager) RefreshFuncPods(logger *zap.Logger, f fv1.Function) error {
env, err := gpm.fissionClient.Environments(f.Spec.Environment.Namespace).Get(f.Spec.Environment.Name)
if err != nil {
return err
}
gp, err := gpm.GetPool(env)
if err != nil {
return err
}
funcSvc, err := gp.fsCache.GetByFunction(&f.Metadata)
if err != nil {
return err
}
gp.fsCache.DeleteEntry(funcSvc)
funcLabels := gp.labelsForFunction(&f.Metadata)
podList, err := gpm.kubernetesClient.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{
LabelSelector: labels.Set(funcLabels).AsSelector().String(),
})
if err != nil {
return err
}
for _, po := range podList.Items {
err := gpm.kubernetesClient.CoreV1().Pods(po.ObjectMeta.Namespace).Delete(po.ObjectMeta.Name, &metav1.DeleteOptions{})
if k8serrors.IsNotFound(err) {
return nil
}
if err != nil {
return err
}
}
return nil
}
func (gpm *GenericPoolManager) service() {
for {
req := <-gpm.requestChannel