본문 바로가기

전체 글35

Terraform과 Shell Script를 통해 AWS 비용 절감하기 들어가기 전에 지난 6월부터 현재까지 소프트웨어 마에스트로 과정을 진행하면서 Kubernetes 기반 MLOps 서빙 플랫폼을 제작하고 있습니다. 핵심 목표로는 모델러가 Kubernetes, Backend 지식 없이 모델 버전 관리, 인퍼런스 서버 배포, A/B 테스트, 모니터링 등의 기능을 제공하는 것입니다. So1s Kubernetes 기반 MLOps 서빙 프레임워크 / 업스테이지 주관 SWM 벤처 프로젝트 - So1s github.com 저희 팀에서는 Kubernetes를 사용하기 위해서 클러스터를 사용할 수 있는 환경이 필요했습니다. 다행스럽게도 소프트웨어 마에스트로 측에서 AWS에 대한 비용을 일부 지원하고 있기 때문에 AWS EKS를 사용하기로 결정했습니다. 겪었던 문제점 단일 클러스터 사용으.. 2022. 11. 5.
HPA와 Metrics Server HPA 일반적으로 Deployment나 Statefulset 같은 워크로드를 사용하면 레플리카 수를 지정하여 가용성 있게 운영할 수 있게 해 준다. 그러나 레플리카 수를 과도하게 지정하여 리소스 낭비를 하는 경우가 발생하고 반대로 서비스에 과부하가 걸려 지정한 레플리카 수로 처리하기 벅찬 경우가 발생한다. 그래서 쿠버네티스에서는 워크로드 내에서 발생하는 메트릭 값을 기준으로 레플리카 수를 동적으로 조정하는 기능인 HPA를 제공하고 있다. HPA는 K8s에서 워크로드에 대한 부하가 발생하면 워크로드에 해당하는 파드의 개수를 수요에 맞게 늘려준다. 특징 HPA는 간헐적으로 컨트롤 루프 형태로 구현. → 기본적으로 15초마다 지정된 워크로드의 리소스를 확인한다. 주기적으로 scaleTargetRef에 정의된 .. 2022. 10. 10.
Helm hooks을 사용하여 Namespace에 istio-injection label 설정하기 문제점 Istio를 사용하려면 Istio 환경 설치 외에도 Istio(Envoy) Proxy를 각각의 파드에 Sidecar에 주입해서 사용해야 한다. Sidecar를 주입하기 위해서는 다양한 방법이 존재하는데 일반적으로 Namespace에 istio-injection=enabled 라벨을 추가하여 자동으로 Sidecar를 주입하는 방법이 있다. 파드를 생성하는 워크로드에도 라벨을 추가하여 파드가 생성할 때 사이드카를 자동으로 주입하도록 할 수 있다. 그러나 Helm을 통해 작성된 여러 차트 같은 경우에는 네임스페이스를 “생성”만 해주는 기능만 있을 뿐 위 같은 커스텀 라벨을 붙일 수 없다. 그렇다고 Namespace를 Helm Chart에 넣자니 해당 릴리스가 삭제되면 해당 네임스페이스에 있는 릴리스 외.. 2022. 9. 25.
Infrastructure Provisioning Tool, Terraform 과거 인프라 관리 과거에는 대부분의 인프라 관리를 온프레미스로 진행했다. 네트워크, 컴퓨팅, 냉각 설비 등의 인프라 리소스를 모두 구매하여 데이터 센터에 위치시키고 OS를 설치하거나 어플리케이션 구동에 맞게 설정하는 등의 복잡한 수동적인 절차가 필요했다. 인프라 관리에는 다음과 같은 문제가 발생했다. 각 인프라 분야의 엔지니어를 고용하는 비용과 서로 다른 분야의 인프라 엔지니어들이 소통하는 비용이 크게 발생했다. 갑작스럽게 인프라 리소스가 필요지면 해당 인프라를 데이터 센터까지 가져오고 환경 설정하는 작업이 오래 걸렸고 심지어 회사의 규모가 커질수록 여러 부서의 승인 절차까지 기다려야 하기 때문에 서비스 수요에 맞춰 빠르게 대응할 수 없었다. 인프라 성능에 대한 모니터링이 어려웠다. 인프라 단에 장애가 .. 2022. 9. 18.
쿠버네티스 패키지 매니저 Helm 현재 쿠버네티스는 가장 많이 사용하고 있는 오픈소스 컨테이너 오케스트레이션 툴이다. 다양한 리소스, 워크로드를 YAML 형태에서 쉽게 정의하여 컨테이너화 된 애플리케이션을 효율적으로 배포 및 운영할 수 있게 도와준다. 이를 통해 변화에 대응하여 신속하게 애플리케이션을 배포하거나 가동 중인 애플리케이션에 대해 스케일 인/아웃을 하는 등 계속되는 변화를 전제로 설계된 높은 유연성과 확장성을 제공하고 있다. 그러나 쿠버네티스를 사용하려면 매니페스트를 작성해야 하는데 매니페스트에는 몇 가지 아쉬움이 존재한다. 1. 매니페스트에서 개발 환경, 프로덕션 환경에 대해 일부분만 달라도 배포할 때마다 매니페스트를 수정해야 하는가? 2. 여러 개의 매니페스트를 하나의 프로덕트로 제공할(받을) 수 없는가? 3. 가동 중인 .. 2022. 8. 17.
Fluent Bit Alias 설정으로 Prometheus Metrics을 쉽게 파악하기 Fluent Bit는 CNCF의 프로젝트 중 하나인 Fluentd의 서브 프로젝트이다. Fluentd보다 가볍고 빠르다는 장점을 가지고 있어 K8s에서 로그 데이터를 수집할 때 자주 사용된다. Fluent Bit의 다른 장점 중 하나는 기본적으로 메트릭 정보를 제공한다는 점이다. 특히 HTTP를 통해서 JSON 기반의 메트릭이나 Prometheus 기반의 메트릭 데이터를 제공하기 때문에 쉽게 모니터링할 수도 있다. 제공하는 메트릭은 fluentbit_input_records_total, fluentbit_input_bytes_total, fluentbit_output_proc_records_total, fluentbit_output_proc_bytes_total, fluentbit_output_error.. 2022. 8. 7.