본문 바로가기
K8S

쿠버네티스 특징과 구조

by Rainbound-IT 2021. 7. 21.
반응형

특징

  • Immutable infrastructure
  • 선언적 설정
  • 자기 복구 기능

1. 필요할때 생성하고 필요없을때 파기

2. 매니페스트파일에 구성을 만들어 인프라 구성

3. 자기복구기능 오류가 생기면 쿠버네티스 자신이 자동으로 api를 사용하여 재시작시키거나 복구한다.

 

 

 

쿠버네티스 오케스트레이션 수행 방법

애플리케이션이 디플로이 되면 쿠버네티스가 클러스터상에서 비어 있는 위치를 찾아내서 자동으로 배치한다.

 

스케줄링

애플리케이션을 적절한 곳에 디플로이하는 장치를 스케줄링이라고 한다.

 

서비스 디스커버리

 예를 들어 리퀘스트를 받은 프론트 엔드 애플리케이션이 사용자의 트랜잭션을 처리하기 위해 백엔드 서비스를 호출한다고 치자

여기서 디플로이된 애플리케이션이 어디에 있는지를 찾아내는 장치를 서비스 디스커버리 라 한다.

쿠버네티스는 클러스터안에 구성 레지스트리를 갖고 있어서 이를 바탕으로 서비스 디스커버리를 동적으로 수행한다.

연동에 필요한 서비스를 찾는 기능을 서비스 디스커버리라고 한다.

 

 

쿠버네티스의 서버 구성

마스터 

쿠버네티스 클러스터 전체를 관리하는 역할을 담당한다. 여러 대로 이루어진 클러스터 안의 노드의 리소스 사용 상황을 확인하고 컨테이너를 가동시킬 노드를 자동으로 선택한다. 마스터는 etcd라는 분산 키 밸류 스토어(KVS)를 사용하여 클러스터의 구성정보를 확인한다.

(마스터의 API가 클러스터 전체를 제어한다)

 

노드

컨테이너 애플리케이션이 작동하는 서버이다.

클라우드에서는 VM이 노드가 되는 경우가 일반적이다.

쿠버네티스는 컨테이너의 기본 런타임이 도커이지만 rkt와 같이 다른 런타임인경우도 있다.

런타임(runtime) : 실행되고 있는 동작, 환경(환경은 정확히 말해 runtime evionment라고 하지만 줄이는것같다.

 

 

쿠버네티스의 컴포넌트

쿠버네티스에서는 각 컴포넌트가 자율적으로 움직인다.

각 컴포넌트는 다른 컴포넌트를 API를 통해 호출한다.

 

마스터의 컴포넌트

1. API server

 쿠버네티스의 리소스 정보를 관리하기 위한 프론트엔드 REST API이다.

각 컴포넌트로부터 리소스 정보를 받아 데이터스토어(etcd)에 저장하는 역할

다른 컴포넌트들은 API Server를 통해 이 etcd의 정보에 액세스 한다.

kubectl명령을 사용하거나 애플리케이션 안에서 API Server에 액세스하거나 호출할 수 있다.

 

2. 스케줄러

포드를 어느 노드에서 작동시킬지를 제어하기 위한 백엔드 컴포넌트이다.(빈공간 찾아 포드 실행)

 

3. 컨트롤러 매니저

쿠버네티스 클러스터의 상태를 감시하고 본래 되어야 할 상태를 유지하는 백엔드 컴포넌트

정의 파일에서 정의한 것과 실제 노드나 컨테이너에서 작동하고 있는 상태를 모아서 관리한다.

 

4. 데이터스토어(etcd)

쿠버네티스 클러스터 구성을 유지하는 분산 KVS이다.

데이터를 Key-Value 형으로 관리한다.

어떤 포드를 어떻게 배치할지와 같은 정보를 갖고 있어서 API Server가 이를 참조한다.

바로 여기에 매니페스트의 내용이 저장되어 있다.

이 데이터스토어는 마스터서버에서 분리 시킬수 있다.

 

Distributed Key-Value Store
모든 데이터를 키값 쌍으로 저장하도록 설계된 데이터 저장소
몇 kb 정도의 데이터를 초당 수만번 읽고 쓰는 경우
모든 데이터에 고유의 키를 지정하고 그것을 부하 분산을 위해 이용
키가 정해지면 그 값을 클러스터의 어느 노드에 배치할 것인지 결정
이 구조에 의해 노드 간에 부하를 균등하게 분산하고 노드를 증감하는 것만으로 클러스터의 성능을 변경할 수 있게 되어있음

 

 

노드

노드의 역할은 실제로 컨테이너 애플리케이션을 움직여 서비스를 제공하는 것이다.

동일한 노드의 역할을 시스템의 부하나 요건에 따라 몇 대 ~몇 천 대 규모로 확장 가능

실제 컨테이너 애플리케이션의 실행은 커네이너 런타임이 수행한다.

 

1. kubelet

 포드 정의 파일에 따라 컨테이너를 실행하거나 스토리지를 마운트 하는 기능을 갖고 있다.

노드의 스테이터스를 정기적으로 감시하는 기능을 가지고 있어 정기적으로 API Server에 통지한다.

 

2. kube-proxy

다양한 중계 및 변환을 수행하는 네트워크 프록시이다.

 

 

클러스터에 액세스하기 위한 인증정보

kubctl 명령을 실행하여 클러스터를 조작할 수 있는데

이것은 API Server를 원격으로 호출하여 동작한다고 볼수 있다.

 

여기서 안전한게 통신하려면 연결할 서버의 정보와 인증 정보등이 필요하다.

kubectl 명령은 홈 디렉토리 아래의 '~/.kube/config'에 기록되어 있는 정보를 바탕으로 클러스터에 연결한다.

 

 

  1.  클러스터에 대한 연결 정보 - kubectl 명령을 실행했을 때의 연결 클러스터 정보를 설정한다.
  2.  클러스터와 사용자 정보의 콘텍스트 -어떤 사용자가 어떤 클러스터에 연결할 수 있는지 매핑을 설정한다. 여러 사용자나 클러스터를 전환할 수 있다.
  3. 액세스하는 사용자정보 - 쿠버네티스 클러스터에 액세스하는 사용자의 사용자 이름과 인증 키 등을 설정합니다.
반응형

'K8S' 카테고리의 다른 글

매니페스트 파일  (0) 2021.07.22
쿠버네티스의 리소스  (0) 2021.07.22
쿠버네티스 디플로이  (0) 2021.07.21
kubectl 명령어 기본조작  (0) 2021.07.21
Azure를 사용한 쿠버네티스 클러스터 작성  (0) 2021.07.20

댓글