쿠버네티스 API란?
쿠버네티스의 대한 조작은 모두 API를 통해 이뤄진다.
커맨드 라인 유저 인터페이스인 kubectl은 마스터 노드상의 kube-apiserver에게 쿠버네티스 API 규약에 맞게 기술된 목표 상태 선언서인 매니페스트를 YAML 형식 혹은 JSON 형식으로 전송하여 오브젝트를 만들고, 바꾸고, 제거하는 일을 한다. 이 API 규약은 새로운 버전이 공개될 떄마다 추가나 변경된 점이 반영된 API 래퍼런스가 공개된다.
오브젝트란?
쿠버네티스 오브젝트란 클러스터 내부의 엔티티로서, 이후 설명할 파드, 컨트롤러, 서비스 등의 인스턴스를 의미한다.
각각의 오브젝트는 쿠버네티스 API의 리소스 종류에 맞게 설정되고 생성된다.
오브젝트는 지정된 상태가 유지되도록 쿠버네티스에 의해 제어된다.
각 오브젝트는 메타데이터에 기술된 이름에 의해 식별된다. 따라서 오브젝트를 만들 때는 반드시 이름을 부여해야 한다.
같은 종류의 오브젝트의 이름은 하나의 네임스페이스(Namespace)에서 반드시 유일해야 한다.
네임스페이스는 클러스터를 논리적으로 분할하여 사용하기 위해 존재하는 기능이다.
예를 들어, 쿠버네티스의 시스템 관련 기능을 수행하는 오브젝트들은 일반적인 애플리케이션들과 구별하여 네임스페이스 kube-system에 만들어진다. 그리고 kubectl의 유효 범위는 지정한 네임스페이스로 제한된다.
워크로드(Workload)
오브젝트의 카테고리를 나타내는 용어로 컨테이너와 파드, 그리고 컨트롤러의 그룹을 의미한다.
이들은 컨테이너의 실행을 관리하기 위해 사용된다.
컨테이너(Container)
쿠버네티스에서는 컨테이너만을 독자적으로 실행하는 것은 불가능하고, 반드시 파드 내에서 실행해야 한다.
컨테이너 기동 시 설정할 수 있는 항목은 이미지의 이름, 실행 명령어, 실행 인자, 환경 변수, 볼륨, CPU 사용 시간과 메모리 크기의 요청값 및 상한값 들이 있다.
파드(Pod)
파드는 컨테이너를 실행하기 위한 오브젝트이다.
파드는 한 개 혹은 여러 개의 컨테이너를 담을 수 있으며, 이 구조는 완두콩이 콩을 담고 있는 모양과 비슷하다.
그래서 꼬투리를 의미하는 영어 단어 Pod가 이름이 되었다.
컨트롤러(Controller)
컨트롤러는 파드의 실행을 제어하는 오브젝트로서, 여러 종류의 컨트롤러가 있어 각 컨트롤러의 기능을 이해하고 목적에 맞게 적절히 구별해서 사용해야 한다.
예를 들어, 클라이언트서버 모델에 적합한 디플로이먼트 컨트롤러는 서버가 돌아가는 파드의 개수가 지정한 숫자보다 적으면, 자동으로 지정한 개수가 되도록 파드를 기동시킨다. 그리고 배치 처리를 위한 잡 컨트롤러는 배치 처리가 정상 종료될 때까지 재실행을 반복한다.
설정(Configuration)
컨테이너 내 애플리케이션의 설정값이나 비밀번호 등의 정보는 배포된 네임스페이스로부터 취득하는 것이 좋다.
이를 위해 설정을 저장할 수 있는 컨피그맵(ConfigMap)과 비밀번호와 같은 기밀 정보를 담기 위한 시크릿(Secret)이라는 오브젝트가 있다. 이들을 통해 네임스페이스에 저장된 정보는 컨테이너 내의 파일이나 환경 변수를 통해 애플리케이션에서 참조할 수 있다.
서비스(Service)
쿠버네티스에서의 서비스는 파드와 클라이언트를 연결하는 역활을 수행한다.
즉, 서버 역활을 수행하는 파드가 클라이언트의 요청을 받을 수 있도록 대표 IP 주소를 취득하여 내부 DNS에 등록한다.
그리고 대표 IP 주소로의 요청 트래픽을 지정된 파드들에 부하분산하며 전송하는 역활도 수행한다.
스토리지(Storage)
파드나 컨테이너는 실행 시에만 존재하는 일시적인 조재이기 때문에 중요한 데이터를 컨테이터의 파일 시스템에 저장해서는 안된다. 데이터를 잃지 않기 위해서는 퍼시스턴트 볼륨을 사용하여 전원이 꺼져도 데이터가 유지되는 스토리지 시스템에 데이터를 저장해야 한다.
그런데 복수의 노드에서 접속 가능한 퍼시스턴트 볼륨은 쿠버네티스의 범위에 포함되지 않기 때문에 외부 스토리지 시스템을 연동해야 한다. 다양한 외부 스토리지 시스템의 프로토콜과 API의 차이점을 은폐하기 위해 쿠버네티스는 스토리지를 계층적으로 추상화한 오브젝트를 제공한다.
'Docker & Kubernetes' 카테고리의 다른 글
파드의 라이프 사이클과 종료 처리 (0) | 2021.11.23 |
---|---|
파드의 기본 (0) | 2021.11.23 |
쿠버네티스의 아키텍처 및 계층 구조 (0) | 2021.11.23 |
컨테이너의 이해(3/3) - 도커와 쿠버네티스의 관계 (0) | 2021.11.21 |
컨테이너의 이해(2/3) - 도커의 아키텍처 (1) | 2021.11.21 |