📚 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 필요)