오늘은 쿠버네티스 기반 DevOps 방식에 대해 알아보려 한다.
EKS(kubernetes)
- kubernetes: 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼
- 컨테이너 오케스트레이션: 컨테이너를 클러스터로 묶어 자동으로 배포, 확장, 복구를 관리
- Auto-scaling
- Self-healing
- 로드 밸런싱: 여러 인스턴스 간에 트래픽을 분산시켜 시스템의 성능을 최적화
- 자동 배포 및 롤백
- EKS: AWS에서 제공하는 완전관리형 kubernetes 서비스
일반적인 EKS 구성

EKS 내에서 DB를 운영하는건 어떤가요?
-
container라는 overhead를 안고 언제 서버가 종료될지 모르는 클라우드에서
stateful한 DB를 운영하는건 어려운 일
-
호스트의 자원을 다른 서비스 공유하기 때문에 병목현상이 발생할 수 있음
-
일반적으로 고가용성을 보장하기 어렵기 때문에 DB는 되도록 클라우드에서 제공하는 managed service를 사용함 (백업/복구, 로그, 메트릭 등등)

EKS 장/단점
- 장점
- 오픈소스: 벤더락인에서 일부 자유로워지고 Custom하게 사용 가능함
- 관리형 서비스라서 상대적으로 운영 비용이 적음
- 단점
- 러닝 커브(배울게 너무 많다)
- 지속적인 클러스터 버전 업그레이드(약 3개월 주기)
- vanilla kubenetes와 managed kubenetes는 차이가 존재
EKS 의 고질적인 문제점
- hypervisor overhead로 인한 성능 저하
- 물리적 서버의 하드웨어를 가상 머신이 공유하도록 만들어주는 S/W
- CPU, Memory, Disk, Network
- echo system
- 모니터링: ELK / Prometheus / Grafana
- 인프라 관리: helm, kustomize, terraform
- CI/CD: ArgoCD, Jenkin X, Tekton
- 네트워크: Calico, Istio
DevOps 방식별 차이점 비교

한번에 Kubernetes로 넘거나는것은 어렵다!
-
권장하는 방식
- On-Premise -> Managed service
- On-Premise -> EC2 -> Managed service -> Kubernetes
- On-Premise -> On-Premise(docker) -> Kubernetes
-
꼭 Kubernetes가 정답은 아니다!
- 하지만 당분간 인프라의 엔드컨텐츠는 결국 Kubernetes이지 않을까…