⚡ 1. 쿠버네티스(Kubernetes)란?
쿠버네티스(Kubernetes, K8s) 는 컨테이너화된 애플리케이션을 자동으로 배포, 운영, 확장하는 컨테이너 오케스트레이션 플랫폼입니다.
Google에서 개발하고 현재는 Cloud Native Computing Foundation(CNCF) 에서 관리하는 오픈소스 프로젝트입니다.
✅ 쿠버네티스의 핵심 기능
🔹 컨테이너 자동 배포 및 스케일링 → 애플리케이션을 자동으로 배포하고 확장
🔹 로드 밸런싱 및 서비스 디스커버리 → 여러 컨테이너 간의 네트워크 통신 관리
🔹 셀프 힐링(Self-Healing) → 오류가 발생한 컨테이너를 자동으로 재시작
🔹 롤링 업데이트 & 롤백 → 무중단 배포 가능
🔹 클러스터 리소스 최적화 → CPU, 메모리 등을 효율적으로 할당
🔹 도커(Docker)와 비교
비교 항목 | Docker | Kubernetes |
역할 | 컨테이너 실행 | 컨테이너 오케스트레이션 |
단일 서버 운영 | 가능 | 어려움 |
다중 컨테이너 관리 | 직접 관리 필요 | 자동으로 관리 |
로드 밸런싱 | 직접 설정 필요 | 기본 제공 |
자동 복구 | 직접 구현해야 함 | 자동 복구(Self-Healing) 지원 |
⚡ 2. 쿠버네티스 아키텍처(Kubernetes Architecture)
Kubernetes는 Master Node(컨트롤 플레인) 과 Worker Node(작업 노드) 로 구성됩니다.
🏗 Kubernetes 아키텍처 구조
+----------------------------------------------------------+
| Kubernetes Cluster |
| |
| +-----------------+ +-----------------+ |
| | Master Node | | Worker Node 1 | |
| | (Control Plane)| | - Kubelet | |
| | - API Server | | - Kube Proxy | |
| | - Scheduler | | - Pod 1 | |
| | - Controller | | - Pod 2 | |
| +-----------------+ +-----------------+ |
| +-----------------+ |
| | Worker Node 2 | |
| | - Kubelet | |
| | - Kube Proxy | |
| | - Pod 3 | |
| | - Pod 4 | |
| +-----------------+ |
+----------------------------------------------------------+
⚙️ Kubernetes 주요 구성 요소
구성 요소 | 역할 |
Master Node | 클러스터 전체를 관리 |
API Server | kubectl과 통신하여 요청 처리 |
Controller Manager | 클러스터 상태를 모니터링 |
Scheduler | 새로운 Pod을 적절한 노드에 배치 |
Worker Node | 실제 애플리케이션이 실행되는 서버 |
Kubelet | 각 워커 노드에서 컨테이너 실행 및 관리 |
Kube Proxy | 네트워크 트래픽을 관리 |
Pod | 컨테이너의 실행 단위 |
Service | 여러 Pod을 묶어 네트워크 서비스 제공 |
⚡ 3. 쿠버네티스 주요 개념
✅ 1) Pod (파드)
• 쿠버네티스에서 컨테이너를 실행하는 최소 단위
• 하나의 Pod에는 하나 이상의 컨테이너가 포함될 수 있음
• 같은 Pod 내 컨테이너는 같은 네트워크(IP) 및 볼륨(스토리지) 공유
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
# Pod 생성
kubectl apply -f my-pod.yaml
# 실행 중인 Pod 확인
kubectl get pods
✅ 2) Deployment (배포)
• Pod을 관리하고 자동으로 업데이트하는 컨트롤러
• Pod이 다운되면 자동으로 새로운 Pod을 생성
• Pod 개수를 조절하여 스케일링(Scaling) 가능
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3 # Pod 개수 설정
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
# Deployment 생성
kubectl apply -f my-deployment.yaml
# 실행 중인 Deployment 확인
kubectl get deployments
✅ 3) Service (서비스)
• Pod 간 또는 외부 트래픽을 관리하는 네트워크 서비스
• 클러스터 내부 통신을 위한 ClusterIP, 외부에서 접근 가능한 LoadBalancer, NodePort 제공
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
# Service 생성
kubectl apply -f my-service.yaml
# 실행 중인 서비스 확인
kubectl get services
🔹 LoadBalancer 타입을 사용하면 외부에서 접근 가능합니다.
⚡ 4. 쿠버네티스 클러스터 확장 (Auto Scaling)
쿠버네티스는 트래픽 증가에 따라 자동 확장(Auto Scaling) 을 지원합니다.
✅ 1) HorizontalPodAutoscaler(HPA)를 사용한 자동 확장
# CPU 사용량이 50%를 초과하면 자동으로 Pod 추가
kubectl autoscale deployment my-app --cpu-percent=50 --min=1 --max=5
# HPA 상태 확인
kubectl get hpa
🔹 트래픽 증가 시 Pod을 자동 확장하여 성능을 최적화합니다.
⚡ 5. 쿠버네티스 클러스터 모니터링
✅ 1) kubectl을 사용한 클러스터 상태 확인
# 모든 리소스 상태 확인
kubectl get all
# 특정 Pod의 로그 확인
kubectl logs my-pod
# 실행 중인 노드 상태 확인
kubectl get nodes
✅ 2) Prometheus & Grafana를 사용한 모니터링
# Prometheus 설치
kubectl apply -f https://github.com/prometheus-operator/prometheus-operator/blob/main/bundle.yaml
# Grafana 설치
kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/templates/grafana.yaml
🔹 Prometheus는 메트릭 수집 및 분석, Grafana는 데이터 시각화 도구입니다.
⚡ 6. 쿠버네티스 보안 (RBAC)
✅ 1) RBAC를 사용한 접근 제어
# Role 설정 (Namespace 내에서 리소스 읽기 권한)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: read-only-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
# Role 배포
kubectl apply -f role.yaml
🔹 RBAC을 사용하면 특정 사용자나 서비스 계정에 대한 권한을 세부적으로 설정 가능합니다.
⚡ 결론
• 쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장하는 플랫폼
• Pod, Deployment, Service 등 다양한 리소스를 활용하여 애플리케이션을 효율적으로 실행
• Auto Scaling, 로드 밸런싱, 롤링 업데이트를 지원하여 높은 가용성과 안정성을 보장
• Prometheus, Grafana, RBAC을 활용하여 운영 및 보안 최적화 가능
🚀 쿠버네티스를 활용하면 대규모 애플리케이션을 효율적으로 운영할 수 있습니다!
출처 : ChatGPT
'Infra > Container' 카테고리의 다른 글
[Kubernetes] K8s Cluster (0) | 2025.03.04 |
---|---|
[Docker] Docker 정리 (0) | 2025.02.28 |