- https://kubernetes.io/docs/concepts/overview/components
- Node와 안의 Pod를 관리해주는 리소스, 클러스터의 백엔드 같은 설정이랄까?
- 클러스터를 스케줄링하고, 무언가 이벤트가 발생했을 때, 대충 안 좋은일이 발생했을 때, Pod를 새로 구동시켜준다고 함
- API Server
- 쿠버네티스의 API를 제공하는 컴포넌트, 주요 구현은 kube-apiserver 라고 함
- 대애충 살펴본 결과, 클러스터에있는 노드나 컨테이너 설정을 확인할 수 있고, 컨테이너나 노드에 특정 액션을 수행할 수도 있게 기능을 제공하는 것으로 보임
$ kubectl proxy
$ curl <http://localhost:8001/api/v1/namespaces/default/services>
- etcd
- 쿠버네티스 백엔드의 키,값 저장소
- 클러스터에 대한 모든 데이터를 담고 있다고 함
- 실제로 사용할려면 백업은 필수라는데 당연한거 아님?
- Scheduler
- Node가 배정되지 않은 Pod를 감지하여 특정 Node에 배정해주는 컴포넌트
- 그럼 어떻게 적절한 Node로 배치하게 되는가?
- Node Filtering - Pod에 설정된 CPU나 메모리가 꽉 차거나 수용할 수 없는 Node들을 제외, Status가 READY가 아닌 Node도 제외
- Node Scoring - 쿠버네티스의 가중치 알고리즘에 의해 우선 순위를 계산, 아니 그래서 그 가중치 알고리즘이 뭔데, Pod에 사용할 도커 이미지가 이미 Node에 내장되어 있다면 + 점수된다 캄, CPU나 메모리가 넉넉할수록 또 +
- 그 외 하드웨어 설정이라던지, 특정 데이터가 있는 노드에 할당한다던지, 여러 요구 사항에 맞춰 선택할 수 있다고 함
- YAML 파일로 커스텀 스케줄러도 작성 가능
- Controller Manager
- 컨트롤러를 관리하는 역할, 마스터 관리자?
- 그럼 컨트롤러는 무엇인가? 노드에 있는 Pod을 관리하는 컴포넌트
- 종류는 또 여러개가 있는거 같다
- Node - Node가 다운되었을 때의 대응 처리
- Job - 별도 프로세스로 돌고 있는 Job을 관리
- Job은 특정 액션을 수행하고 종료하는 작업을 위한 오브젝트, 리눅스의 크론 스케줄 그대로
- Endpoints - 서비스와 Pod을 연결
- 여기서의 서비스는 Pod의 앱에 접근하기 위한 진입 리소스, Pod의 IP와 포트를 연동, 설정하는 부분이 Endpoints 인 듯
- Service Account, Token - 새 네임스페이스에 대한 계정과 API 접근 토큰 생성
- 네임스페이스는 클러스터를 구분짓는 개념, KAS에선 dev, qa, 테스트 환경을 구분짓는 것처럼, 허나 실제로 클러스터 자체를 격리시키진 못한다고 함
- kube-controller-manager 라고 별도 컨트롤러 집합이 있는데, 저 데몬으로 쿠버네티스의 컨트롤러 기능을 확인할 수 있다고 함
- Cloud Controller Manager
- 클라우드 서비스를 제공하는 플랫폼과 상호 작용할 수 있게 해주는 컴포넌트
- AWS의 EKS나 GCP의 GKE와 연동할수 있단 뜻인듯
- 얘도 컨트롤러 종류는 여러개
- 라우트 - 기본 클라우드 인프라에 라우팅 설정
- 서비스 - 클라우드의 LB를 생성, 관리
- 노드 - 노드가 클라우드상에서 관리가 잘 되는지 확인
Controller pattern
- https://kubernetes.io/docs/concepts/architecture/controller
- 쿠버네티스의 리소스를 모니터링하고, 요청한 상태에 맞게 변경시켜준다고 함
- 스스로 작업을 수행한다고도 하고, API 서버를 통해 컨트롤도 가능
- API를 통해 제어
- Job 컨트롤러가 예시, 단일 Pod, 여러 Pod를 실행하고 중지할 수 있다
- 특정 서비스에 대한 수행, 액션이 있는 Job을 컨트롤러에서 감지하여 수행되는 경우, Pod를 띄워 실행시킨다고 함
- 이때 Job 컨트롤러가 클러스터의 API 서버에게 요청하여 처리해주는 거라고
- Job의 처리가 완료되었다면 Job 오브젝트의 설정을 업데이트, Finished로 표시
- 직접 제어
- 클러스터에 Node가 필요한 경우, 새 Node를 확장할 수 있게 해준다고 함
- 위에서 말한 Controller Manager일까? 컨트롤러에서 Node를 처리하고 클러스터의 API에 응답을 던져준다고 함
- 그냥 Node가 필요해 보일 경우, 알아서 제어를 해주는구나-
디자인
- 무슨 말인진 모르겠으나 동일한 종류의 리소스, 컨트롤러가 동작하는게 아니고, 여러 컨트롤러들이 여러 리소스를 동작할 수 있게 연동하고 쿠버네티스가 이를 허용하도록 디자인했다고 이해하면 되냐?
- Job 컨트롤러는 Job과 Pod 오브젝트, 상태값을 설정할 수 있지만, Job 자체는 다른 컨트롤러에서 생성한다고 함, 그 컨트롤러가 어딘데???