docker run -it --name teamcity-server-instance \ -v <path to data directory>:/data/teamcity_server/datadir \ -v <path to logs directory>:/opt/teamcity/logs \ -p <port on host>:8111 \ jetbrains/teamcity-server
위를 보면 마스터가 있고, 여러 worker node들이 있다. 마스터는 여러개가 될 수도 있다.
쿠버네티스 master와 kubelet 프로세스와 같은 쿠버네티스 control plane의 다양한 구성 요소는 쿠버네티스가 클러스터와 통신하는 방식을 관장한다. control plane은 시스템 내 모든 쿠버네티스 오브젝트의 레코드를 유지하면서, 오브젝트의 상태를 관리하는 제어 루프를 지속적으로 구동시킨다.
- Kubernetes Master
응용프로그램 예약, 상태 유지, 확장 및 업데이트와 같은 클러스터의 모든 활동을 조정한다.
kubelctl 커맨트라인 인터페이스와 같은 것을 사용해서 쿠버네티스로 상호 작용할 때에는 쿠버네티스 마스터와 통신하고 있는 것이다. 가용성과 중복을 위해 복제될 수도 있다
리눅스 os만 가능하다.
> API Server : 클러스터와의 모든 상호작용은 Kubernetes API 호출을 통해 수행된다. HTTP를 통해 또는 Kubectl 및 Kubernetes UI의 명령을 통해 실행될 수 있다.
사용자 > kubectl명령어 > API Server > cAdvisor > Kubelet > container Engine
> Scheduler : pod를 배치할 노드를 선택한다.
> Controller :
1) 노드 컨트롤러 : 노드 장애시에 대해서 반응 및 대응을 한다.
2) 레플리케이션 컨트롤러 : 올바른 개수의 pod를 유지하고 관리한다.
3) 엔드포인트 컨트롤러 : 서비스 및 pod를 연결하는 엔드포인트 오브젝트를 채운다.
4) 서비스 컨트롤러 : 클라우드 제공 사업자의 로드밸런서를 생성, 업데이트, 삭제를 한다.
> etcd : 모든 클러스터 데이터를 담는 저장소역할을 하며 일관성, 고가용성을 위해 key -Value형태이다.
AWS에서 kubernetes 를 사용하는 경우 EBS볼륨의 스냅샷을 만들어 etcd를 백업 할 수도 있다.
go 언어로 만들어 졌으며 Raft합의 알고리즘을 사용하여 고가용성 복제 로그를 관리한다.
- Workder Node
클러스터 내 노드는 애플리케이션과 클라우드 워크플로우를 구동시키는 머신이다. 또한 worker node끼리 통신할 일이 많지가 않다.
리눅스,윈도우 os가 가능하다.
> kubelet : 클러스터의 각 노드에서 실행되는 에이전트로, pod에서 컨테이너가 확실하게 동작하도록 관리한다.
PodSpec의 집합을 받아서 컨테이너가 해당 pod spec에 따라 건강하게 동작하는지를 관장한다.
쿠버네티스를 통해 생성되지 않은 컨테이너는 관리하지 않는다.
즉, pod들과 Node들의 상태를 클러스터에 보고하는 역할을 한다.또한 Master와 통신한다.
> kube-proxy : 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 서비스 개념의 구현부이다.
즉, 서비스로 향하는 트래픽( 클러스터 IP or Node port를 통해)을 올바른 백엔드 pod로 로드밸런싱한다. userspace,iptables, IPCS로 구현 된 세가지 모드 중 하나에서 실행될 수 있다.