사실 Shared Informer에 대한 자료는 구글링을 하면 널리고 널렸다.
다만 필자는 이것을 이해하기전, Shared라는 키워드에 대한 썰을 풀어보고자 한다(필자와 같은 사람이 있을 수도 있겠다는 가정아래)
https://medium.com/@muhammet.arslan/write-your-own-kubernetes-controller-with-informers-9920e8ab6f84
https://gianarb.it/blog/kubernetes-shared-informer
Shared Informer에 붙은 Shared는 Cache기법을 말하는 것이다. 처음에는 API server의 부하를 줄인다고 해서 여러가지 분리된 컨트롤러들이 공통으로 접근하는걸 생각했는데 완전히 바보같은 생각이었다.
여기서 Shared란 하나의 앱 안에 여러가지 컨트롤러 들이 있고 이것이 하나의 리소스 변화를 바라 봤을때 공용으로 사용할 수 있게 하겠다는 것이다. 즉 Reflector라는 모듈이 API Server에 Request를 날리고(1번) 이것을 key-value(object) 스토어(Index)에 저장하고 이것을 watching하는 컨트롤러들에게 notification을 주는 것이다.
하나의 컨트롤러만 사용할때 Shared라는게 무슨 의미가 있을까 생각하게 되는데, 맞다 의미 없다. 다만 알다시피 kube-controller-manager에는 다수의 컨트롤러가 들어가 있다. 이럴 때는 의미가 있다.
참고로 이것을 사용하는 관련 샘플코드들을 찾아보면 SharedInformer, SharedIndexInformer 등을 사용하는데, 둘이 같다고 보면된다(Index 가 변경이 일어나면 inform을 주겠다는 의미)
https://github.com/kubernetes/client-go/blob/master/tools/cache/shared_informer.go#L163
'Development' 카테고리의 다른 글
Thanos Tips (2) | 2020.02.11 |
---|---|
빈번한 No data alert 벗어나기(in Grafana) (1) | 2019.12.12 |
GPFS Client side monitoring on k8s (0) | 2019.12.10 |
Kubernetes 에서 Monitoring System(Prometheus) 운영경험기 (9) | 2019.11.27 |
Grafana API Call Flow 분석 (0) | 2019.01.17 |