Kubernetes Object

uuuu.jini·2022년 9월 15일
0

Kubernetes

목록 보기
5/14

Object(오브젝트)란?


쿠버네티스의 오브젝트는 쿠버네티스 시스템에서 영구한 객체이다. 즉, 오브젝트가 생성되면 쿠버네티스는 이 상태를 영구히 유지하기 위해 작동한다. 쿠버네티스의 오브젝트는 spec(스펙)과 status(상태)를 가지는데, 여기에는 오브젝트를 생성한 의도나 오브젝트를 관리할 때 원하는 상태 등을 설정한다.

  • spec: 오브젝트를 생성할 때 리소스에 원하는 특징(의도한 상태)에 대한 설명을 제공해서 설정한다.
  • status: 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재 상태를 설명한다. 쿠버네티스 Control Plane은 모든 오브젝트의 실제 상태를 사용자가 의도한 상태와 일치시키기 위해 끊임없이 그리고 능동적으로 관리한다.

k8s 클러스터의 현재 상태 혹은 클러스터에 배포된 서비스의 현재 상태를 보관하고 표현하는 추상적인 개체를 가리킨다. object는 상태를 나타낸다. 상태는 크게 두 가지이다. 하나는 사용자가 원하는 상태, 나머지 하나는 현재 상태이다. 쿠버네티스는 현재 클러스터 상태가 사용자가 원하는 클러스터 상태에 도달할 수 있도록 끊임없이 k8s object들을 모니터링하고 조작하고 조정한다.

> K8s Controllers

controller는 object들을 기초해서 추가적인 기능과 편의성을 제공하는 개념이다. 즉, pod 같은 기본 objects를 특별한 기능으로 다룬다. controller라는 실용적인 기능을 object에 더해서 보다 편리하게 k8s를 사용할 수 있도록 도와준다.

즉, Controller도 좀 특별한 k8s object로 인식할 수 있고, 일반 object보다 기능적인면이 더해진 특별한 목적성을 갖는 object라고 볼 수 있다.

실제 k8s 사용시 pod 같은 object 보다는 deployment 같은 controller를 훨씬 더 많이 사용한다.

> K8s Control Plane

현재의 클러스터 상태를 사용자가 원하는 클러스터 상태로 끊임없이 조정해 주는 컨트롤 센터이다. control plane에는 실제 서비스와는 무관한 기본적인 k8s 클러스터의 운영과 관련 있는 컴포넌트들이 존재한다.

주로 사용자가 yaml 파일로 자신이 최종적으로 원하는 서비스(클러스터) 상태를 명세해서 k8s object와 controller를 정의한다. 이를 클러스터에 적용하면 k8s control plane에 있는 컴포넌트 들이 사용자가 바라는 상태대로 끊임없이 그리고 스마트하게 클러스터 상태를 맞춰 조정한다.

쿠버네티스의 기본 오브젝트 네 가지

  • Pod(파드): 쿠버네티스에서 실행되는 최소 단위이다. 독립적인 공간과 IP를 가진다.
  • Namespace(네임스페이스): 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해서 관리하는 그룹이다.
  • Volume(볼륨): 파드가 사라지더라도 저장/보존이 가능하며 파드에서 사용할 수 있는 디렉터리를 제공한다.
  • Service(서비스): 파드는 유동적이기 때문에 접속 정보가 고정되지 않으므로, 파드 접속을 안정적으로 유지하기 위한 기능이다.

https://confluence.curvc.com/pages/releaseview.action?pageId=98048155



쿠버네티스 구성 요소


1] 클러스터(Cluster)

워커 노드와 마스터 노드로 이루어져 있다. 각 노드는 물리적인 서버일 수도 있고 가상의 서버일 수도 있다. 네트워크로 구분되는 하나 하나의 서버이다.

2] 노드(Node)

마스터 노드: 클러스터 전체를 관리한다. 마스터 노드는 워커 노드의 수에 따라 3~7개 까지 정도로 달라지며 반드시 홀수여야 한다.(클러스터 관리시 상태값에 대한 합의를 진행하는데 짝수인 경우 합의가 되지 않는 경우 방지) 애플리케이션이 직접 실행되는 노드가 아니다.
워커 노드: 마스터 노드의 관리를 받아 애플리케이션을 실행시키는 노드이다. 개수의 제한은 없지만 쿠버네티스에서 제공하는 네트워크 플러그인에 따라 수백에서 수천개까지 워커노드의 수가 제한된다.

3] 디플로이먼트(Deployment)

마스터 노드에서 생성 되며 워커 노드에 컨테이너화된 애플리케이션이 떠있는지 모니터링 한다. 만약 노드가 다운되거나 삭제되어 애플리케이션이 동작하지 않는 경우 다른 노드에 애플리케이션을 생성한다. yaml 파일로 간단하게 설정이 가능하다.

4] 파드(Pod)

하나의 파드에는 여러개의 애플리케이션이 뜰 수 있다. 쿠버네티스에서 파드부터는 클러스트 내부 IP를 가지게 된다. 하지만 여기까지는 실행 중인 애플리케이션을 클러스터 외부로 서비스 할 수 없다. 외부에서 서비스하기 위해서는 서비스(Service)가 필요하다.

5] 서비스(Service)


서비스는 파드를 묶어 외부에 노출시키며 서비스들에게는 이름을 부여할 수 있다. 서비스만으로는 간단한 라우팅만 지원하므로 로드밸런싱이나 https같은 처리가 필요한 경우 인그레스를 사용한다.

6] 인그레스(Ingress0

클러스터 외부에서 트래픽을 받아서 라우팅 룰에 따라 서비스에 라우팅을 수행한다.

7] 파드의 스케일링

쿠버네티스의 기능 중 하나로서 스케일링 되는 단위는 파드기준이며 파드는 서비스로 묶여있다. 스케일 아웃과 스케일 줄이기가 가능하며 쿠버네티스에서는 오토스케일링 기준을 정해 줄 수 있는데 이때 기본적으로 CPU와 메모리 사용량으로 기준을 정해 줄 수 있다.

profile
멋쟁이 토마토

0개의 댓글