Kubernetes 리소스 매니페스트 정의 및 활용

Kubernetes의 리소스

리소스 개념

Kubernetes에서는 모든 구성 요소가 리소스로 추상화되며, 인스턴스화된 리소스를 객체라고 합니다.

리소스 유형

워크로드 리소스: Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, CronJob
서비스 디스커버리 및 로드밸런싱: Service, Ingress
구성 및 스토리지: Volume, CSI(Container Storage Interface)
특수 스토리지: ConfigMap, Secret, DownwardAPI
네임스페이스 수준 리소스: 위의 모든 리소스

클러스터 수준 리소스: 
  Namespace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding

메타데이터 리소스: 
  HPA(HorizontalPodAutoscaler), PodTemplate, LimitRange

리소스 매니페스트

매니페스트 정의

YAML 형식 파일로 Kubernetes 리소스의 원하는 상태를 정의하는 파일

매니페스트 구조

apiVersion: 그룹/버전  # 그룹 생략 시 core
kind: 리소스 유형
metadata: 메타데이터
  name: 이름
  namespace: 네임스페이스
  labels: 라벨
spec: 원하는 상태(사용자 정의)
status: 현재 상태(Kubernetes 자동 관리)

API 버전 및 도움말 확인

사용 가능한 API 버전 조회:

kubectl api-versions

특정 리소스 버전 확인:

kubectl explain Pod
kubectl explain Ingress

필드 구성 도움말

리소스 필드 계층 조회:

kubectl explain pod.metadata
kubectl explain pod.metadata.labels

필드 유형 표기법:

apiVersion <string>      # 문자열
metadata <Object>        # 중첩 객체
labels <map[string]string> # 키-값 맵
finalizers <[]string>     # 문자열 배열
hostPID <boolean>         # 불리언
priority <integer>        # 정수
name <string> -required-  # 필수 항목

매니페스트 생성 예제

Pod 생성 예시

apiVersion: v1
kind: Pod
metadata:
  name: k8s-pod
  labels:
    application: web-tier
spec:
  containers:
  - name: webserver
    image: nginx:1.18
  - name: appserver
    image: tomcat:9-alpine

Service 생성 예시

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30080
  - name: app
    port: 8080
    targetPort: 8080
    nodePort: 30088
  selector:
    application: web-tier
  type: NodePort

기존 리소스 매니페스트 추출

kubectl get pod [POD_NAME] -o yaml
kubectl get pod [POD_NAME] -o json

태그: kubernetes ResourceManifest YAML Pod Service

6월 25일 01:20에 게시됨