본문 바로가기
Cloud/kubernetes

[kubernetes] #2 - 기본 이해 (2/4) - API / 오브젝트

by 근육곰돌이 2022. 8. 22.
728x90

쿠버네티스는 공부를 잘 하기 위해서는 기본 이해를 하실때 용어와 클러스터링 개념 및 컨셉을 잘 이해하셔야 합니다.
클러스터링의 개념은 앞선 장에서 보시면 조금 이해하시는데에 도움이 되실겁니다.

이번 포스팅은 쿠버네티스의 API와 오브젝트에 대해 말씀드려볼까합니다.

먼저 들어가기전에 쿠버네티스는 항상 공식문서에도 내용이 잘 나와 있기때문에 보는 습관을 기르시는게 좋습니다.
* (참조) 공식 문서 * 
- 쿠버네티스 API 파트: https://kubernetes.io/ko/docs/concepts/overview/kubernetes-api/
- 쿠버네티스 오브젝트: https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/

 

또한 선행되어야 할 아키텍처에 대한 내용이 숙지가 되어 있지않으신 분은 이전 포스팅을 보시고 오시기 바랍니다.

https://musclebear.tistory.com/155

 

[kubernetes] #2 - 기본 이해 (1/4) - 아키텍처

이번 장에는 쿠버네티스의 기본 구성요소 (구조)에 대해 알아보겠습니다. 1. 아키텍처 쿠버네티스의 아키텍처는 생각외로 간단합니다. 쿠버네티스는 앞장에서 말씀드렸듯이 클러스터라고 보시

musclebear.tistory.com

 

 

1. 쿠버네티스 API란?

쿠버네티스에 대한 동작은 모두 API를 통해 이루어진다.
앞장에서 보았던 kubectl이 커맨드라인을 컨트롤하며 입력된 명령어는 마스터노드의 kube-apiserver에게 쿠버네티스 API규약에 맞게 기술된 목표 상태 선언문인 (yaml, json형태)매니페스트를 전송하여 오브젝트를 만들고, 수정하고, 삭제하는 일을 한다.

* kubectl 커맨드 입력 (매니페스트 전송) -> kube-apiserver (오브젝트) 동작 수행

이 API규약은 https://kubernetes.io/docs/reference/kubernetes-api/ 레퍼런스를 통해 알 수 있습니다.

보통은 kubectl로 매니페스트 파일을 관리하는형태로 많이 사용하지만,
필요에 따라 REST API로 다양한 언어에서 쿠버네티스 운영을 자동화 개발하는것도 가능합니다. (필자는 안해봤습니다. ^^;; 굳이..?)


2. 오브젝트

그럼 API로 전송받아 오브젝트를 만들어서 관리된다고 하였는데, 오브젝트란 과연 무엇일까요.?

쿠버네티스 오브젝트란?
k8s클러스터 내부의 엔티티로 하나의 "의도를 담은 레코드"입니다. 

- 어떤 컨테이너화된 애플리케이션이 동작중인지 (어느 노드에 있는지)
- 애플리케이션의 구동 정책, 업그레이드와 같은 동작에 대한 정책 기술

* 오브젝트의 구성단위
 1. 기본 오브젝트 
 2. 컨트롤러

오브젝트를 생성하게 되면 쿠버네티스는 그 오브젝트의 영속성을 보장하기 위해 지속적으로 동작합니다.

또한 쿠버네티스 오브젝트는 Spec(명세)와 status(상태)등의 값을 가지는데, 
- spec은 오브젝트를 생성할때 리소스에 원하는 특징에 대한 설명을 제공해서 설정
- status는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재상태를 설명

 

기본 오브젝트

오브젝트를 구성하는 단위로는 기본 오브젝트에는 네가지가 있다.
그 4가지로는 Pod, Service, Volume, Namespace로 구성됩니다.

이번 장에서는 간단하게 이해정도만 하시면 됩니다. "추후에 기본오브젝트+다른오브젝트에 대해서는 계속 포스팅 할 예정"입니다.

 - Pod (파드)
파드는 쿠버네티스에서 가장 기본적인 배포단위로, 컨테이너를 실행하기 위한 오브젝트입니다.
파드는 한개 혹은 여러개의 컨테이너를 담을수 있으며, 이 구조는 무언가를 담고 있다고하여 완두콩에 유래된 단어인 파드를 가져왔다고합니다. 파드에 대한 포스팅은 "다음장"에 자세히 다룰려고 합니다.

- Service (서비스)
쿠버네티스에서의 서비스는 파드와 클라이언트를 연결하는 역할을 수행합니다. 여러개의 Pod가 존재할 수 있으며, 접속정보가 고정되지 않아 IP를 도메인형태로 묶어 파드의 서버역할을 합니다. 즉 대표 IP를 취득하여 내부 DNS에 등록하며, 대표 IP주소로 파드들의 트래픽 부하분산하는 전송 매체가 됩니다. 

 

- Volume (볼륨)
파드가 기동할때 기본적으로 컨테이너마다 로컬 디스크를 생성해서 가동하는데, 컨테이너의 로컬디스크 같은 경우는 영구적이지 못합니다.
즉, 컨테이너는 휘발성 디스크이므로 데이터베이스와 같은 영구적으로 데이터를 저장해야하는 경우에 (컨테이너 리스타트 관계없이) 파일을 영속적으로 유지하기 위해 스토리지 볼륨을 사용합니다. (외장 디스크의 개념과 유사)

 

- NameSpace (네임스페이스)
네임스페이스는 쿠버네티스 클러스터에서 사용되는 리소스들을 논리적으로 구분해서 관리할 수 있는 분리 단위로 보면 됩니다.
파드, 서비스, 볼륨등 네임 스페이스 별로 생성/관리를 할 수 있으며, 사용자 권한 역시 나눠서 분리가 가능합니다.

이점
- 사용자별 접근 권한 설정
- 네임스페이스별 리소스 할당량 지정 가능
- 네임스페이스별 오브젝트 분리 가능 (pod, service, configmap...)


이 장에서는 간단하게 API와 오브젝트에 대한 간단한 내용만 언급하였습니다.

 

 

차후 포스팅에서는 "파드"와 "서비스"등 중요한 내용을 세부적으로 작성해볼까 합니다. 
이전 포스팅때 작성 후 늦게 포스팅하긴했지만, 그래도 누군가에게 도움이 되고, 저도 정리하는 시간이 되어서 좋습니다.


반응형