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