1. Pod와 컨테이너
1.1. Pod 기본 개념
- Pod는 쿠버네티스에서 가장 기본이 되는 배포 단위
- 하나 이상의 컨테이너를 포함할 수 있으며 네트워크와 스토리지 자원을 공유
- Pod 내의 모든 컨테이너는 동일한 노드에서 실행
- 각 Pod는 고유한 IP 주소를 할당받음
- Pod 내 컨테이너들은 localhost를 통해 서로 통신 가능
1.2. Pod 패턴
- 사이드카 패턴
* 메인 컨테이너를 보조하는 추가 컨테이너 구성
* 로그 수집기, 모니터링 에이전트 등으로 활용
* 메인 컨테이너의 기능을 확장하거나 강화
- 앰배서더 패턴
* 프록시 역할을 하는 컨테이너 추가
* 네트워크 연결을 단순화하고 추상화
* 서비스 디스커버리나 연결 관리를 담당
- 어댑터 패턴
* 데이터 변환이나 프로토콜 변환을 담당
* 외부 시스템과의 통합을 위한 인터페이스 제공
* 표준화된 출력 형식으로 변환하는 역할
2. 워크로드 리소스
2.1. Deployment
- Pod의 선언적 업데이트를 관리하는 상위 수준 리소스
- 주요 기능:
* 무중단 업데이트와 롤백 지원
* 버전 관리 및 이력 추적
* 자동 복구 및 스케일링
- Deployment 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
2.2. StatefulSet
- 상태를 가진 애플리케이션을 위한 특별한 워크로드
- 주요 특징:
* 안정적인 고유 네트워크 식별자 제공
* 순차적인 배포와 스케일링
* 영구 스토리지 자동 프로비저닝
- 활용 사례:
* 데이터베이스 클러스터 (MySQL, PostgreSQL)
* 메시지 큐 시스템
* 분산 캐시 시스템
2.3. DaemonSet
- 모든 노드에서 Pod를 실행하도록 보장
- 주요 용도:
* 시스템 메트릭 수집기
* 로그 수집기 (Fluentd, logstash)
* 노드 모니터링 에이전트
- 노드 선택기를 통한 특정 노드 타겟팅 가능
3. 서비스와 네트워킹
3.1. 서비스 타입
- ClusterIP
* 클러스터 내부 통신용 기본 서비스
* 안정적인 내부 IP 제공
* 로드밸런싱과 서비스 디스커버리 제공
- NodePort
* 모든 노드의 특정 포트를 통해 서비스 노출
* 포트 범위: 30000-32767
* 개발 환경이나 테스트용으로 적합
- LoadBalancer
* 클라우드 공급자의 로드밸런서와 통합
* 외부 트래픽을 자동으로 분산
* 프로덕션 환경에서 주로 사용
3.2. Ingress
- L7 계층의 로드밸런싱 제공
- 주요 기능:
* URL 기반 라우팅
* SSL/TLS 종료
* 이름 기반 가상 호스팅
- Ingress 컨트롤러 예시:
* NGINX Ingress Controller
* HAProxy Ingress
* Traefik
3.3. 네트워크 정책
- Pod 간 트래픽 제어를 위한 방화벽 규칙
- 네임스페이스 간 통신 제어
- 마이크로서비스 보안을 위한 필수 요소
'k8s' 카테고리의 다른 글
K8S CI/CD (1) | 2025.03.29 |
---|---|
[k8s] 쿠버네티스 스토리지, 보안 관리(PV/PVC, RBAC, 모니터링) (0) | 2024.12.01 |
[k8s] 쿠버네티스 주요 컴포넌트 정리 (1) | 2024.09.22 |