Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

쿠버네티스 기초 컴포넌트 알아보기 본문

☁️ 클라우드/Kubernetes

쿠버네티스 기초 컴포넌트 알아보기

Chamming2 2022. 4. 3. 22:31

여러 개발 도구들 중에서도 쿠버네티스는 어려운 축에 꼽히는데요, 쿠버네티스를 이해하려면 먼저 클러스터를 구성하는 기본 구성 요소들에 대해 알아야 합니다.

이번 글에서는 클러스터를 구성하는 컴포넌트들과 각각의 역할을 간단히 정리해보도록 하겠습니다.

메인 쿠버네티스 컴포넌트 목록

제가 아직 사용해보지 않은 DaemonSet 등 일부 쿠버네티스 컴포넌트는 이 글에서 다루지 않지만, 주로 사용되는 컴포넌트를 정리해 보았습니다.
(정리되지 않은 컴포넌트 역시 추후 추가할 수 있도록 해보겠습니다. 🙂)

Pod

  • Pod(파드)는 쿠버네티스의 가장 작은 유닛으로, 컨테이너를 감싸 추상화한 결과물을 의미합니다.
    주로 1개 파드에서 1개 어플리케이션을 운영하며, 각 파드는 고유한 내부 IP 주소를 부여받아 노드 내에서 파드간의 통신이 가능해집니다.
    1. 1개 파드에서 1개의 어플리케이션을 운영하지만, 둘 이상의 컨테이너를 결합해 운영하기도 합니다.
    2. 또한, 파드는 새로 생성될 때마다 새로운 IP 주소를 부여받습니다.

Service

  • 서비스는 파드에 부착할 수 있으면서 영구히 유지되는 IP 주소로, 파드가 생성될 때 기본적으로 새로운 IP 주소를 부여받는 것과는 달리 파드가 제거 후 재생성되더라도 해당 주소가 유지됩니다.
  • 또한 서비스는 생성 시 내부 / 외부 서비스 여부를 명시해야 하며, 기본적으로는 내부 서비스로 생성됩니다.
    • 내부 서비스(ClusterIP) : 클러스터 내부 통신에만 사용할 수 있는 내부 IP 주소만을 제공합니다.
    • 외부 서비스(NodePort) : 외부(웹 브라우저 등)에서 접근할 수 있는 포트 주소(NodePort)를 추가로 제공합니다.

Ingress

  • 노드에 요청을 보냈을 때, 서비스보다 먼저 요청을 수신해 서비스로 해당 요청을 포워딩합니다.
  • 주로 트래픽 부하 분산용으로 사용됩니다.

ConfigMap

  • 어플리케이션의 외부 설정 데이터를 관리하는 키-값 저장소입니다.
예시

MongoDB 어플리케이션이 있는 파드가 존재하고, 데이터베이스에 접속할 수 있는 엔드포인트가 이미지에 기록되어 있다고 가정해 보겠습니다.

그런데 만약 데이터베이스의 엔드포인트나 유저네임이 변경된다면 이미지를 다시 빌드하고 레지스트리에 푸시하고 파드에서 이를 다시 내려받아야 할 텐데요, 이렇게 베이스 이미지 대신 ConfigMap 에서 데이터를 관리한다면 이미지를 다시 빌드하지 않고도 변경사항을 파드 바깥에서 반영할 수 있게 됩니다.

다만 환경 변수와는 성격이 달라 크레덴셜 등의 민감한 정보를 보관해서는 안됩니다.

Secret

  • SecretConfigMap과 유사하지만, ConfigMap과는 달리 민감한 정보를 저장하기 위한 키-값 저장소입니다.
  • 일반적인 어플리케이션의 환경 변수와 유사한 성격을 띱니다.

Volume

  • 파드가 재실행되어도 데이터를 안정적으로 유지시키기 위해 존재합니다.
  • 도커의 볼륨과 유사하며, 로컬 머신 또는 외부 저장소를 파드와 바인드해 사용합니다.

✅ 데이터 영역은 쿠버네티스가 관리해주지 않으므로, 사용자(관리자)가 직접 어떤 데이터가 어떤 저장소에 저장될 지 관리해야 합니다.

Deployment

  • 실제 서비스 중, 파드가 중단되는 경우에 대비해 파드를 복제해두기 위한 설계도입니다.
  • 만약 불의의 원인으로 어플리케이션(파드)이 다운될 경우, 서비스(Service)는 다운된 파드의 복사본으로 요청을 포워딩합니다.
  • 하지만 고유한 상태(데이터)를 갖고 있는 어플리케이션(Ex. 데이터베이스)은 Deployment를 통해 복사할 수 없습니다.

StatefulSet

  • Deployment와 유사하나, 데이터베이스 등 상태를 갖고 있는 어플리케이션의 복사본을 생성할 때 사용하는 컴포넌트입니다.
✅ 그러나 StatefulSet을 사용해 데이터베이스 복사본을 만드는 것은 꽤나 복잡한 작업이 될 수 있어, 데이터베이스는 클러스터 외부에서 관리하는 것도 흔히 사용되는 패턴이라고 합니다.
반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆