본문 바로가기
Development

Shared Informer

by 토마스.dev 2019. 12. 11.
반응형

사실 Shared Informer에 대한 자료는 구글링을 하면 널리고 널렸다. 

다만 필자는 이것을 이해하기전, Shared라는 키워드에 대한 썰을 풀어보고자 한다(필자와 같은 사람이 있을 수도 있겠다는 가정아래)

https://medium.com/@muhammet.arslan/write-your-own-kubernetes-controller-with-informers-9920e8ab6f84

 

Write your own kubernetes controller with informers

In applications of robotics and automation, a control loop is a non-terminating loop that regulates the state of the system. In Kubernetes…

medium.com

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

 

 

 

 

반응형