kuma

Форк
0
/
components.go 
73 строки · 2.0 Кб
1
package gc
2

3
import (
4
	"time"
5

6
	"github.com/pkg/errors"
7

8
	config_core "github.com/kumahq/kuma/pkg/config/core"
9
	"github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
10
	"github.com/kumahq/kuma/pkg/core/resources/apis/system"
11
	"github.com/kumahq/kuma/pkg/core/resources/model"
12
	"github.com/kumahq/kuma/pkg/core/runtime"
13
)
14

15
func Setup(rt runtime.Runtime) error {
16
	if err := setupCollector(rt); err != nil {
17
		return err
18
	}
19
	if err := setupFinalizer(rt); err != nil {
20
		return err
21
	}
22
	return nil
23
}
24

25
func setupCollector(rt runtime.Runtime) error {
26
	if rt.Config().Environment != config_core.UniversalEnvironment || rt.Config().Mode == config_core.Global {
27
		// Dataplane GC is run only on Universal because on Kubernetes Dataplanes are bounded by ownership to Pods.
28
		// Therefore, on K8S offline dataplanes are cleaned up quickly enough to not run this.
29
		return nil
30
	}
31
	collector, err := NewCollector(
32
		rt.ResourceManager(),
33
		func() *time.Ticker { return time.NewTicker(1 * time.Minute) },
34
		rt.Config().Runtime.Universal.DataplaneCleanupAge.Duration,
35
		rt.Metrics(),
36
	)
37
	if err != nil {
38
		return err
39
	}
40
	return rt.Add(collector)
41
}
42

43
func setupFinalizer(rt runtime.Runtime) error {
44
	var newTicker func() *time.Ticker
45
	var resourceTypes []model.ResourceType
46

47
	switch rt.Config().Mode {
48
	case config_core.Zone:
49
		newTicker = func() *time.Ticker {
50
			return time.NewTicker(rt.Config().Metrics.Dataplane.IdleTimeout.Duration)
51
		}
52
		resourceTypes = []model.ResourceType{
53
			mesh.DataplaneInsightType,
54
			mesh.ZoneIngressInsightType,
55
			mesh.ZoneEgressInsightType,
56
		}
57
	case config_core.Global:
58
		newTicker = func() *time.Ticker {
59
			return time.NewTicker(rt.Config().Metrics.Zone.IdleTimeout.Duration)
60
		}
61
		resourceTypes = []model.ResourceType{
62
			system.ZoneInsightType,
63
		}
64
	default:
65
		return errors.Errorf("unknown Kuma CP mode %s", rt.Config().Mode)
66
	}
67

68
	finalizer, err := NewSubscriptionFinalizer(rt.ResourceManager(), rt.Tenants(), newTicker, rt.Metrics(), rt.Extensions(), rt.Config().Store.Upsert, resourceTypes...)
69
	if err != nil {
70
		return err
71
	}
72
	return rt.Add(finalizer)
73
}
74

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.