쿠버네티스 기본 개념

mingg·2024년 1월 2일
0

클라우드

목록 보기
4/4

쿠버네티스란(K8s)?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.

쿠버네티스의 가장 큰 설계 원칙 = 선언적 API

선언적이라고 하는 것은 컨테이너가 원하는 상태를 쿠버네티스에 설정해놓으면 쿠버네티스는 계속 컨테이너 상태 확인하고 설정한 상태가 아니면 거기에 맞춘다.

설정한 이후엔 ⇒ 현재상태 확인 → 설정한 상태와 비교 → 설정한 상태로 맞춤

이렇게 하면 정의해 준대로 자동으로 유지가 되서 관리 비용이 많이 줄어든다.

쿠버네티스를 이용하면 로드밸런싱, 배포, 확장, 장애조티 등 컨테이너화된 어플리케익션을 탄력적으로 실

클러스터란?

쿠버네티스 내 가장 큰 단위로, 가상 서버들이 속한 클라우드를 뜻한다.

쿠버네티스에서 서버는 노드라는 단위로 불리고 클러스터는 마스터 노드와 워커 노드를 모두 합친것이라고 볼 수 있다.

노드란?

클러스터 내 가상 서버 즉, 컴퓨팅 엔진 단위

클러스터 다음으로 큰 단위이며, 마스터 노드와 워커 노드로 분리돼 있다.

  • 마스터 노드: 전체 쿠버네티스 시스템을 관리 및 통제하는 쿠버네티스 컨트롤 플레인을 관장 (위 사진 참고)
  • 워커 노드: 배포하고자 하는 어플리케이션의 실제 실행을 수행

마스터노드가 죽으면 클러스터를 관리할 수 없어서 일반적으로는 3개정도의 마스터 노드를 띄우는데 실제로 관리하는 노드는 하나고 나머지는 대기중이다.

파드란?

파드란, 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위다.

그리고 이와 동시에, 하나 이상의 컨테이너 그룹을 뜻한다.

파드와 컨테이너의 차이?

  • 컨테이너는 어플리케이션을 말하고 이건 완전한 어플리케이션일수도 있고 일부 기능일 수도 있다.
  • 만약 일부 기능이라면 여러개의 컨테이너들이 모여 완전한 어플리케이션 구성! → 이때는 여러개의 컨테이너가 모여 하나의 파드가 됨
  • 만약 하나의 컨테이너가 완전한 어플리케이션을 구성한다면? → 하나의 컨테이너가 하나의 파드가 될 수 있다.

⇒ 파드에 정의된 여러개 혹은 하나의 컨테이너는 완전한 하나의 어플리케이션으로 동작

components-of-kubernetes.svg

Control plane (마스터용 컴포넌트)

실제 클러스터 전체 관리

클러스터에 관한 전반적인 결정(ex 스케쥴링)을 수행하고, 클러스터 이벤트(ex 디플로이먼트의 replicas 필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드를 구동시키는 것)를 감지하고 반응한다.

kube-apiserver

API 서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. API 서버는 쿠버네티스 컨트롤 플레인의 프론트 엔드이다.

쿠버네티스의 모든 요청은 여길 거쳐 다음 컴포넌트로 전달됨

etcd

모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소

kube-scheduler

노드가 배정되지 않은 새로 생성된 파드 를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트.

파드를 처음 실행할 때 조건을 설정하는데 얘가 그 조건에 맞는 파드를 찾음

kube-controller-manager

controller 각각을 실행하는 컴포넌트

cloud-controller-manager

클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다.

노드 컴포넌트

쿠버네티스 실행 환경 관리

동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공

kubelet

클러스터의 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.

PodSpec을 전달받아 컨테이너를 실행/헬스체크

Kubelet은 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다.

kube-proxy

클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부이다.

노드의 네트워크 규칙을 유지 관리. 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 해준다.

컨테이너 런타임

컨테이너 실행을 담당하는 소프트웨어

구성요소

레플리카셋

레플리카셋은 파드의 수를 보장하기 위한 개념

디플로이먼트

어플리케이션을 배포하고 업데이트를 수행하는 리소스

디플로이먼트는 레플리카셋 컨트롤러를 제어하기때문에 레플리카셋을 생성하는 역할도 수행한다.

디플로이먼트를 이용해서 어플리케이션을 배포, 업데이트 해야하는 이유는 안정성 때문이다.

서비스

파드들은 각각의 IP주소를 갖는다.


어플리케이션의 레플리카셋을 3으로 설정하면 3개의 파드가 띄어질것이다. 이때 어떠한 이유로 하나의 파드가 삭제되면 디플로이먼트는 레플리카셋 값을 맞추기 위해 하나의 파드를 새로 생성할 것이다.

3개의 파드는 각각의 IP주소를 갖고 새로운 파드도 새 IP주소를 할당받게 되는데 여기서 사용자에게는 하나의 IP만 제공하고 싶다면?

서비스를 이용하면 파드가 여러개/재생성되어도 하나의 IP로 접속할 수 있게 설정 가능하다.


서비스란 파드 집합에서 실행중인 어플리케이션을 네트워크 서비스로 노출하는 추상화 리소스이다.

라벨을 통해 특정 어플리케이션 집단의 파드들만 하나의 IP로 연결이 가능하다.

profile
혼자 이것저것 해보는걸 즐깁니다..!

0개의 댓글