참고영상
1. 쿠버네티스 개념 및 리소스
- 여러 서버(클러스터)에서 컨테이너화된 프로세스를 관리하는 컨테이너 오케스트레이션 도구
- 주요 리소스: 파드(Pod), 서비스(Service), 노드(Node), 인그레스(Ingress), 디플로이먼트(Deployment)
- 파드: 애플리케이션이 올라가는 최소 단위(=VM 인스턴스와 유사)
- 서비스: 파드 앞단의 네트워크 말단 역할
- 노드: 물리 서버 혹은 VM 한 대
- 인그레스: 외부 트래픽을 받아 네트워크를 관리
- 디플로이먼트: 배포와 관련된 리소스
2. 도입 배경 및 전략
- 신규 애플리케이션(서브 서비스) 운영 시 서버 할당의 비용 문제 해결을 위해 쿠버네티스 도입
- 기존 VM 기반 서비스는 그대로 두고, 신규 서비스만 쿠버네티스에 올리는 점진적 도입 방식
- 쿠버네티스 도입 후, 필요에 따라 기존 서비스도 점진적으로 이전하거나, 맞지 않으면 다시 VM으로도 운영 가능
3. 배포 방법 및 CI/CD 파이프라인
- 기존 레거시 구조를 유지하면서 3단계 배포 구조 설계
- 개발자가 소스코드 작성 후 리파지토리에 커밋
- 젠킨스가 빌드 및 도커 이미지 생성, 넥서스에 저장, YAML(야믈) 파일 생성 및 NHN 클라우드 디플로이에 업로드
- NHN 클라우드 디플로이에서 클러스터 마스터 노드에 배포 명령을 내려, 쿠버네티스에 적용
4. 쿠버네티스의 장점
- 설치가 필요 없음: VM처럼 매번 환경을 세팅할 필요 없이 파드만 추가하면 됨
- 배포의 편리함: 여러 터미널을 띄우지 않아도 되고, 롤백도 빠르고 쉽게 가능
- 셀프힐링(Self-healing): 파드에 문제가 생겨도 자동 재시작, 서비스 연속성 보장
5. 쿠버네티스의 단점
- 새로운 개념(리소스, 설정 등)을 학습해야 하며, 야믈 파일 등 다양한 설정 필요
6. 실제 겪은 문제 사례 및 해결 방법 (10가지)
- 마스터 노드에 파드가 몰려 클러스터 전체가 불안정해진 경험 → 마스터 노드에 테인트(Taint) 설정으로 워커 노드에만 파드 배치
- 파드의 리소스 사용량 초과로 인한 재시작 문제 → 파드 설정에서 리소스 리밋(Limit) 설정
- 디플로이먼트 사용 시 변경 사항 미적용 문제 → 도커 이미지 변경 없을 때 rollout restart 명령어로 재배포
- 배치 작업 파드가 다른 파드에 영향 → 노드 레이블 설정으로 서비스/배치 작업 노드 분리
- 한 노드에만 파드가 몰려 장애 발생 → 파드 안티어피니티(Anti-affinity) 설정으로 분산 배치
- 노드 수 부족으로 재배포 대기 발생 → 노드 수를 파드 수보다 많게 확보
- 인그레스 도입 전 ACL, 포트 관리 문제 → 인그레스 패스 기반 라우팅으로 해결, 서비스명만 기억하면 됨
- 라이브니스 프로브(Liveness Probe) 미설정으로 비정상 서비스 지속 → 라이브니스 프로브로 자동 재시작
- 레디니스 프로브(Readiness Probe) 미설정으로 배포 시 순단 발생 → 레디니스 프로브로 준비되지 않은 파드에 트래픽 미전달
- 로그 확인의 불편함과 유실 → stern, 그라파나 등 로그 집계/분석 도구 사용
7. 운영 꿀팁 2가지
- 파드가 어느 노드에 올라갔는지 wide 옵션 등으로 상세 확인
- 문제 발생 시 describe 명령어로 이벤트/원인 추적, 로그 확인은 로그 집계 도구 활용