쿠버네티스 아키텍쳐
하나의 마스터노드와 여러대의 워커로드로 하나의 클러스터를 이루고 있는 구조
1. 마스터노드(Kubernetes Master) (aka.마스터)
쿠버네티스 클러스터 전체를 컨트롤 하는 시스템
master는 API서버를 통해 K8S를 관리하고, 모든 컴포넌트들은 API 서버를 통해서 통신함
관리자만 접속할 수 있돌고 보안설정 필요
마스터 서버가 죽으면 클러스터를 관리할 수 없기 때문에 3대를 구성해서 안전성 높임
다양한 모듈이 확장성을 고려하여 기능별로 쪼개져 있는 특징
1.1 마스터노드 구성요소
- API 서버
- etcd
- Scheduler
- Controller Manager
1) API 서버
쿠버네티스의 모든 기능들은 REST API로 제공하고, 그에 대한 명령을 처리하는 부분
K8S 내부의 모든 컴포넌트들이 서로 호출하기 위해 사용하는 컴포넌트
kubectl 요청뿐만 아니라 내부모듈의 요청처리, 권한체크,요청거부
노드에서 실행중인 컨테이너의 로그 확인하는 디버거 역할도 가능
2) etcd
쿠버네티스 클러스터의 데이터베이스 역할을 하는 서버
클러스터의 모든 설정, '상태'데이터를 저장하는 부분 (object 를 key-value형태로 저장)
나머지는 다 stateless하게 동작하기 때문에 etcd만 잘 백업하면 언제든지 클러스터 복구가능,
여러개로 분산해서 복제가능, 안전성 높음, 속도빠름
단순히 값을 저장하고 읽기 뿐만 아니라 watch 기능으로 상태변경 체크가능
오직 API 서버와 통신하고, 다른 모듈은 API서버를 거쳐서 etcd데이터에 접근함
3) 스케쥴러 (kube-scheduler)
pod,서비스 등 각 리소스들을 적절한 노드에 할당하는 역할
pod를 어떤 노드에서 실행할지 결정
node에 배치된 pod는 각 노드의 kubelet에 의해 컨테이너로 생성
4) 큐브 컨트롤러 매니저 (kube-controller-manager)
K8S의 ReplicaSet, Deployment 등 Contoller를 관리 및 적절한 노드에 할당하는 역할
각 컨트롤러에게 pod의 복제/배포 명령 수행
5) 클라우드 컨트롤러 매니저 (cloud-controller-manager)
AWS,GCE,Azure 등 퍼블릭 클라우드와 연동 관리하는 역할
노드를 추가/삭제하고 로드밸런서를 연결하거나 볼륨을 붙일 있음
각 클라우드 업체의 인터페이스에 맞춰서 구현할 수 있음
6) DNS
내부 위치정보를 저장하는 dns서버
리소스 엔드포인트를 dns로 맵핑하고 관리
pod나 서비스들은 ip를 배정받지만, 동적으로 생성되는 리소스이기 때문에 ip가 변경되면 dns에 위치정보 저장
새로운 리소스가 생기면 그 리소스에 대한 ip와 dns이름 등록하고, dns 이름기반으로 리소스 접근
2. 워커노드 (Kubernetes Node) (aka. 노드)
마스터에 의해 명령을 받고 실제 워크 로드를 생성해서 서비스하는 컴포넌트
실제 컨테이너들이 생성 되는 가상머신 또는 물리적인 서버(여러개 생성해서 관리가능)
각각 서버에 라벨을 붙여서 사용목적을 정의 할 수 있음
API 서버의 요청을 Kubelet을 통해 수행
2.1 워커노드 구성요소
- kubelet
- Kube-proxy
- pod
- cAdvisor
1) kubelet(큐블릿)
노드에 배포되는 agent
마스터의 API서버와 통신하는 역할
1. 마스터의 API서버로부터 수행할 명령을 받아서 워커노드를 수행시킴
2. 워커노드의 상태를 마스터로 전달시킴
노드에 할당된 pod들의 생명주기 관리
pod를 생성하고, pod안의 컨테이너에 이상이 없는지 확인하면서 마스터와 통신
마스터의 명령을 수행하기 위한 쿠버네티스 에이전트
마스터 API서버와 통신을 하면서 노드가 해야할 명령어 받아서 수행시키기고, 노드의 상태를 마스터에게 전달
API 서버의 요청을 받아서 컨테이너의 로그전달하거나 특정명령 대신 수행하기도 함
2) kube-proxy
노드에 할당된 pod로 연결되는 네트워크 관리
노드로 오는 트래픽을 적절한 컨테니어로 프록시하고, 노드와 마스터간의 네트워크 통신관리
클러스터 내부에 별도의 가상네트워크가 동작할 수 있게 해주는 프로세스
TCP,UDP,SCTP 스트림을 포워딩하고, 여러개의 pod를 라운드로빈 형태로 묶어서 서비스제공
노드로 들어오는 트래픽을 적절한 컨테이너로 라우팅, 로드밸런싱, 프록시 하면서 통신관리
kube-proxy 자체가 프록시 서버로 동작해서 실제 요청을 받고, pod에게 전달하는 역할
시간이 지나면서 iptables를 설정하는 방식으로 변경
그런데 iptables에 등록된 규칙도 느려지면서 최근 IPVS지원
3) 컨테이너 런타임(Cotainer Runtime)
pod를 통해서 배포된 컨테이너를 실제로 실행시킴
컨테이너 런타임 중 대표적인 예로는 도커(Docker)
그외에 rkt, runc 같은 런타임도 지원
CRI (Container Runtime Interface)를 구현한 다양한 런타임지원
4) 애드온(Addons)
클러스터 내부에서 필요한 기능을 실행시키 위한 pod
이 pod들은 deployment controller, replication controller에 의해 관리
4-1. 네트워킹 에드온
쿠버네티스를 직접 보유중인 서버들에 설치해서 사용한다면 에드온 별도설치 필요
AWS,GCP 같은 클라우드 서비스에서 제공하는 쿠버네티스를 사용하면 에드온 설치 필요없음
CNI (Container Network Interface)를 구현하고 있으면 다른 애드온들도 사용가능
4-2. DNS 에드온
실제로 클러스터 내에서 작동하는 DNS서버
쿠버네티스 서버들에게 DNS 레코드를 제공하는 역할
쿠버네티스 내부에서 실행된 컨테이너들은 자동으로 DNS서버에 등록됨
5) cAdviosr
노드의 모니터링 agent
노드에서 가동되는 컨테이너들의 상태정보를 수집해서 마스터의 API서버로 전달
3. 전체적인 쿠버네티스 아키텍쳐
출처
https://galid1.tistory.com/413?category=767345
https://bcho.tistory.com/1258?category=731548
https://phoenixnap.com/kb/understanding-kubernetes-architecture-diagrams
'🌴 DevOps > Docker & K8s' 카테고리의 다른 글
쿠버네티스 구성요소(3/5) - Volume 구성 및 특징 (0) | 2020.04.20 |
---|---|
쿠버네티스 구성요소(2/5) - Pod 구성 및 특징 (0) | 2020.04.20 |
쿠버네티스 구성요소(1/5) (Object/Controller) (0) | 2020.04.19 |
쿠버네티스 아키텍쳐(1/2) (클러스터/마스터/노드) (0) | 2020.04.19 |
쿠버네티스 기본개념(컨테이너 운영환경/Container Orchestration /k8s특징) (0) | 2020.04.19 |
Docker(도커) 기본개념(도커/컨테이너/VM/이미지/도커파일) (1) | 2020.04.13 |