쿠버네티스 살펴보기 | 3. 쿠버네티스 기초 용어

nawnoes·2021년 7월 19일
0

Kubernetes

목록 보기
3/4

쿠버네티스 살펴보기 | ① 쿠버네티스 개요

쿠버네티스 학습을 위한 제타위키 쿠버네티스 용어를 정리

쿠버네티스 기초 용어

쿠버네티스에 사용하는 기본 용어들에 대해 알아본다

필수 용어

  • Cluster, 클러스터: 노드라고 불리는 머신들의 집합으로 쿠버네티스가 관리하는 컨테이너화 된 애플리케이션들을 기동한다. 클러스터는 여러개의 워커노드와 1개 이상의 마스터 노드로 구성된다.

  • Deployment, 디플로이먼트: 복제된 애플리케이션을 관리하는 API 객체. 각 레플리카는 각각 하나의 Pod로 대표되며, Pod들은 클러스터 내 노드들에 걸쳐 배포된다.

  • kube-proxy, 큐브-프록시: 클러스터 내 각 노드에서 실행되는 네트워크 프록시

  • Node, 노드: 쿠버네티스의 Worker 머신. 워커 머신은 클러스터에 속하는 VM이거나 물리 머신이다. 노드는 Pod들을 구동하기 위해 필요한 서비스들을 가지며, 마스터 컴포넌트에 의해 관리된다. 노드상의 서비스들로는 Docker, kubelet, kube-proxy가 포함된다.

  • Pod, 파드: 쿠버네티스의 최소 단위 객체를 말한다. 클러스터 상에서 동작하는 컨테이너의 집합이다. 흔히 파드는 단일 프라이머리 컨테이너를 구동하기 위해 셋업된다. 추가로 로깅과 같은 보조기능을 가지는 추가 사이드카 컨테이너를 구동할수 있다.

    Pod들은 일반적으로 Deployment로 관리된다.

  • Service, 서비스: Pod 집합과 같은 애플리케이션들에 대해 접근하는 방법을 기술하는 API 객체. 포트와 로드밸런서를 기술할 수 있으며 클러스터에 대한 액세스 포인트는 내부(internal) 일수도 외부(external)일 수도 있다.

기초 용어

  • Container, 컨테이너: 경량화되고 실행가능한 이미지를 말한다. 소프트웨어와 그에 필요한 의존성 모듈들을 포함하며 컨테이너는 하부의 호스트 인스파스트럭처로부터 애플리케이션을 분리함으로써 배포하거나 스케일링하는 것을 간편하게 해준다.

  • Container Environment Variable, 컨테이너 환경변수: 컨테이너들 내부로 유용한 정보를 제공하는 키/값으 쌍들. 작동 중에 필요로하는 중요 리소스 정보를 컨테이너에 제공한다.

  • Controller, 컨트롤러: API 서버를 통해 클러스터 공유된 상태를 감시하고, 현재 상태를 원하는 상태로 이행시키도록 하는 컨트롤 루프.

    컨트롤러 종류:레플리케이션 컨트롤러, 엔드포인터 컨트롤러, 네임스페이스 컨트롤러, 서비스어카운트 컨트롤러

  • CustomResourceDefinition, 커스텀 리소스 정의: 커스텀 서버를 구축하는 대신 쿠버네티스 API 서버에 추가하기 위해 리소스를 정의하는 커스텀 코드. 지원되는 API 리소스가 요구조건에 맞지 않는다면, 커스텀 리소스 정의를 통해 쿠버네티스 API를 확장할 수 있다.

  • DaemonSet, 데몬셋: Pod 복사본이 클러스터 내 어느 노드 집합에서든 잘 동작하게 한다. 일반적으로 모든노드에서 동작해야하는 로그 수집기나 모니터링 에이전트와 같은 시스템 데몬을 배포하는데 사용한다.

  • Docker, 도커: OS수준의 가상화를 제공하는 소프트웨어 기술. 도커는 리눅스 커널의 리소스 격리 기능과 유니온 마운트 가능 파일시스템을 이용해 독립된 컨테이너들이 하나의 리눅스 인스턴스내에 동작할 수 있도록 하는 소프트웨어이다. 기존의 가상 머신 대비 경량화되어 오버헤드를 줄일 수 있다.

  • Image, 이미지: 애플리케이션 실행에 필요한 소프트웨어 집합을 가지고 있는 저장된 컨테이너 인스턴스. 컨테이너 레지스트리에 저장하고, 로컬 시스템으로 가져오고, 애플리케이션으로서 실행할 수 있는 소프트웨어 패키징 방법이다. 이미지 내에 포함되는 메타데이터에는 동작해야할 실행파일, 누가 빌드했는지 등의 여러 정보를 담을 수 있다.

  • Init Container, 이닛 컨테이너: 1개 이상의 초기화 컨테이너. 앱 컨테이너 실행전에 구동 완료 되어야 한다. 초기화(init) 컨테이너는 일반적인 앱 컨테이너와 거의 유사하지만 다른 부분이 존재한다.

    모든 앱 컨테이너들이 시작하기전에 구동이 완료되어야 한다. init 컨테이너는 다음 init 컨테이너가 시작하기 전에 구동 완료되어야 한다.

  • Job, 잡: 완결적으로 수행되는 유한 배치 작업. 1개 이상의 Pod 객체를 생성하고, 지정한 개수만큼 완료되게 된다.

  • kube-apiserver, 쿠브-api서버: 쿠버네티스 API를 노출하는 마스터상의 컴포넌트. 쿠버네티스 컨트롤 플레인에 대한 프론트엔드로 수평적인 스케일링을 위해 설계 되었다.

  • kube-controller-manager, 쿠브-컨트롤러-매니저: 쿠버네티스에서 컨트롤러를 구동하는 마스터 상의 컴포넌트이다. 논리적으로 개별 컨트롤러는 개별 프로세스이지만 복잡성을 낮추기 위해 모두가 단일 바이너리로 컴파일 되고 단일 프로세스 내에서 실행된다.

  • kubectl, 쿠브컨트롤: 쿠버네티스의 API 서버와 통신하는 커맨드라인 도구. kubectl을 이용해 쿠버네티스 객체를 생성하고 검사하며 업데이트 및 삭제 할 수 있다.

  • kubelet, 쿠블릿: 클러스터 내 각 노드에서 실행되는 에이전트로 kubelet은 다양한 메커니즘으로 제공된 podspec 집합을 가지며, podspec에 기술된 컨테이너들이 정상적으로 동작하도록 한다. kubelet은 쿠버네티스에 의해 생성되지 않은 컨테이너들은 관리하지 않는다.

  • kubernetes API, 쿠버네티스 API: RESTful 인터페이스를 통해 쿠버네티스 기능을 제공하고, 클러스터 상태를 저장하는 애플리케이션. 쿠버네티스 리소스와 의도된 레코드들은 모두 API 객체로 저장되며, API에 대한 RESTful 호출을 통해 변경된다. API는 선언적인 방식으로 관리되며, 사용자는 쿠버네티스 API와 직접 인터페이스하거나 kubectl과 같은 도구를 통해 인터페이스 할수 있다.

  • label, 레이블: 사용자에게 의미있는 속성들을 식별하는 태그 객체로 레이블은 Pod 등 객체에 부착되는 키/값 쌍들이다. 일부 객체들을 묶음 짓거나 선택하기 위해 사용된다.

  • Minikube, 미니쿠브: 로컬에서 쿠버네티스를 구동시키는 도구. 미니쿠브는 하나의 VM내에서 단일 노드 클러스터를 실행시킨다.

  • Name, 네임: 리소스 URL(/api/v1/pod/some-name)에 대한 객체를 참조하는 문자열로 클라이언트가 생성한다. 주어진 종류kind 내에서 특정한 이름은 동시에 하나의 객체만이 가질 수 있다. 해당 객체를 삭제하고 나면 그 이름으로 새로운 객체를 만들수 있다.

  • Namespace, 네임스페이스: 동일한 물리클러스터에서 여러 가상 클러스터를 지원하기 위해 쿠버네티스가 사용하는 추상화 방법. 네임스페이스는 클러스터 내의 객체들을 묶을 때 사용하며, 클러스터 내 리소스를 구분한다. 리소스의 이름은 하나의 네임스페이스 내에서 Unique 해야한다.

  • Pod Security Policy, Pod 보안 정책: Pod 생성 및 업데이트에 대한 세밀한 권한 인증기능을 제공한다. Pod 스펙에 대한 보안적인 측면을 통제하는 클러스터-수준 리소스. PodSecurityPolicy 객체는 관련 필드들에 대해 기본값들을 포함하며, Pod가 시스템 내로 받아들여지기 위해 구동될때의 조건들 집합을 정의한다.

  • RBAC(Role-Based-Access-Control), RBAC: 정책 권한인증 결정을 관리한다. 쿠버네티스 API에 대한 접근 정책을 관리자가 동적으로 설정가능하다. RBAC는 퍼미션 규칙을 포함하는 roles와 사용자 집합에 역할로 정의된 퍼미션을 승인하는 role binding을 한다.

  • ReplicaSet, 레플리카셋: 차세대 레플리케이션 컨트롤러로 ReplicationController와 마찬가지로 특정한 수의 Pod 레플리카들이 동시에 동작하도록 한다. 그러나 Replication Controller에 추가로 집합 기반의 셀렉터 요건도 지원한다.

  • Resource Quota, 리소스 쿼타: 네임스페이스 당 리소스 총 소비량을 제한하는 제약. 프로젝트 내에서 리소스들이 소비할 수 있는 컴퓨팅 리소스 총량 뿐만 아니라, 유형에 따라 하나의 네임스페이스 내에서 생성할 수 있는 객체의 수량을 제한한다.

  • Selector, 셀렉터: 레이블 기준으로 리소스 목록을 필터링 할 수 있게한다. 레이블로써 리소스를 필터링하기 위해 리소스 목록을 조회할 때 적용된다.

  • Service Account, 서비스 어카운트: Pod 내에서 동작하는 프로세스에 대한 식별을 제공한다. Pod 내 프로세스들이 클러스터에 접근할때, 특정 서비스 계정으로 API 서버에게 인증을 받는다. Pod를 생성할 때 서비스 계정을 지정하지 않으면, 동일 네임스페이스 내의 기본 서비스 계정이 자동으로 할당된다.

  • StatefulSet, 스테이트풀셋: Deployment, Pod의 스케일링을 관리하고, Pod들에 대한 배치와 유일성을 보장한다. Deployment와 마찬가지로 동일 컨테이너 스펙을 기반으로 Pod들을 관리하지만 Deployment와 달리 Pod 각각에 대해 스티키 identity를 유지한다. Pod들은 같은 스펙으로 생성되지만 교체는 불가능 하다. 각각은 persisitent 식별자를 가지며, 리스케줄링시에도 계속 유지된다. StatefulSet은 기타 다른 컨트롤러와 같은 패턴으로 운영된다.

  • UID, UID: 객체 실별자 문자열로 쿠버네티스 시스템이 생성한다. 쿠버네티스 클러스터의 전체 수명주기에 걸쳐 생성되는 모든 객체는 각각 UID를 가진다. 유사한 개체들의 발생 이력들을 구분하기 위한것이다.

  • Volume, 볼륨: 데이터를 담는 디렉토리로 Pod내 컨테이너들의 접근가능하다. 쿠버네티스 볼륨 pod에 소속되는 동안 유지된다. 즉, 볼륨은 pod 내에 구동되는 컨테이너들보다 오래 유지되며, 그 데이터는 컨테이너가 재시작 되더라도 계속 보존된다.

마무리

쿠버네티스에서 사용하는 기본적인 용어들에 대해 확인해보았다. 제타위키 쿠버네티스 용어집을 통해 추가로 더 확인할 수 있으며, 다음에는 쿠버네티스 튜토리얼을 따라가보도록 한다.

0개의 댓글