⚡ 1. Kubernetes 클러스터(K8s Cluster)란?
Kubernetes(쿠버네티스, K8s) 는 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장할 수 있는 컨테이너 오케스트레이션 플랫폼입니다.
Kubernetes 클러스터는 여러 노드(Node)로 구성되며, 애플리케이션을 배포하고 실행하는 분산 시스템의 역할을 합니다.
✅ Kubernetes 클러스터의 핵심 기능
🔹 자동화된 컨테이너 배포 & 관리 → 컨테이너 기반 애플리케이션을 자동으로 배포하고 실행
🔹 자동 확장(Auto Scaling) → 트래픽 증가 시 Pod을 자동으로 추가하거나 제거
🔹 셀프 힐링(Self-Healing) → 장애가 발생한 컨테이너를 자동으로 복구
🔹 로드 밸런싱 & 서비스 디스커버리 → 여러 개의 Pod을 하나의 서비스로 묶어 트래픽을 분배
🔹 롤링 업데이트 & 롤백 지원 → 무중단 배포 가능
⚡ 2. Kubernetes 클러스터 아키텍처
Kubernetes 클러스터는 크게 마스터 노드(Master Node) 와 워크 노드(Worker Node) 로 구성됩니다.
🏗 Kubernetes 클러스터 기본 구조
+----------------------------------------------------------+
| Kubernetes Cluster |
| |
| +-----------------+ +-----------------+ |
| | Master Node | | Worker Node 1 | |
| | (Control Plane)| | - Kubelet | |
| | - API Server | | - Kube Proxy | |
| | - Controller | | - Pod 1 | |
| | - Scheduler | | - Pod 2 | |
| +-----------------+ +-----------------+ |
| +-----------------+ |
| | Worker Node 2 | |
| | - Kubelet | |
| | - Kube Proxy | |
| | - Pod 3 | |
| | - Pod 4 | |
| +-----------------+ |
+----------------------------------------------------------+
⚡ 3. Kubernetes 클러스터 동작 방식
✅ 1) 클러스터 생성 및 노드 등록
1️⃣ 마스터 노드가 클러스터를 초기화 (kubeadm init)
2️⃣ Worker Node가 마스터 노드에 등록 (kubeadm join)
3️⃣ 노드 간 통신을 위해 CNI(Container Network Interface) 설치
✅ 2) 애플리케이션 배포
1️⃣ Deployment를 생성하여 Pod을 관리
2️⃣ Pod이 Worker Node에 배치되어 실행
3️⃣ Service를 통해 Pod 간 통신 및 외부 트래픽 관리
⚡ 4. Kubernetes 클러스터 배포 예제
✅ 1) Kubernetes 클러스터 설정 (Minikube)
# Minikube 클러스터 시작
minikube start
# 클러스터 상태 확인
kubectl cluster-info
# 노드 확인
kubectl get nodes
✅ 2) Deployment를 사용한 애플리케이션 배포
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
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 deployment.yaml
# Pod 상태 확인
kubectl get pods
✅ 3) Service를 사용한 네트워크 통신
# service.yaml
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 service.yaml
# Service 확인
kubectl get services
🔹 LoadBalancer 타입을 사용하면 외부에서 서비스에 접근 가능합니다.
⚡ 5. Kubernetes 클러스터 자동 확장 (Auto Scaling)
Kubernetes는 CPU 사용량 또는 트래픽 증가에 따라 Pod을 자동으로 확장할 수 있습니다.
✅ 1) HorizontalPodAutoscaler(HPA)를 사용한 자동 확장
# CPU 사용량이 50%를 초과하면 자동으로 Pod 추가
kubectl autoscale deployment my-app --cpu-percent=50 --min=1 --max=5
# HPA 상태 확인
kubectl get hpa
🔹 트래픽 증가 시 Pod을 자동 확장하여 성능을 최적화합니다.
⚡ 6. Kubernetes 클러스터 모니터링
✅ 1) kubectl을 사용한 클러스터 상태 확인
# 모든 리소스 상태 확인
kubectl get all
# 특정 Pod의 로그 확인
kubectl logs my-pod
# 실행 중인 노드 상태 확인
kubectl get nodes
✅ 2) Prometheus & Grafana를 사용한 모니터링
• 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
⚡ 7. Kubernetes 클러스터 보안 (RBAC)
Kubernetes는 RBAC(Role-Based Access Control) 을 사용하여 접근 권한을 관리할 수 있습니다.
✅ 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을 사용하면 특정 사용자나 서비스 계정에 대한 권한을 세부적으로 설정 가능합니다.
⚡ 8. Kubernetes 클러스터 배포 전략
✅ 1) 롤링 업데이트(Rolling Update)
• 기존 Pod을 점진적으로 교체하여 무중단 배포 가능
kubectl set image deployment/my-app my-container=nginx:latest
✅ 2) 카나리아 배포(Canary Deployment)
• 일부 트래픽만 새로운 버전으로 전송하여 테스트
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
version: v2 # 새로운 버전 태그 추가
⚡ 결론
• Kubernetes 클러스터는 컨테이너 애플리케이션을 자동으로 배포 & 관리하는 시스템
• Master Node가 클러스터를 제어하고, Worker Node가 애플리케이션을 실행
• 자동 확장, 모니터링, 보안, 무중단 배포 등을 지원
• RBAC, HPA, Prometheus, Grafana를 활용하여 운영 최적화 가능
🚀 Kubernetes 클러스터를 사용하면 대규모 애플리케이션을 안정적으로 운영할 수 있다
출처 : ChatGPT
'Infra > Container' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 (K8s) (0) | 2025.03.03 |
---|---|
[Docker] Docker 정리 (0) | 2025.02.28 |