Kubernetes 학습 노트
■ 가상화와 컨테이너
1) 컨테이너형 가상화(어플리케이션 격리 기술)
[컨테이너]라는 어플리케이션과 실행 환경을 같이 분리하는 방식으로 OS 단위가 아닌 어플리케이션 단위로 가상화하는 기술
2) 컨테이너를 만드는 비용은 저렴하기 때문에 하나의 컨테이너에 여러 어플리케이션을 도입하는 것보다 여러 개의 컨테이너에 하나의 어플리케이션을 도입하여 연계하는 것이 좋다.
3) 컨테이너 가상화 도구 : Docker
4) 쿠버네티스 : 컨테이너 오케스트레이션 도구. 많은 컨테이너를 오케스트레이션(배포 및 관리)할 수 있다.
5) 데브옵스 : 개발자와 운영자가 협력해 서비스를 제공하는 방법
- 개발자 : 계획 > 코드 > 빌드 > 테스트
- 운영자 : 출하 > 배포 > 운영 > 감시
6) 데브옵스를 원활하게 돌리기 위해서 컨테이너 기술이 자주 사용된다.
7) 개발 환경 <> 운영 환경 차이로 인해 오류가 자주 발생하는데, 컨테이너 기술은 이를 해결해 줄 수 있다.
8) 마이크로서비스 : 의존 관계가 없는 여러 작은 서비스를 조합해 큰 서비스로 제공하는 설계 기법
9) 모놀리스 : 하나의 큰 기능을 단일의 서비스로 제공하는 설계 기법
10) 도커 : 컨테이너를 실행하거나 컨테이너 이미지를 만들고 배포하는 플랫폼
11) 컨테이너 이미지 : 컨테이너를 실행하기 위한 템플릿
12) 도커 엔진 : 컨테이너 및 컨테이너 이미지를 관리하는 응용 프로그램. 서버(도커 데몬)-클라이언트(도커 클라이언트) 구조를 가짐
13) 컨테이너 : 운영 체제에서 실행되는 프로세스. 일반 프로세스와 다른 점은 다른 프로세스와 격리되도록 설정되어 있다는 점이다.
14) 컨테이너를 외부와 격리하기 위해 네임스페이스라는 구조를 사용한다.
15) 컨테이너 이미지 : 컨테이너를 실행하기 위한 템플릿 (Java의 클래스 파일과 동일 개념)
16) 컨테이너 상태 : 컨테이너 상태는 도커 명령이 실행되거나 컨테이너 내 프로세스가 종료되는 등으로 변경된다.
17) 도커 명령이란 도커에서 컨테이너 또는 컨테이너 이미지를 조작할 때 사용하는 명령이다.
18) 디플로이먼트 ⊃ 레플리카셋 ⊃ 파드 ⊃ 컨테이너
19) 레플리카셋 : 쿠버네티스가 파드를 관리하기 위한 단위로 대상 파드의 복제(레플리카)를 지정한 수만큼 유지하는 기능
20) 디플로이먼트 : 레플리카셋이 유지하는 파드 수를 증감하거나 레플리카셋을 생성함
21) 디플로이먼트 컨트롤러 : 디플로이먼트를 특정한 상태로 유지하는 컨트롤러이다.
22) flannel(플라넬) : 쿠버네티스에서 네트워크를 구축하는 방법 중 하나. 쿠버네티스 클러스터를 구성하는 여러 시스템을 연결하는 오버레이 네트워크를 구축한다.
23) flanneld : IPV4 네트워크를 구축하기 위해 쿠버네티스 클러스터를 구성하는 모든 컴퓨터에서 구동되는 에이전트 프로그램
24) flannel(IPv4 네트워크 제공) > 서비스(EndPoint 제공) > 컨테이너
25) 각 파드에는 고유한 IP주소가 할당된다.
■ 서비스 : 컨테이너에 접속하기 위한 창구인 EndPoint를 제공하는 방식
1) ClusterIP : 클러스터 내부만 접속할 수 있는 가상IP 주소 생성
2) NodePort : 클러스터의 모든 노드에 대해 지정된 포트를 부여해야한다. 클러스터 외부에서도 접속 가능
3) LoadBalancer : 클라우드 서비스의 로드 밸러서에 대한 접속이 컨테이너로 전송된다. 클러스터 외부에서도 접속 가능
4) ExternalName : 서비스에 대한 접속이 지정된 호스트로 전달됨.
■ 스케일링 : 컨테이너 기술에서 요청 규모에 따라 컨테이너를 증감하는 것
1) HPA(Horizontal Pod Autoscaler) 컨트롤러 : 주기적으로(기본적으로 15초 간격) 파드 매트릭스를 취득해 이를 기반으로 필요한 파드 수를 계산하고, 레플리카셋 및 디플로이먼트의 파드 수를 변경한다.
2) VPA(Vertical Pod Autoscaler) 컨트롤러 : 파드에 할당하는 리소스(CPU, 메모리 등) 소비량에 따라 request(하한선), limit(상한선)을 조정하여 수직 스케일링한다.
3) CA(Cluster Autoscaler) 컨트롤러 : 클러스터를 구성하는 시스템의 수를 늘리거나 줄여서 수평 스케일링한다. 리소스 부족으로 파드를 시작하지 못할 경우 서버 수를 늘린다.
■ 쿠버네티스 마스터 구성 요소
1) kube-api-server : 사용자 및 워커가 쿠버네티스 클러스터와 상호 작용할 수 있는 EndPoint(REST API)를 제공한다.
2) etcd : 쿠버네티스 클러스터와 관련된 설정 등의 데이터를 저장하는 저장소이다. (kube-api-server와 etcd는 FE-BE 관계)
3) kube-scheduler : 파드를 시작할 노드를 계획하는 스케줄러
4) kube-controller-manager : 디플로이먼트 컨트롤러와 같은 여러 컨트롤러의 실행 및 정지를 관리하고, 쿠버네티스 클러스터를 정상적인 상태로 유지한다.
5) kube-system : 기본적으로 시스템 pod가 적용되는 namespace
■ 워커의 구성요소
1) kubelet
마스터에서 PodSpec을 가져온 다음, 컨테이너 런타임 인터페이스에 접근해 컨테이너를 실행/정지 및 감시한다.
2) kube-proxy
마스터에서 네트워크 구성을 가져온 다음, 파드와 파드가 통신할 때 접근 중계 및 주소 변환 규칙을 변경한다.
■ 용어정리
1) 아마존 EKS 컨트롤 플레인 : 쿠버네티스 클러스터 마스터에 해당됨. 아마존 EKS가 관리/운영함
2) 아마존 EKS 워커 노드 : 쿠버네티스 클러스터의 워커에 해당하며 아마존 EC2의 인스턴스로 생성됨.
3) 헬스체크 : 시스템을 구성하는 컨테이너가 정상적으로 실행 중인지 감시하는 것
4) 로드밸런싱 : 여러 컨테이너에 요청을 분배해 부하를 분산하는 것
댓글
댓글 쓰기