Kubernetes에서 YAML 설정 파일 이해하기

Kubernetes의 핵심 개념 중 하나는 리소스(Resource)이며, 이러한 리소스는 YAML 설정 파일을 통해 정의됩니다.


YAML 파일의 구조

YAML은 “YAML Ain’t Markup Language”의 약자로, 사람이 읽기 쉬운 형식의 데이터 직렬화 언어입니다. YAML 파일은 들여쓰기를 통해 계층 구조를 표현하며, Kubernetes에서는 리소스의 정의와 설정을 직관적으로 작성할 수 있도록 해줍니다.

Kubernetes에서 리소스를 정의하기 위한 YAML 파일은 기본적으로 세 가지 주요 필드를 포함합니다.

  1. apiVersion : 리소스의 버전을 지정합니다. 예를 들어, v1이나 apps/v1과 같은 값이 들어갑니다. 이 필드는 Kubernetes API가 해당 리소스를 올바르게 해석하기 위해 필요합니다.
  2. kind : 생성하려는 리소스의 유형을 정의합니다. Kubernetes에는 Pod, Service, Deployment, ConfigMap, Secret 등 다양한 리소스 종류가 있으며, 이를 kind 필드에서 지정합니다.
  3. metadata : 리소스의 이름(name)과 네임스페이스(namespace) 등을 포함한 메타데이터를 정의합니다. 이 필드는 리소스를 식별하고 관리하는 데 중요한 역할을 합니다.
  4. spec : 리소스의 구체적인 스펙(스펙, 설정)을 정의하는 필드입니다. 이 필드는 리소스 종류에 따라 구조와 내용이 달라지며, 예를 들어 Deployment의 경우 파드 템플릿, 레플리카 수, 셀렉터 등이 포함됩니다.


YAML 파일의 예제

아래는 Kubernetes에서 가장 많이 사용되는 리소스 중 하나인 Deployment 리소스를 정의하는 간단한 YAML 파일 예제입니다:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.14.2
ports:
- containerPort: 80

이 예제에서 apiVersionapps/v1으로 설정되어 있으며, 리소스 유형은 Deployment입니다. metadata에는 Deployment의 이름과 네임스페이스가 정의되어 있습니다. spec 필드에서는 레플리카 수(여기서는 3개의 복제본)와 셀렉터(matchLabels), 그리고 파드 템플릿이 정의되어 있습니다.


주요 YAML 파일 요소 분석

  • replicas : 생성할 파드의 복제본 수를 지정합니다. 이 수를 늘리거나 줄임으로써 애플리케이션의 확장성을 쉽게 조정할 수 있습니다.
  • selector : 파드의 라벨을 기준으로 Deployment가 관리할 파드를 선택합니다. 이 라벨은 파드의 템플릿(template 필드)에서도 사용되며, 이를 통해 특정 라벨이 붙은 파드들만을 관리 대상으로 삼을 수 있습니다.
  • template : 이 필드는 파드 템플릿을 정의하며, 파드의 metadataspec이 포함됩니다. 파드 템플릿의 metadata 필드에는 파드의 라벨이 정의되어 있고, spec 필드에는 컨테이너의 이미지, 포트 설정 등이 포함됩니다.


YAML 파일 작성 시 주의사항

Kubernetes YAML 파일을 작성할 때 몇 가지 주의해야 할 점이 있습니다. 첫째, 들여쓰기는 매우 중요합니다. YAML은 들여쓰기를 통해 계층 구조를 표현하므로, 잘못된 들여쓰기는 파일의 해석 오류를 일으킬 수 있습니다. 둘째, 정확한 필드 이름을 사용해야 합니다. 필드 이름이 틀리면 Kubernetes API 서버가 이를 인식하지 못하고 에러를 반환할 수 있습니다.

마지막으로, YAML 파일은 보통 여러 리소스를 포함할 수 있습니다. 이때 각 리소스는 ---로 구분됩니다. 이를 통해 하나의 YAML 파일로 여러 리소스를 정의하고, 단일 명령으로 배포할 수 있습니다.

Leave a Comment