1. 쿠버네티스란?
- 컨테이너화 된 워크로드와 서비스를 관리하기 위한 플랫폼.
2. 쿠버네티스가 유용하게 된 히스토리
- 물리 배포 시대에는 리소스 할당이 어려웠음. 하나의 물리 서버에 여러 개의 애플리케이션이 돌아갈 경우 한 애플리케이션이 모든 리소스를 할당해 가져갈 수도 있었고 이를 격리하기에는 물리 격리가 필요했음.
- 이를 해결하기 위해 VM을 도입함. VM간의 격리를 두고 폐기 가능하도록 했다.
3. 컨테이너와 VM의 차이는?
- VM이 좀 더 격리 수준이 높음. 컨테이너는 운영체제를 공유한다. 그렇기에 VM보다 좀 더 가볍다.
- 배포 시점이 아닌 빌드해서 배포할 수 있고 빠르고 효율적으로 롤백할 수 있다.
4. 쿠버네티스가 그래서 왜 필요한가?
- 컨테이너화 된 워크로드를 확장성있게, 중단 없이 운영하기 위한 많은 기능들을 제공하기 때문임.
5. 어떤 기능?
- 자동 복구 : 실패한 컨테이너를 다시 시작
- 롤아웃, 롤백
- 스토리지 오케스트레이션
- 서비스 디스커버리, 로드밸런싱
- 스크릿과 구성 관리
6. 쿠버네티스의 구성 요소
- 노드 : 컨테이너화 된 애플리케이션을 실행하는 것을 노드. 워커 머신의 집합.
- 파드 : 노드는 애플리케이션의 구성요소인 파드를 호스팅함.
- 컨트롤 플래인 : 워커 노드와 클러스터 내 파드를 관리한다.
6-1. 컨트롤 플레인
- 클러스터에 관한 전반적인 결정(스케줄링 등)을 수행. 클러스터 이벤트를 감지하고 반응(ex. Replicas 맞추기)
- 어디서든 동작 가능하지만, 보통 사용자 컨테이너와 분리하여 동작시킨다.(간결성을 위하여)
6-1.-1. 컨트롤 플레인의 컴포넌트들
- Kube-apiserver
- Etcd : 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소.
- Kube-scehduler : 노드가 배정되지 않은 파드를 감지, 실행할 노드를 선택하는 컨트롤 플래인 컴포넌트
- 노드 컨트롤러, 잡 컨트롤러, 엔드포인트 컨트롤러, 서비스 어카운트 & 토큰 컨트롤러
- Kube-controller-manager : 컨트롤러 프로세스를 실행하는 컴포넌트.
- Cloud-controller-manager
- 노드 컨트롤러, 라우트 컨트롤러, 서비스 컨트롤러의 컴포넌트를 가지고 있음.
6-2. 노드 컴포넌트
- 노드컴포넌트는 동작중인 파드를 유지시키고, 런타임 환경을 제공하며 모든 노드상에서 동작한다.
6-2-1. 노드의 컴포넌트들
- Kubelet: 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
- Kube-proxy : 네트워크 프록시로, 쿠버네티스 서비스 개념의 구현부.
- 컨테이너 런타임: 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어
6-3. 애드온
- 리소스를 이용하여 클러스터 기능을 구현. 클러스터 단위 기능을 제공하기에 kube-system 네임스페이스에 속한다.
- DNS, 웹 UI, 컨테이너 리소스 모니터링, 클러스터-레벨 로깅
7. 쿠버네티스 오브젝트 (핵심 개념)
- 쿠버네티스 오브젝트는 시스템에서 영속성을 가지는 오브젝트. 클러스터의 상태를 나타내기 위해 이 오브젝트를 이용한다.
- 상태?
- 어떤 애플리케이션이 동작중이고 어느 노드에서 동작 중인지
- 애플리케이션이 이용할 수 있는 리소스
- 재구동 정책, 업그레이드 등 동작 정책
- 결국 쿠버네티스 오브젝트는 의도를 가진 레코드라고 할 수 있다.
- 생성 방식?
- 오브젝트를 생성하기 위해서는 컨트롤플레인의 쿠버네티스 API를 사용해야 함. 주로 Kubectl cli를 통해 api를 대신 호출한다.
8. 오브젝트 명세(Spec)와 상태(Status)
- 거의 모든 쿠버네티스 오브젝트는 spec과 status를 가진다.
- spec을 통해 의도하는 상태를 기술하여 쿠버네티스에 전달하면 해당 오브젝트의 status라는 개념이 생기고 이는 쿠버네티스 시스템에 의해 제공된다.
- 의도된 spec과 현재 status를 일치시키기 위해 능동적으로 관리한다.
9. 오브젝트 기술 방법
- 쿠버네티스 API를 활용하기 위해서는 JSON 형식으로 정보를 포함시켜 줘야 한다. (대부분은 kubectl을 활용하여 yaml로 기술하여 제공한다, 이를 kubectl이 JSON형태로 변환하여 전달해 준다.)
- 요구되는 필드
- apiVersion : 오브젝트를 생성하기 위해 사용되고 있는 쿠버네티스 API 버전이 어떤 것인지
- Kind: 어떤 종류의 오브젝트를 생성하려고 하는지
- Metadata: 이름 문자열, UID, 선택적인 namespace를 포함하여 오브젝트를 유일하게 구분 지어줄 데이터
- spec: 오브젝트에 대해 어떤 상태를 의도하는지
'Developer > Architecture, Cloud' 카테고리의 다른 글
Kafka 학습 (1) | 2022.12.11 |
---|