- kubernetes cluster는 마스터와 노드 구성요소가 있고, 추가요소가 있다.
이런 구성요소들은 API를 통해 메시지를 주고받는다.
1. 마스터
- 클러스터의 Control plane을 제공
- 클러스터에 대한 전반적인 결정(ex. scheduling)을 수행
- 클러스터 이벤트를 감지하고 이에 대응
- production 환경에서는 멀티 마스터 환경을 구성
- 3대 이상 만드는게 좋다.
1) API server (kube-apiserver)
- 쿠버네티스 클러스터의 모든 구성요소들은 마스터의 API 서버와 메시지를 주고받는다.
- control plane에 대한 frontend를 담당한다.
2) etcd
- 쿠버네티스 클러스터의 모든 정보데이터를 저장하는 일관성과 고가용성을 지원하는 키-값 저장소
- key가 있으면 이에 해당하는 value가 있다.
- key: value
3) 쿠버네티스 컨트롤러 관리자 (kube-controller-manager)
-
쿠버네티스는 무수히 많은 컨트롤러로 이루어져있다.
-
node controller
-
노드 관리
-
노드가 다운되었을 때, 알림과 대응
-
-
replication controller
-
복제 컨트롤러를 사용하는 모든 오브젝트 관리
-
알맞은 수의 pod를 유지하는 기능
-
-
Endpoint controller
-
service와 pod를 연결
-
-
Service Account 및 Token Controller
-
kubernetes의 namespace, account, token을 담당
-
4) 클라우드 컨트롤러 관리자 (cloud-controller-manager)
- 클라우드를 제공하는 업체의 기능과 클라우드에서 동작하는 쿠버네티스 구성요소와 상호작용 할 수 있도록 하는 컨트롤러 관리자
- kubernetes 1.6에서 도입된 alpha 기능
- 클라우드 제공업체의 코드와 쿠버네티스의 코드가 서로 독립적으로 발전시켜 나갈 수 있도록 해준다.
- Node controller
- node가 응답이 없을 때 클라우드 상에서 node가 삭제되어졌는지 확인
- Route controller
- 클라우드 인프라의 네트워크 경로 구성 담당
- Service controller
- 클라우드 로드밸런서 관리 담당
- Volume controller
- 클라우드 볼륨 관리 담당
- 클라우드 컨트롤러 관리자는 클라우드 공급자(AWS, GCP, Azure, OCI 등)의 의존성을 갖는다.
2. 노드
- Worker
- kubernetes의 런타임 환경 제공
- 동작중인 pod 유지
- 필요한 만큼 만든다.
1) kubelet
- 각 노드에서 실행되는 에이전트
- 마스터로부터 제공받은 pod의 구성정보를 받음
- 컨테이너가 확실하게 동작하는 것을 관리하고 보장
2) kube-proxy
- 호스트 레벨의 네트워크 규칙을 구성
- 외부 연결을 pod에 대한 forwarding 담당
- kubernetes의 서비스 추상화가 가능하도록 함.
- 컨테이너에 접근 가능하게 해줌
3) container runtime
- 컨테이너 동작을 책임지는 구성요소임
- 기본적으로 도커 플랫폼 사용
- 종류
- Docker
- containerd
- cri-o
- rktlet
- Kubernetes CRI(Container Runtime Interface)를 구현한 모든 런타임
- kubernetes의 cluster 정보 확인
kubectl cluster-info
- kubernetes의 node 정보 확인
kubectl get nodes
kubectl get nodes -o wide // 더 자세한 정보
// -o 옵션 : output
3. 애드온
- 쿠버네티스 클러스터에 추가할 수 있는 확장 기능 제공리
- 참고 : http:// https://kubernetes.io/docs/concepts/cluster-administration/addons/
- cluster DNS
- kubernetes cluster 내에 여러 object(pod, container, service 등)에 대한 DNS 레코드를 제공
- 주소기반으로 object를 찾을 수 있음.
- 서비스만 구성해서 하드에 연결하면 됨.
- 거의 필수 기능으로 사용
- dashboard
- kubernetes cluster를 위한 웹 기반의 인터페이스 제공
- container resource monitoring
- 컨테이너들에 대한 리소스 사용량을 시계열(Time-series) 메트릭스를 사용하여 데이터를 저장하고 열람하기 위한 인터페이스 제공
- cluster logging
- container log를 중앙 로그 저장소에 저장하고 관리
4. 아키텍처
5. 쿠버네티스 API
- API 버전 규칙
- 쿠버네티스의 모든 구성요소는 API 서버를 통해 API로 메시지를 주고받는다.
- 쿠버네티스는 리소스에 대한 표현을 쉽게하기 위해 각각 다른 API 경로에서 복수의 API 버전을 지원한다.
- 같은 종류의 리소스인데 API 버전이 다른 경우 -> 안전성이나 기술 지원의 수준이 다르다.
- 알파 버전 API
- 버전 이름에 alpha가 포함됨 (ex. v1alpha1)
- 활성화 해야 볼 수 있다.
- 기본적으로 비활성화 되어있음
- 활성화 하다가 버그에 노출될수 있다.
- 테스트용
- 베타 버전 API
- 버전 이름에 beta가 포함됨 (ex. v2beta3)
- 기본적으로 활성화 되어있음
- 베타버전에서 stable 버전으로 바뀔 수 있다.
- 중요하지않은 용도로만 사용하기를 권장
- 안정화 버전 API
- 버전 이름이 vX or X 정수
- 알파, 베타가 없으면 stable ver
※ 참고
- 클러스터에서 지원되는 API 버전 확인
kubectl api-versions
- 클러스터에서 지원되는 API 리소스 확인
kubectl api-resources
- API 그룹
- 쿠버네티스에서 기능을 추가할 떄 해당 기능을 사용하기 위한 API를 더 쉽게 확장하도록 도움.
'Containers > Kubernetes' 카테고리의 다른 글
Pod (0) | 2020.07.23 |
---|---|
명령형 명령어 (0) | 2020.07.23 |
Object 관리 (0) | 2020.07.22 |
YAML (0) | 2020.07.22 |
Container와 Kubernetes 소개 (0) | 2020.07.22 |
댓글