구성

구성 (Configuration)

Kubernetes의 구성(Configuration) 개념에 대해 설명할게요. 코드와 구성을 분리하는 방법을 중심으로, ConfigMap, Secret, 그리고 사이드카/초기화 컨테이너를 통한 구성 제공 방식을 살펴볼게요.

출처: Kubernetes 공식 문서 — Configuration

구성이란 무엇인가요?

Kubernetes는 코드에서 구성을 분리하는 방법을 제공해요. 이는 DevOps 실무 및 클라우드 네이티브 아키텍처와 부합하는 일반적인 관행입니다.

분리된 구성을 허용하는 컨테이너 이미지가 있다면, 서로 다른 컨텍스트에서 동일한 애플리케이션 코드를 배포할 수 있어요. 예를 들어 빌드된 이미지에 대해 테스트를 실행하고, 그 후 정확히 동일한 이미지를 프로덕션 컨텍스트에서 실행할 수 있습니다. 이렇게 하면 테스트용과 프로덕션용을 다르게 배포하는 것보다 테스트에 대한 신뢰가 높아집니다.

kubectl 명령줄 도구 구성에 대해 알아보려면 "여러 클러스터에 대한 접근 구성"을 읽어보세요.

Kubernetes는 구성을 저장하고 파드(또는 다른 컴포넌트)가 로드해서 사용할 수 있게 하는 두 가지 주요 API 종류를 제공해요. 바로 ConfigMapSecret입니다.

특수 목적의 CertificateSigningRequestClusterTrustBundle API 종류도 TLS 구성 같은 특정 사례와 관련된 구성 데이터를 보관합니다.

이 모든 구성 메커니즘은 인증서조차도 여러 파드에서 재사용되고 공유되도록 설계되어 있어요. 구성은 파드마다 매번 작성할 필요가 없으며, 가능하면 공유 구성을 사용할 수 있도록 애플리케이션을 설계해야 합니다.

ConfigMap

ConfigMap은 기밀(confidential)이 아닌 데이터를 키-값 쌍으로 저장하는 API 객체예요. 파드는 ConfigMap을 환경 변수, 명령줄 인수, 또는 볼륨의 구성 파일로 사용할 수 있습니다.

ConfigMap을 사용하면 환경별 구성을 컨테이너 이미지에서 분리할 수 있어서 애플리케이션을 쉽게 이식할 수 있어요.

Secret

Secret은 비밀번호, 토큰, 키 같은 기밀 데이터를 담는 객체예요. ConfigMap과 비슷하지만 기밀 데이터를 보관하는 데 특화되어 있습니다.

사이드카 컨테이너 또는 초기화 컨테이너를 통한 구성 (Configuration via sidecar or init containers)

초기화(init) 컨테이너나 사이드카 컨테이너를 사용해 워크로드에 구성을 제공할 수도 있어요. Kubernetes 외부에 구성이나 보안 키를 저장하는 수단이 이미 있고, 그 정보를 컨테이너 이미지에 저장해서는 안 되는 경우 유용합니다.

사이드카 컨테이너 헬퍼 (Sidecar container helper)

사이드카 구성 헬퍼는 애플리케이션 컨테이너와 같은 파드에서 실행되므로 각 파드는 자체 사이드카를 갖게 됩니다. 일반적인 구성 사이드카는 파드 네트워크를 통해 구성 데이터를 가져온 다음, 두 컨테이너 모두에 마운트된 볼륨에 기록합니다. 이 기본 패턴에는 앱 컨테이너가 사용할 구성을 작성하는 헬퍼 컨테이너를 두는 다양한 변형이 있습니다.

초기화 컨테이너 헬퍼 (Init container helper)

파드는 메인 애플리케이션보다 먼저 시작되는 init 컨테이너를 가질 수 있어요. 사이드카와 달리 init 컨테이너는 파드의 메인(애플리케이션) 컨테이너가 시작되기 전에 완료되므로, 구성은 한 번만 설정됩니다.

init 컨테이너로 구성을 제공하는 두 가지 주요 옵션이 있어요.

  • 파일시스템을 통한 구성: init 컨테이너가 구성을 가져와 보통 파드-로컬 볼륨에 있는 파일 하나 또는 여러 개에 기록합니다.
  • 환경 변수를 통한 구성 (기능 상태: Beta, Kubernetes v1.35부터 기본 활성화): 로컬 볼륨을 사용하지만 그 볼륨은 init 컨테이너만 마운트합니다. kubelet은 앱 컨테이너를 시작하기 전에 그 볼륨에서 읽습니다.

클러스터 구성 (Cluster configuration)

이 문서 섹션은 구성에 관한 것입니다. 하지만 플랫폼 수준이나 클러스터 수준 구성을 하고 있다면 클러스터 관리 페이지를 읽고 클러스터 관리 작업 목록을 살펴보세요.

더 알아보기 (Learn more)