목차
- 애플리케이션 서비스 구성 요소
- 애플리케이션 배포, 운영
- 파드와 컨테이너
- 서비스가 필요한 이유
애플리케이션 서비스 구성 요소
클러스터에 대해 알기 위해 우리는 그 구성요소에 무엇이 있고, 어떤 동작을 하는지 알 필요가 있습니다. 이 중 파드에 대해서는 자세히 설명한 바 있고, 레플리케이션 컨트롤러가 무엇인지, 쿠버네티스에서 말하는 서비스는 무엇인지 알아보도록 하겠습니다.
- 레플리케이션 컨트롤러
레플리케이션 컨트롤러는 쿠버네티스에서 파드를 관리하는 컨트롤러 중 하나입니다. 레플리케이션 컨트롤러는 사용자가 지정한 파드의 복제본(replica) 개수를 유지하도록 하며, 파드의 스케일링과 롤링 업데이트 등을 수행합니다.
레플리케이션 컨트롤러는 파드의 상태를 모니터링하고, 복제본 개수를 조정하여 원하는 상태를 유지합니다. 파드가 삭제되면 레플리케이션 컨트롤러는 새로운 파드를 생성하여 복제본 개수를 유지합니다. 따라서 파드의 안정적인 운영을 보장할 수 있습니다.
레플리케이션 컨트롤러는 디플로이먼트 컨트롤러와 함께 사용되어, 애플리케이션의 롤링 업데이트를 수행할 수 있습니다. 디플로이먼트 컨트롤러는 레플리케이션 컨트롤러를 이용하여 파드를 업데이트하며, 업데이트 과정에서 롤백 기능도 제공합니다. - 서비스
쿠버네티스에서 서비스는 일련의 파드 집합에 대한 네트워크 엔드포인트를 제공하는 리소스입니다. 서비스는 파드의 IP 주소와 포트 번호를 추상화하여, 클러스터 내부 또는 외부에서 파드에 접근할 수 있는 방법을 제공합니다.
서비스는 쿠버네티스 클러스터 내에서 파드 간의 통신을 위한 로드 밸런싱, 서비스 디스커버리, 서비스 간의 연결 등 다양한 기능을 제공합니다. 클러스터 내부에서는 DNS를 이용하여 서비스 이름으로 파드에 접근할 수 있으며, 클러스터 외부에서는 로드 밸런서나 노드포트를 이용하여 서비스에 접근할 수 있습니다.
서비스는 또한 셀렉터(selector)를 이용하여 특정 라벨을 가진 파드를 선택하고, 해당 파드들에 대한 엔드포인트를 생성합니다. 이를 통해 파드의 스케일링이나 롤링 업데이트 등의 작업이 수행되어도 서비스의 엔드포인트는 변경되지 않으므로, 안정적인 서비스 제공이 가능합니다. - 파드
Pod에 관해서는 아래 페이지에 상세히 정리해 놓았습니다.
애플리케이션 배포, 운영
우선, 들어가기에 앞서 각 구성 요소의 역할을 간단히 다시 정리하자면 다음과 같습니다.
- 레플리케이션 컨트롤러는 사용자가 지정한 파드의 복제본(replica) 개수를 유지하도록 합니다. 이를 통해 파드의 안정적인 운영을 보장할 수 있습니다.
- 파드는 쿠버네티스에서 배포되는 가장 작은 단위의 컨테이너입니다. 각 파드는 고유한 IP 주소와 포트 번호를 가지며, 컨테이너화된 애플리케이션을 실행합니다.
- 서비스는 파드의 집합에 대한 네트워크 엔드포인트를 제공합니다. 서비스는 파드의 IP 주소와 포트 번호를 추상화하여, 클러스터 내부 또는 외부에서 파드에 접근할 수 있는 방법을 제공합니다. 서비스는 쿠버네티스 클러스터 내에서 파드 간의 통신을 위한 로드 밸런싱, 서비스 디스커버리, 서비스 간의 연결 등 다양한 기능을 제공합니다.
이러한 레플리케이션 컨트롤러, 파드, 서비스는 함께 동작하여 쿠버네티스에서 애플리케이션을 배포하고 운영합니다. 우선, 레플리케이션 컨트롤러는 사용자가 지정한 파드의 복제본 개수를 유지하도록 합니다. 이 때, 레플리케이션 컨트롤러는 파드의 라벨을 이용하여 복제본을 관리합니다. 레플리케이션 컨트롤러는 파드의 상태를 모니터링하고, 복제본 개수를 조정하여 원하는 상태를 유지합니다.
서비스는 파드의 집합에 대한 네트워크 엔드포인트를 제공합니다. 이를 통해 클러스터 내부 또는 외부에서 파드에 접근할 수 있습니다. 서비스는 파드의 라벨 셀렉터를 이용하여 파드를 선택하고, 해당 파드들에 대한 엔드포인트를 생성합니다. 이를 통해 파드의 스케일링이나 롤링 업데이트 등의 작업이 수행되어도 서비스의 엔드포인트는변경되지 않으므로, 안정적인 서비스 제공이 가능합니다.
따라서, 레플리케이션 컨트롤러는 파드의 안정적인 운영을 보장하며, 서비스는 파드의 집합에 대한 안정적인 네트워크 엔드포인트를 제공합니다. 이를 통해 쿠버네티스에서 애플리케이션을 안정적으로 배포하고 운영할 수 있습니다.
예를 들어, 사용자가 레플리케이션 컨트롤러를 이용하여 파드의 복제본을 3개로 지정하면, 레플리케이션 컨트롤러는 3개의 파드를 생성합니다. 이때, 레플리케이션 컨트롤러는 파드의 라벨을 이용하여 복제본을 관리합니다. 서비스는 이 세 개의 파드에 대한 네트워크 엔드포인트를 생성하고, 클러스터 내부 또는 외부에서 이 서비스에 접근할 수 있습니다.
파드가 스케일링되거나 롤링 업데이트가 수행될 경우, 레플리케이션 컨트롤러는 이를 감지하고 파드의 복제본 개수를 조정합니다. 서비스는 파드의 라벨 셀렉터를 이용하여 파드를 선택하고, 변경된 파드에 대한 엔드포인트를 생성합니다. 이를 통해 파드의 스케일링이나 롤링 업데이트 등의 작업이 수행되어도 서비스의 엔드포인트는 변경되지 않으므로, 안정적인 서비스 제공이 가능합니다.
파드와 컨테이너
컨테이너는 사용자 스스로 직접 생성하거나 동작시키지 않습니다. 대신 쿠버네티스의 기본 빌딩 블록인 파드를 이용합니다. 그러나 파드도 직접 생하는 것은 아닙니다. kubectl run 명령어를 이용해 레플리케이션 컨트롤러를 생성하고 레플리케이션 컨트롤러가 실제 파드를 생성하는 방식입니다. 클러스터 외부에서 파드에 접근하기 위해 쿠버네티스에게 레플리케이션 컨트롤러에 의해 관리되는 모든 파드를 단일 서비스로 노출하도록 명령합니다.
시스템의 가장 중요한 구성 요소는 파드입니다. 파드는 자체 고유한 사설 IP 주소와 이름을 갖습니다. 그라고 보통 파드는 원하는 만큼 컨테이너를 포함시킬 수 있습니다. 하지만 컨테이너를 마구잡이로 생성하는 것 보다 하나의 파드에는 하나의 컨테이너 사용을 권장하고 있습니다. 이 내용에 대해서는 위에 파드에 대해 정리해 놓은 페이지에 자세히 정리해 놓았습니다.
서비스가 필요한 이유
시스템의 세 번째 구성 요소는 kubia-http 서비스입니다. 서비스가 필요한 이유를 이해하기 위해 파드의 주요 특징에 대해 알아야 합니다. 파드는 일시적이라고 말씀드린 바 있습니다. 즉, 파드는 언제든 사라질 수 있습니다. 파드가 실행 중인 노드가 실패할 수도 있고 누군가 파드를 삭제할 수도 있고, 비정상 노드에서 파드가 제거될 수 있습니다.
이러한 상황이 발생하면 앞서 설명한 대로 사라진 파드는 레플리케이션 컨트롤러에 의해 생성된 파드로 대체됩니다. 새로운 파드는 다른 IP 주소를 할당받습니다. 이것이 바로 서비스가 필요한 이유입니다. 항상 변경되는 파드의 IP 주소 문제와 여러 개의 파드를 단일 IP와 포트의 쌍으로 노출시키는 문제를 해결합니다.
서비스가 생성되면 정적 IP를 할당받고 서비스가 존속하는 동안 변경되지 않습니다. 파드에 직접 연결하는 대신 클라이언트는 서비스 IP 주소를 통해 연결해야 합니다. 서비스는 어떤 파드가 어디에서 존재하는지에 관계없이 파드 중 하나로 연결해 요청을 처리하도록 합니다.
서비스는 동일한 서비스를 제공하는 하나 이상의 파드 그룹의 정적 위치를 나타냅니다. 서비스의 IP와 포트로 유입된 요처은 그 순간 서비스에 속해 있는 파드 중 하나에게 전달됩니다.
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubectl 명령어 모음 [2] 수정, 실행, 대기 (0) | 2023.04.02 |
---|---|
[Kubernetes] Kubectl 명령어 모음 [1] 생성, 삭제, 복사 (0) | 2023.04.02 |
[Kubernetes] 쿠버네티스 VM에 설치하기 (0) | 2023.03.30 |
[Kubernetes] 쿠버네티스 클러스터 요소들의 특징과 구동 방식 (0) | 2023.03.30 |
[Kubernetes] 쿠버네티스의 구성 요소 (0) | 2023.03.30 |