Search
Duplicate
📒

[Kubernetes Infra] 01-1. 쿠버네티스 아키텍쳐

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

쿠버네티스란 무엇인가?

NOTE
쿠버네티스컨테이너화된 워크로드와 서비스를 관리하기 위한 오픈소스 플랫폼이다!
쿠버네티스를 통해 선언적 구성자동화를 모두 용이하게 해주며, 쿠버네티스는 구글에서 2014년에 쿠버네티스 프로젝트를 오픈화 했다.

왜 쿠버네티스가 필요해졌는가?

전통적인 배포 시대
초기 조직은 애플리케이션을 물리 서버에서 실행했다. 그러나 리소스 할당 문제로 인해 성능 저하가 발생했다.
이에 대한 해결책으로 여러 물리 서버에서 애플리케이션을 실행하는 것도 고려되었지만, 비용 문제와 확장성 한계가 있었다.
가상화된 배포 시대
가상화는 단일 물리 서버에서 여러 가상 시스템 (VM)을 실행할 수 있는 방법을 제공한다.
가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.
가상화를 통해 리소스 활용이 효율적으로 이루어지고, 애플리케이션 추가 및 업데이트가 쉬워지며, 하드웨어 비용을 절감할 수 있다.
컨테이너 개발 시대
컨테이너는 VM과 유사하지만 애플리케이션 간에 운영체제(OS)를 공유하여 더 가볍고 이식성이 좋다.
컨테이너를 사용하면 인프라 종속성을 줄이고 클라우드 또는 다양한 OS 배포본에 적용할 수 있다.

Desired State

NOTE
쿠버네티스는 원하는 상태를 체크하고, 문제가 있다면 자동으로 조치한다!
상태 체크(Observer) → 차이점 발견(Diff) → 조치(Act)를 반복 (Controller에서 진행)
Desired State를 통해서 원하는 상태를 코드로 작성하면, 자동으로 수정이 가능해지며 이를 통해 배포가 편리해진다.

쿠버네티스 아키텍쳐

NOTE
쿠버네티스는 크게 MasterNode 2가지로 구성된다!
공식문서 이미지
스케쥴러, 컨트롤러와는 계속해서 반복적으로 통신(감시)함 (Desired State)
쿠버네티스의 개념은 크게 마스터 노드와 워커 노드 2개의 컴포넌트로 분리된다.
마스터 노드는는 쿠버네티스의 설정 환경을 저장(ETCD), 전체 클러스터를 관리하는 역할을 맡는다.
API 서버, 스케쥴러, 컨트롤러 매니저, ETCD
워커 노드는 파드나 컨테이너 처럼 쿠버네티스에서 동작하는 애플리케이션을 호스팅하는 역할을한다.
kubelet, kube-proxy, 컨테이너 런타임(docker)

Master - API Server / ETCD

NOTE
API Server는 쿠버네티스 클러스터의 주요 관리 인터페이스로, 클러스터의 상태와 리소스를 관리하기 위해 통신하는 게이트웨이다. (모든 요청은 API Server를 통한다!)
API Server에 들어온 모든 요청사항은 ETCD에 저장된다.
ETCD는 key-value 저장소로, 클러스터 관련 정보를 저장하는 곳이다. (고가용성 보장을 위함)

Master - Controller

NOTE
클러스터 내의 다양한 리소스 상태를 원하는 상태(Desired State)로 유지하기 위해 지속적으로 체크하고 조정하는 역할을 하는 반복적인 자동화 프로세스
아무것도 없는 상태 ≠ Python App이 Pod로 뛰워진 상태
원하는 상태(Desired State)현재 상태를 지속적으로 비교하며, 두 상태가 일치하도록 조치한다.
ex) Deployment, Node, Entpoints …

Master - Scheduler

NOTE
새로 생성된 파드를 적절한 워커 노드에 할당하는 역할을 담당하는 컴포넌트입니다.
스케줄러는 Pod를 실행할 수 있는 후보 노드들을 필터링하고, 이 과정에서 스케줄러는 각 노드의 리소스나 정책, 제약조건 등 다양한 요인을 고려한다.
필터링을 통과한 노드들 중에서, 스케줄러는 우선 순위 기능을 사용하여 각 노드에 점수를 매긴다.
가장 높은 점수를 받은 노드에 할당하라고 시킨다.

Worker - Kubelet

NOTE
Kubelet은 워커 노드에서 실행되는 컴포넌트이며, 마스터의 지시에 따라 파드를 실행하고 유지한다!
Kubelet을 통해 클러스터의 워커 노드와 파드의 상태를 지속적으로 감시하고 관리함으로써, 클러스터가 원활하게 동작하고, 애플리케이션이 예상대로 실행할 수 있게해준다!

Worker - Kube-Proxy

NOTE
새로 생성된 파드를 적절한 워커 노드에 할당하는 역할을 담당하는 컴포넌트입니다.
Kubeproxy - 서비스로 트래픽을 전달하는
클러스터의 상태변화(pod 추가/삭제)를 감지해서 iptables를 동적으로 업데이트 해준다.
쿠버네티스에서 서비스라 불리는 객체로 들어온 내/외부 트래픽을 어느 Pod로 포워딩할 것인지에 대한 규칙을 생성하고 관리하는 역할을 한다.
쿠버네티스에서 서비스는 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트를 의미하며, 이러한 서비스로 파드들이 접근 가능하도록 해주는 프로세스가 kube-proxy다.
트래픽 라우팅: 클러스터 내부의 ip주소:Port를 사용하여 트래픽을 적절한 pod로 라우팅 해준다.
로드 밸런싱: 여러 pod로 구성된 서비스에 설정된 로드 밸런싱을 사용해 요청을 분산한다.
모드: User Space, Iptable, IPVS 다양한 모드를 지원한다.