본문 바로가기

클라우드

개발자를 위한 도커(Docker)의 기본 개념 (2) - 쿠버네티스편

728x90
반응형

쿠버네티스(Kubernetes)란?

컨테이너 운영을 자동화하기 위한 컨테이너 오케스트레이션 도구.

여러 서버에 걸쳐있는 컨테이너들이 협조적으로 연동될 수 있도록  API, CLI(kubectl) 등을 제공하는 통합 시스템입니다.

대표적인 기능으로는 서버 리소스를 효율적으로 사용할 수 있도록 하기 위한 컨테이너 배채, 스케일링, 로드밸런싱, 헬스 체크 등이 있습니다.

 

쿠버네티스는 아래와 같은 리소스를 연동하고 협조함으로써 컨테이너 시스템을 구성하게 됩니다.

리소스 용도
노드(Node) 컨테이너가 배치되는 서버
네임스페이스 쿠버네티스 클러스터 내의 가상 클러스터
파드(Pod) 컨테이너 집합 중에서 가장 작은 단위이며, 컨테이너 실행 방법을 정의함
레플리카세트 같은 스펙을 갖는 파드를 여러개 복제 및 생성하여 관리하는 역할
디플로이먼트 레플리카세트보다 상위에 해당하는 리소스로, 레플리카세트의 리비전을 관리
배포의 기본 단위가 되는 리소스임
서비스 파드의 집합에 접근하기 위한 경로를 정의
인그레스(ingress) 서비스를 쿠버네티스 클러스터 외부로 노출시킴
컨피그맵 설정 정보를 정의하고 파드에 전달
퍼시스턴트볼륨 파드가 사용할 스토리지의 크기 및 종류를 정의,
퍼시스턴트볼륨클레임을 통해 퍼시스턴트 볼륨을 동적으로 확보함
스토리지클래스 퍼시스턴트볼륨이 확보하는 스토리지의 종류 정의
스테이트풀세트 같은 스펙으로 모두 동일한 파드를 여러개 생성 및 관리
파드 집합의 디플로이먼트와 스케일링을 관리
잡(job) 항상 실행되지 않아도 되는 파드를 여러개 생성하여 실행 및 정상적인 종료를 보장함
크론잡을 통해 크론 문법으로 스케줄링 가(크론잡)
시크릿 인증 정보와 같은 기밀 데이터 정의
네임스페이스 내에서 조작 가능한 쿠버네티스의 리소스 규칙 정의
롤바인딩을 통해 쿠버네티스 리소스 사용자와 롤을 연결지음
클러스터롤 클러스터 전체적으로 조작 가능한 쿠버네티스 리소스의 규칙을 정의
클러스터롤바인딩으로 쿠버네티스 리소스 사용자와 클러스터 롤을 연결지음
서비스 계정 파드가 쿠버네티스 리소르르 조작할 때 사용하는 계정

 

쿠버네티스 클러스터와 노드

클러스터는 쿠버네티스의 여러 리소스를 관리하기 위한 집합체로, 노드를 포함하고 있습니다.

노드는 도커 호스트로 컨테이너가 배치되는 대상입니다.

클러스터 안에는 클러스터 전체를 관리하는 역할을 맡는 마스터 노드가 반드시 하나 이상 있어야 합니다.

또한, 마스터 노드에는 관리용 컴포넌트를 제외한 파드들(ex. application 구동을 위한 파드)은 배치할 수 없습니다.

노드 안에는 필요한 컨테이너들이 배치될수 있으며, 리소스나 운영 상황에 따라 노드에 배치된 컨테이너 개수가 서로 다를 수 있습니다.

 

쿠버네티스의 리소스

파드 (Pod)

파드는 컨테이너가 모인 집합체의 단위로, 하나 이상의 컨테이너가 들어있습니다.

(ex. Nginx Container와 어플리케이션 구동 Container는 하나의 파드로 묶일 수 있습니다.)

연관성과 결합이 높은 컨테이너는 보통 하나의 파드로 묶어 일괄 배포가 가능하며, 여러 노드에 걸쳐서 배치하는 것은 불가능합니다.

보통은 하나의 파드에 함께 배포해야 정합성을 유지할 수 있고 하나의 노드에서 작동해야하는 만큼의 크기를 담습니다.

레플리카세트와 디플로이먼트

규모가 있는 어플리케이션은 같은 파드를 여러 개 실행해 가용성을 확보할 필요가 있는데,

매니페스트 파일은 파드를 하나밖에 정의하지 못하기 때문에 이를 여러 개 생성 및 관리하기 위한 레플리카세트가 필요합니다.

yaml 파일에 레플리카세트와 파드를 함께 정의하며, replicas를 통해 파드의 복제본을 몇 개 만들건지 조절합니다.

 

디플로이먼트는 배포의 기본단위가 되는 리소스로, 레플리카세트를 관리 및 다루기 위해 사용하는 리소스입니다.

히스토리 등을 통해 리비전 확인이 가능합니다.

 

서비스

서비스는 클러스터 내에서 레플리카세트와 같은 파드의 집합에 대한 경로나 API 주소가 변경되도 하나의 이름으로 클라이언트가 접근할 수 있도록 하는 서비스 디스커버리 등을 제공하는 리소스입니다.

서비스에서 레이블 셀렉터를 정의하여 어떤 파드를 대상으로 할지 정할 수 있습니다.

셀렉터 값을 통해 특정 트래픽이 특정한 파드로 전달될 수 있게끔 할 수 있습니다.

ClusterIP, NodePort, LoadBalancer, ExternalName 등 접근을 관리하기 위한 여러 종류의 서비스가 있습니다.

 

인그레스

HTTP/HTTPS와 같이 경로를 기반으로 서비스를 전환하는 L7레벨의 제어를 위한 리소스입니다.

HTTP/HTTPS 서비스를 외부로 노출시키기 위해서 사용되며, 

지정된 호스트 혹은 경로과 일치하는 서비스로 요청을 전달하는 역할을 합니다.

이 외에도 요청에 특정 값이 포함되는 경우 다른 URL로 리다이렉트 하는 등의 작업도 가능합니다.

 

헬름 (Helm)

쿠버네티스르 운영할 때에는 보통 단일 클러스터가 아닌 다수의 클러스터로 구성하게 됩니다.

예를 들어 개발용, 운영용, 부하테스트 용으로 클러스터를 따로 두는 등이 그런 경우입니다.

이런 경우에는 같은 애플리케이션이나 미들웨어 혹은 디플로이먼트, 서비스와 같은 쿠버네티스 리소스를 여러 클러스터에 배포해야하는데

그 때마다 변경되는 설정값을 바꿔 매니페스트 파일을 클러스터 개수만큼 작성하기는 힘듭니다.

이를 해결하기 위해 헬름을 사용합니다.

 

헬름은 패키지 관리 도구로, 사전 구성된 쿠버네티스 리소스의 패키지인 쿠버네티스 차트(tgz 확장자)를 관리하는 역할을 합니다.

쿠버네티스를 서비스, 디플로이먼트와 같은 리소스를 먼저 생성 한 후에 헬름을 통해 매니페스트 파일을 생성하면,

생성된 매니페스트 파일 정보를 쿠버네티스 리소스에 적용하게 됩니다.

헬름은 명령행 도구인 클라이언트(cli)와 클러스터에 설치되어 클라이언트의 명령을 실행하는 서버(틸러, Tiller)로 구성되어있습니다.

틸러는 명령에 따라 클러스터에 패키지를 설치하고, 업데이트, 삭제하는 등의 작업을 수행합니다.

 

 

728x90
반응형