2021. 5. 25. 09:51ㆍContainer/kubernetes
1. 클러스터를 구성하는 코어프로세서
1) kubectl
- k8s 클러스터를 조작하기 위한 도구로 가장 빈번하게 이용되는 커맨드 라인 인터페이스
2) kube-apiserver
- kubectl등의 API클라이언트로부터 오는 REST요청을 검증하고, API 오브젝트를 구성하고 상태를 보고한다.
3) kube-scheduler
- 쿠버네티스의 기본 스케쥴러z
- 새로 생성된 파드에 대해 실행할 최적의 노드를 선택
- 스테쥴러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 점수가 높은 노드를 선택
4) kube-controller-manager
- 컨트롤러를 구동하는 마스터상의 컴포넌트
5) cloud-controller-manager
- API를 통해서 클라우드 서비스와 연계하는 컨트롤러로, 클라우드 업체에서 개발한다.
6) etcd
- k8s클러스터의 모든관리데이터는 etcd에 저장된다.
- CoreOS가 개발한 분산 키/값 저장소로 신뢰성이 요구되는 핵심데이터의 저장 및 접근을 위해 설계되었다.
7) kubelet
- 파드와 컨테이너의 실행
- 파드와 노드상태를 API서버에 보고
- 컨테이너 동작을 확인하는 프로브 실행
- 내장된 cAdvisor를 통해 메트릭 수집 및 공개
8) kube-proxy
- 서비스와 파드의 변경을 감지하여 최신 상태로 유지
- iptables 규칙을 관리
- 서비스명과 ClusterIP를 내부 DNS에 등록
9) coredns
- 파드가 서비스 이름으로부터 IP 주소를 얻기위해 사용
2. 애드온 컴포넌트
1) kube-flannel
- 모든 노드에서 실행되어 여러노드사이에서 IPV4 네트워크를 제공한다.
- 컨테이너는 k8s 클러스터 내부에서 사용되는 IP주소를 바탕으로 다른노드에 있는 파드와 통신 할수있다.
2) calico-kube-controllers
- calico를 위한 컨트롤러, 데이터 스토어로서 etcd 이용하기 위하여 사용된다.
3) calico-node
- 모든 노드에서 실행되어 노드 간 파드 의 통신, 라우팅, 네트워크 접근 관리 기능을 제공한다.
4) kubernetes-dashboard
- web 대쉬보드
5) heapster
- kubelet에 내장된 cAdvisor로부터 메트릭 정보를 수집. 버전 1.11부터 지원이 중단됨
6) metrics-server
- heapster를 대신하여 1.8버전부터 도입되었고 API aggreation layer를 통해서 k8s클러스터 전체로부터 메트릭을 수집한다.
3. 쿠버네티스 계층 구조

1)쿠버네티스의 API 서버로서 클라이언트로부터 명령을 받아드리고 실행
2)컨테이너를 파드 단위로 스케줄링 및 삭제
3)파드의 컨트롤러 기능과 외부 리소스 관리
- 스케쥴링이란?
파드를 실행할 노드를 정하는 것을 의미한다.
Master는 각 노드의 CPU와 메모리 예약상황, 실제사용량을 감시하고 있다. 그래서 매니페스트에 기제된 CPU와 메모리 요청값 및 상한 값을 기준으로 조건에 부합하는 노드를 찾아서 파드를 스케쥴 한다.
4. 쿠버네티스 API 오브젝트
1) 쿠버네티스 API
- k8s의 모든 조작은 API를 통하여 이루어진다.
- kubectl ----> kube-apisever 에게 API규약에 맞게 기술된 매니페스트 (YAML)형식 혹은 JSON 형식으로 전송하여 오브젝트를 만들고, 바꾸고 제거하는 일을 한다.
2) 오브젝트
- k8s클러스터 내부의 엔티티로서, 이후 설명할 파드, 컨트롤러, 서비스등의 인스턴스를 의미
- API 리소스 종류 (kind)에 맞게 설정되고 생성4되며 지정된 상태가 유지되도록 k8s에서 제어된다.
- 오브젝트를 만들 때는 반드시 이름을 부여해야하고, 이름은 하나의 네임스페이스에서 반드시 유일해야한다.
※ 네임스페이스 : k8s를 논리적으로 분할하여 사용하기 위해 존재하는 기능
default는 kube-system에 만들어짐
3) 워크로드
- 오브젝트의 카테고리를 나타내는 용어로 컨테이너와 파드, 그리고 컨트롤러의 그룹을 의미한다.
- 컨테이너 실행을 관리 하기 위해 사용
4) 컨테이너
- 쿠버네티스의 컨테이너만을 독자적으로 실행하는 것은 불가능하고, 반드시 파드내에서 실행해야한다.
- 컨테이너 기동시 설정할 수 있는 항목은 이미지이름, 실행명령어, 실행인자, 환경변수, 볼륨, CPU사용시간과 메모리 크기의 요청값 및 상한 값등이 있다.
5) 파드
- 컨테이너를 시작하기위한 오브젝트이다.
6)컨트롤러
- 파드를 실행을 제어하는 오브젝트로서, 여러 종류의 컨트롤러가 있어 각 컨트롤러의 기능을 이해하고 목적에 맞게 적절히 구별해서 사용해야한다.
- 예 ) Deployment 컨트롤러는 지정된 숫자보다 적으면, 지정한 개수가 될때까지 파드를 기동함
7) 설정 ( Configureation )
- 컨테이너 내 에플리케이션 설정 값이나 비밀번호 등의 정보는 배포된 네임스페이스로부터 취득하는것이 좋다.
- 컨피그맵 ( ConfigMap ), 비밀번호와 같은 기밀 정보를 담기 위한 시크릿 ( Secret ) 오브젝트가있음
8) 서비스 (Service)
- 파드와 클라이언트를 연결하는 역활을 수행
- 서버 역활을 수행하는 파드가 클라이언트의 요청을 받을 수 있도록 대표 IP 주소를 취득하여 내부DNS에 등록한다.
- 대표 IP 주소를 취득한 파드들에게 부하분산 역활도 수행한다. ( 로드밸런서 )
9) 스토리지 ( Storage )
- 파드나 컨테이너는 실행 시에만 존재하는 일시적인 존재이기 때문에 중요한 데이터를 컨테이너의 파일 시스템에 저장해서는 안된다. 데이터를 잃지 않기 위해서는 퍼시스턴트 볼륨에 사용하여 전원이 꺼져도 데이터가 유지되는 스토리지 시스템에 데이터를 저장해야한다.
- 퍼시스턴트 볼륨은 복수의 노드에서 접속이 안되기에 외부 스토리지 시스템을 연동해야한다.
- 다양한 외부 스토리지 시스템의 프로토콜과 API 차이점을 은폐하기 위해 k8s는 스토리지를 계층적으로 추상화한 오브젝트를 제공한다.
출저 : 15단계로 배우는 도커와 쿠버네티스를 참고하였습니다.
'Container > kubernetes' 카테고리의 다른 글
| 쿠버네티스 ( kubernetes ) - 컨트롤러( Controller ) (0) | 2021.05.25 |
|---|---|
| 쿠버네티스 ( kubernetes ) - 서비스( Service )와 클러스터 네트워크 (0) | 2021.05.25 |
| 쿠버네티스 ( kubernetes ) - 파드( Pod ) (0) | 2021.05.25 |
| 컨테이너의 이해 (0) | 2021.05.25 |
| 쿠버네티스란? (0) | 2021.05.25 |