본문 바로가기
IT 개발/클라우드

[쿠버네티스] 매니페스트 완벽 가이드

by 이것 저것 모든것 2025. 2. 7.
728x90

쿠버네티스를 사용하면서 가장 기본이 되는 것은 바로 매니페스트(Manifest) 파일입니다. 매니페스트는 쿠버네티스 클러스터에 배포하고자 하는 객체의 명세를 정의하는 YAML 파일입니다. 이 글에서는 주요 매니페스트 구성 요소들을 자세히 살펴보겠습니다.

1. 기본 구조

모든 쿠버네티스 매니페스트는 다음과 같은 기본 필드를 포함합니다:

apiVersion: v1          # 쿠버네티스 API 버전
kind: Pod              # 리소스의 종류
metadata:              # 메타데이터
  name: my-pod         # 객체의 이름
  namespace: default   # 네임스페이스
spec:                  # 객체의 명세
  # 실제 설정 내용

2. 주요 리소스 종류별 예시

2.1 Pod

가장 기본적인 배포 단위인 Pod의 예시입니다:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"

2.2 Deployment

애플리케이션의 선언적 업데이트를 관리하는 Deployment 예시:

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

2.3 Service

Pod들에 대한 네트워크 서비스를 정의하는 Service 예시:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

2.4 ConfigMap

설정 정보를 저장하는 ConfigMap 예시:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_URL: "mongodb://localhost:27017"
  API_KEY: "your-api-key"

2.5 Secret

민감한 정보를 저장하는 Secret 예시:

apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  username: dXNlcm5hbWU=  # base64로 인코딩된 값
  password: cGFzc3dvcmQ=  # base64로 인코딩된 값

3. 주요 설정 항목 상세 설명

3.1 메타데이터 (metadata)

메타데이터 섹션에서 설정할 수 있는 주요 항목들:

  • name: 객체의 이름
  • namespace: 객체가 속할 네임스페이스
  • labels: 객체를 구분하고 선택하는데 사용되는 키-값 쌍
  • annotations: 추가 정보를 기록하는 키-값 쌍

3.2 스펙 (spec)

스펙 섹션의 주요 설정 항목들:

  1. 컨테이너 설정
    • image: 사용할 도커 이미지
    • ports: 노출할 포트
    • resources: CPU, 메모리 등 리소스 제한
    • env: 환경 변수
    • volumeMounts: 마운트할 볼륨
  2. 볼륨 설정
    • volumes: 사용할 볼륨 정의
    • persistentVolumeClaim: 영구 스토리지 요청
  3. 네트워크 설정
    • serviceType: ClusterIP, NodePort, LoadBalancer 등
    • ingress: 외부 접근 규칙

4. 실전 매니페스트 작성 팁

  1. 리소스 요구사항 명시
resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"
  1. 헬스체크 설정
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3
  1. 환경변수 설정
env:
- name: DATABASE_URL
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: DATABASE_URL

5. 마무리

쿠버네티스 매니페스트는 인프라스트럭처를 코드로 관리할 수 있게 해주는 강력한 도구입니다. 위에서 설명한 기본 구조와 예시들을 바탕으로 실제 운영 환경에 맞는 매니페스트를 작성하시기 바랍니다.

주의할 점:

  • 항상 최신 API 버전을 확인하세요
  • 리소스 제한을 반드시 설정하세요
  • 적절한 레이블과 어노테이션을 사용하세요
  • 시크릿 데이터는 반드시 인코딩하세요
728x90