k8s 학습 로드맵

📚 Level 1: K8s 기본 개념 & 명령어 마스터

1) 핵심 오브젝트 이해 & 실습

# Pod - 가장 작은 배포 단위
kubectl run nginx --image=nginx
kubectl get pods
kubectl describe pod nginx
kubectl logs nginx
kubectl exec -it nginx -- bash
kubectl delete pod nginx

# Deployment - 파드 관리하는 상위 오브젝트
kubectl create deployment web --image=nginx --replicas=3
kubectl get deployments
kubectl scale deployment web --replicas=5
kubectl rollout status deployment web
kubectl rollout history deployment web

# Service - 네트워크 접근 관리
kubectl expose deployment web --port=80 --type=NodePort
kubectl get services
kubectl get endpoints

# ConfigMap & Secret - 설정 관리
kubectl create configmap app-config --from-literal=env=dev
kubectl create secret generic app-secret --from-literal=password=123456

2) YAML 작성 능력 기르기

# deployment.yaml 예시
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
          requests:
            memory: "64Mi"
            cpu: "250m"

3) 네임스페이스 관리

# 네임스페이스 생성 및 관리
kubectl create namespace dev
kubectl create namespace prod
kubectl get namespaces

# 특정 네임스페이스에서 작업
kubectl create deployment app --image=nginx -n dev
kubectl get pods -n dev
kubectl get all -n dev

# 기본 네임스페이스 변경
kubectl config set-context --current --namespace=dev

🔧 Level 2: 실제 애플리케이션 배포 & 운영

1) 실제 서비스 배포해보기

# 예시: WordPress + MySQL 스택
# 1) MySQL 배포
# 2) WordPress 배포  
# 3) 도메인 연결
# 4) HTTPS 설정

# 또는 간단한 웹앱 배포
# - 개인 블로그 (Ghost, Jekyll)
# - 파일 서버 (Nextcloud)
# - 개발 도구 (GitLab, Jenkins)

2) 볼륨 & 스토리지 관리

# PersistentVolume & PersistentVolumeClaim
# hostPath, NFS 등 스토리지 타입 경험
# 데이터 백업/복원 연습

# 실습 예시
kubectl create -f pv-example.yaml
kubectl create -f pvc-example.yaml
kubectl get pv,pvc

3) 네트워킹 심화

# 서비스 타입별 차이점 이해
- ClusterIP (내부 통신)
- NodePort (외부 노출)  
- LoadBalancer (외부 로드밸런서)
- Ingress (HTTP/HTTPS 라우팅)

# CNI 플러그인 이해
# 네트워크 정책으로 보안 강화

🛠️ Level 3: 운영 & 관리 도구

1) 모니터링 시스템 구축

# Prometheus + Grafana 설치
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack

# 메트릭 확인 및 대시보드 구성
# 알림 규칙 설정

2) 로깅 시스템

# ELK Stack 또는 Loki + Grafana
# 중앙 집중식 로그 수집
# 로그 분석 및 알림 설정

kubectl logs -f <pod-name>
kubectl logs <pod-name> --previous  # 이전 컨테이너 로그

3) 헬름(Helm) 패키지 관리

# Helm 기본 사용법
helm repo add stable https://charts.helm.sh/stable
helm search repo nginx
helm install my-nginx stable/nginx-ingress
helm list
helm upgrade my-nginx stable/nginx-ingress
helm rollback my-nginx 1

🔐 Level 4: 보안 & 백업

1) RBAC (Role-Based Access Control)

# 사용자/서비스 계정 관리
# 역할 기반 권한 제어
# 최소 권한 원칙 적용

kubectl create serviceaccount dev-user
kubectl create role dev-role --verb=get,list,create --resource=pods
kubectl create rolebinding dev-binding --role=dev-role --serviceaccount=default:dev-user

2) 시크릿 관리

# 암호, 인증서 등 민감 정보 관리
# Sealed Secrets 또는 External Secrets 도입
# 시크릿 로테이션 전략

kubectl create secret tls my-tls-secret --cert=cert.pem --key=key.pem

3) 백업 전략 수립

# etcd 백업 자동화
#!/bin/bash
BACKUP_DIR="/backup/etcd"
BACKUP_NAME="etcd-backup-$(date +%Y%m%d-%H%M%S).db"

sudo ETCDCTL_API=3 etcdctl snapshot save ${BACKUP_DIR}/${BACKUP_NAME} \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
  --key=/etc/kubernetes/pki/etcd/healthcheck-client.key

# 애플리케이션 데이터 백업
# 설정 파일 버전 관리 (Git)

🚀 Level 5: 고급 운영 기법

1) GitOps 구축

# ArgoCD 설치 및 설정
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Git 기반 배포 자동화
# 설정 변경 추적 및 롤백

2) 성능 최적화

# 리소스 요청/제한 최적화
# HPA (Horizontal Pod Autoscaler) 설정
# 노드 리소스 모니터링 및 최적화

kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10
kubectl get hpa

3) 장애 대응 시나리오

# 의도적 장애 발생 및 복구 연습
# 파드 재시작, 노드 다운, 네트워크 문제 등
# 장애 발생 시 대응 절차 문서화

📋 실습 체크리스트

매주 해볼 것들:

✅ 새로운 애플리케이션 배포해보기
✅ kubectl 명령어 새로운 옵션 시도
✅ YAML 매니페스트 직접 작성하기
✅ 모니터링 대시보드 확인하기
✅ 백업 스크립트 실행 및 복구 테스트
✅ 공식 문서 읽고 새로운 기능 학습

마스터해야 할 kubectl 명령어:

# 필수 명령어들
kubectl get/describe/logs/exec/port-forward
kubectl create/apply/delete/patch
kubectl scale/rollout/expose
kubectl config/cluster-info
kubectl top nodes/pods (metrics-server 필요)