실습 목적:
Kubernetes를 운영 엔지니어 관점에서 직접 구축하고 장애까지 경험하는 것
서버:
vm-pms-test - Control Plane - 192.168.1.254
vm-pms-test2 - Worker Node - 192.168.1.206
(테스트 환경 이슈로 Worker Node는 1대로 수행)
OS:
Ubuntu 24.04
Runtime:
containerd
CNI:
Calico
특징:
폐쇄망/제한망 유사 환경
Proxy 경유
Security Group 영향
Ingress, Monitoring, GitOps, Istio까지 확장
핵심 학습:
Kubernetes 장애는 YAML만 보는 게 아니라
노드, 네트워크, 프록시, 방화벽, 런타임까지 함께 봐야 함
실습 목표
구성
Master : vm-pms-test (192.168.1.254)
Worker : vm-pms-test2 (192.168.1.206)
설치 요소
필수 설정
핵심 명령
결과
핵심 학습
실습 목표
수행 내용
1. Calico 설치
2. Node Ready 확인
3. nginx Deployment 생성
4. ClusterIP Service 생성
5. Busybox 생성
6. nslookup 테스트
7. HTTP 호출 테스트
주요 컴포넌트
1) Pod가 떠도 통신이 안됨
확인 (Calico 원인 가능)
kubectl get pods -o wide
2) Worker 통신 실패
확인 (0이면 1로 변경)
sysctl net.ipv4.ip_forward
3) iptables 문제
확인 (FORWARD DROP 상태면 통신 불가)
iptables -L -n
4) 보안그룹 문제
확인 (나는 해당 문제로 통신이 불가했었음)
통신에 필요한 포트들은 사전에 허용 및 테스트를 통하여 추가 필요
핵심 학습:
Kubernetes 통신의 시작은 Service와 DNS,
Pod가 Running이라고 끝이 아니라
실제 통신이 되는지 반드시 검증해야 함
실습 목표
수행 내용
1. NodePort 이해
2. ingress-nginx 설치
3. Ingress 생성
4. hosts 설정
5. nginx.test.local 접속
주요 컴포넌트
핵심 학습:
Service는 내부 연결
Ingress는 외부 진입점
운영 환경에서는 IP보다 도메인이 중요
사용자 → Ingress → Service → Pod 흐름 이해
실습 목표
수행 내용
1. PV 생성
2. PVC 생성
3. Pod 연결
4. 파일 생성
5. Pod 삭제
6. Pod 재생성
7. 데이터 유지 확인
주요 개념
핵심 학습 :
Pod는 언제든 죽을 수 있음
데이터는 Pod가 아니라 Volume에 저장해야 함
Stateful 서비스 운영의 기초는 PV/PVC
실습 목표
수행 내용
1. Resource 설정 Deployment 생성
2. CPU 단위 학습
3. Memory 단위 학습
4. Request 설정
5. Limit 설정
6. QoS 개념 이해
주요 개념
핵심 학습
Request는 최소 보장
Limit은 최대 허용
Scheduler는 Request를 보고 Node를 선택함
운영자는 Pod보다 Resource를 먼저 봐야 함
실습 목표
수행 내용
1. Metrics Server 설치
2. Metrics API 오류 해결
3. kubectl top 사용
4. stress 설치
5. CPU 부하 생성
6. Pod 사용량 확인
7. Node 사용량 확인
주요 개념
핵심 학습
설정(Request/Limit)만으로는 부족함
운영자는 실제 사용량을 볼 수 있어야 함
Metrics Server는 Kubernetes 관측의 시작점
실습 목표
수행 내용
1. Deployment 확인
2. 이미지 변경
3. Rollout 진행
4. Pod 변화 관찰
5. Revision 확인
6. Rollback 수행
주요 개념
주요 명령
kubectl rollout status
kubectl rollout history
kubectl rollout undo
kubectl get pods -w
핵심 학습 :
Deployment는 단순 Pod 생성기가 아님
Rolling Update는 무중단 배포의 핵심
운영자는 장애 발생 시 Rollback을 할 수 있어야 함
실습 목표
수행 내용
1. Helm 설치
2. Helm Repository 추가
3. Chart 검색
4. Ingress-Nginx 설치
5. Helm Upgrade
6. Helm Rollback
7. Helm 삭제
주요 개념
핵심 학습 :
Kubernetes의 패키지 매니저는 Helm
복잡한 애플리케이션을 한 줄로 설치
이후 Monitoring, ArgoCD, Istio의 기반이 됨
실습 목표
수행 내용
1. Prometheus 설치
2. Grafana 설치
3. Loki 설치
4. Promtail 설치
5. Dashboard 확인
6. Loki 연동
7. 로그 조회
주요 개념
핵심 학습 :
운영자는 서비스가 아니라 데이터를 봄
Metrics와 Logs를 함께 봐야 장애 원인을 찾을 수 있음
Grafana는 운영자의 메인 대시보드
실습 목표
수행 내용
1. HPA 생성
2. CPU 목표 설정
3. Load Generator 실행
4. CPU 증가 확인
5. Pod 자동 증가 확인
6. 부하 제거
7. Pod 자동 감소 확인
주요 개념
주요 명령
kubectl autoscale
kubectl get hpa
kubectl describe hpa
kubectl get pods -w
핵심 학습 :
Kubernetes는 스스로 확장할 수 있음
HPA는 Metrics Server와 Request를 기반으로 동작함
자동 확장은 Kubernetes의 핵심 기능 중 하나
실습 목표
수행 내용
1. ArgoCD 설치
2. UI 접속
3. Git Repository 등록
4. Application 생성
5. Sync 수행
6. Auto Sync 활성화
7. Self Heal 확인
주요 개념
핵심 학습 :
Cluster를 수정하는 것이 아니라 Git을 수정함
ArgoCD는 Git 상태를 지속적으로 유지함
실습 목표
수행 내용
1. Self-Signed 인증서 생성
2. TLS Secret 생성
3. Ingress TLS 설정
4. HTTPS 접속
5. curl 테스트
주요 개념
핵심 학습 :
실제 서비스는 HTTPS가 기본
인증서는 Secret으로 관리함
Ingress는 TLS 종료 지점이 될 수 있음
실습 목표
수행 내용
1. Jenkins Pipeline 구성
2. Kaniko Agent Pod 사용
3. Dockerfile 기반 이미지 빌드
4. GHCR Push
5. Kubernetes Deployment 이미지 반영
6. ArgoCD 배포 흐름과 연결
주요 개념
핵심 학습 :
Jenkins는 이미지를 만들고, ArgoCD는 배포
Kaniko는 Docker Daemon 없이 이미지를 빌드할 수 있음
CI/CD 장애는 Git → Build → Push → Pull → Deploy 단계로 나눠서 봐야 함
실습 목표
수행 내용
1. Istio 설치
2. Namespace Label 적용
3. Sidecar Injection
4. Envoy 확인
5. 서비스 호출 생성
6. Prometheus 메트릭 확인
주요 개념
핵심 학습 :
서비스 간 통신도 관리 대상
Envoy가 모든 트래픽을 관찰함
mTLS는 서비스 간 통신을 보호함
실습 목표
수행 내용
1. Kiali 설치
2. 접속
3. Prometheus 연동 확인
4. 트래픽 생성
5. Graph 확인
6. mTLS 상태 확인
주요 개념
핵심 학습 :
Kiali는 Istio의 눈
Prometheus 데이터를 기반으로 서비스 관계를 보여줌
운영자는 서비스 흐름을 시각적으로 확인할 수 있음
실습 목표
수행 내용
1. Cordon 수행
2. Drain 수행
3. Pod 재배치 확인
4. PDB 생성
5. Eviction 확인
6. Uncordon 수행
주요 개념
핵심 학습 :
노드를 끄기 전에 반드시 Drain
PDB는 서비스 가용성을 보호함
Kubernetes 유지보수는 Cordon → Drain → 작업 → Uncordon 순서
실습 목표
수행 내용
1. Cluster Upgrade
2. Node Pool Upgrade
3. 신규 Node 생성
4. Drain 수행
5. Pod 재배치
6. 기존 Node 제거
7. 신규 Node 운영
주요 개념
핵심 학습 :
Control Plane과 Node Upgrade는 별개
Node Pool Version과 Node Version은 다를 수 있음
업그레이드의 목표는 버전 상승이 아니라 서비스 무중단 유지
실습 중 경험한 대표 장애
가장 중요한 학습
1. 증상 → 원인 → 분석 → 조치 순서로 접근
2. kubectl describe 와 kubectl logs 활용
3. 네트워크와 Proxy 문제 분석 능력
4. 운영자는 구축보다 문제 해결 능력이 중요