728x90
들어가며
이전 포스트에서 도커와 쿠버네티스의 관계에 대해 알아보았습니다. 이번에는 쿠버네티스를 실제로 사용하기 위해 알아야 할 핵심 개념들을 자세히 살펴보겠습니다.
1. Pod (파드)
파드는 쿠버네티스의 가장 기본적인 배포 단위입니다.
주요 특징
- 하나 이상의 컨테이너를 포함
- 같은 파드 내의 컨테이너는 네트워크와 저장소 공유
- 항상 같은 노드에서 실행
예제 YAML
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
spec:
containers:
- name: my-app
image: my-app:1.0
ports:
- containerPort: 8080
2. Deployment (디플로이먼트)
실제 운영 환경에서는 Pod를 직접 관리하지 않고 Deployment를 사용합니다.
주요 기능
- Pod의 선언적 업데이트
- 롤링 업데이트와 롤백
- 스케일링
- 자동 복구
예제 YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0
3. Service (서비스)
Pod는 동적으로 생성/삭제되므로, 안정적인 엔드포인트가 필요합니다. 이를 Service가 제공합니다.
서비스 타입
- ClusterIP: 클러스터 내부 통신용
- NodePort: 외부에서 노드 포트로 접근
- LoadBalancer: 클라우드 로드밸런서 사용
- ExternalName: 외부 서비스의 별칭
예제 YAML
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
4. ConfigMap과 Secret
애플리케이션 설정과 민감한 정보를 관리합니다.
ConfigMap 예제
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_URL: "mongodb://localhost:27017"
API_HOST: "api.example.com"
Secret 예제
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
DB_PASSWORD: base64encodedpassword
API_KEY: base64encodedkey
5. Volume (볼륨)
데이터 영속성을 제공합니다.
주요 볼륨 타입
- emptyDir: 임시 데이터 저장
- hostPath: 노드의 파일시스템 사용
- PersistentVolume: 영구 저장소
PersistentVolume 예제
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
6. Namespace (네임스페이스)
리소스를 논리적으로 구분합니다.
사용 예
apiVersion: v1
kind: Namespace
metadata:
name: development
실전 응용: 전체 애플리케이션 배포
위 개념들을 조합한 실제 애플리케이션 배포 예제입니다.
# 네임스페이스 생성
apiVersion: v1
kind: Namespace
metadata:
name: my-app
---
# ConfigMap 생성
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
namespace: my-app
data:
APP_ENV: production
API_URL: http://api.internal
---
# Deployment 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0
envFrom:
- configMapRef:
name: app-config
ports:
- containerPort: 8080
---
# Service 생성
apiVersion: v1
kind: Service
metadata:
name: my-app-service
namespace: my-app
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
마치며
이러한 핵심 개념들을 이해하고 나면, 쿠버네티스로 복잡한 애플리케이션을 관리하는 것이 한결 수월해집니다. 다음 포스트에서는 이러한 개념들을 활용한 실제 배포 시나리오와 운영 팁을 다루도록 하겠습니다.
728x90
'IT 개발 > 클라우드' 카테고리의 다른 글
[쿠버네티스] 쿠버네티스 클러스터 관리와 보안: 운영자 가이드 (70) | 2025.02.06 |
---|---|
[쿠버네티스] 쿠버네티스 실전 배포 시나리오와 운영 팁: 현장 가이드 (69) | 2025.02.05 |
[쿠버네티스] 도커에서 쿠버네티스로: 컨테이너 오케스트레이션의 시작 (56) | 2025.02.03 |
[도커] Docker Compose 완벽 가이드 (41) | 2025.02.02 |
[도커] 도커의 역사 (5) | 2025.02.01 |