개발/devops

로드밸런서에 대해 알아보자

회사에서 L4 스위치와 로드벨런서 관련된 이슈들을 경험해보며, 로드벨런서에 대한 정리가 필요해보여 기록하게되었습니다. 도입 로드벨런싱 자체는 L2, L3, L4, L7 모두 가능합니다. 하지만 일반적으로 로드벨런서는 L4 Switch를 말하며, 이 글에서 설명하는 LB 또한 L4 Switch 관점에서 작성하였습니다. 1. 로드벨런서의 주요 역할 로드벨런서의 사용하는 이유는 아래와 같습니다. 1.1 부하 분산 서비스의 규모가 커지다되면 단일 서버로는 모든 트래픽을 버틸 수 없습니다. 이런 경우 보통 서버를 두대 이상 띄우는 Scale-Out 형태로 서버를 증설하게 됩니다. 이때 늘어난 N 대의 서버에 부하를 분산시키는걸 부하 분산이라고 하며, 아래의 알고리즘 중 하나를 택해 사용됩니다. 부하분산 알고리즘 ..

2021.10.13 게시됨

개발/devops

프로메테우스에 대해 알아보자

도입 회사에서 서버 개발자로써 생활하다보니 다양한 장애 이슈를 마주하게 되었고, 이를 해결하다 보니 메트릭을 수집하여 서버의 상태를 확인 할 수 있는 모니터링 시스템이 필요하게 되었습니다. 이를 위해 프로메테우스 + 그라파나를 통해 메트릭 모니터링 시스템을 구축하였고, 그 과정에서 공부한 점을 정리하게 되었습니다. 관련 부분은 [Github] 에서 확인 할 수 있습니다. 프로메테우스란? 프로메테우스란 SoundCloud사에서 만든 오픈소스 모니터링 시스템입니다. 로그가 아닌 시스템의 상태를 나타내는 메트릭 정보를 시계열 형태로 저장하며 PromQL 이라는 SQL 형태로 저장할 수 있습니다. 쿠버네티스 환경에서도 프로메테우스 사용을 장려하고 있으며, 주로 Grafana를 통해 프로메테우스의 메트릭 정보를 ..

2021.08.07 게시됨

개발/devops

[k8s] 5. 서비스 - 파드를 연결하고 외부에 노출

지난 시간엔 디플로이먼트를 통해 레플리카 셋, 파드를 편리하게 관리하는 법을 배웠습니다.이번 시간에는 파드를 외부에 노출하는 서비스에 대해 알아봅니다. 1. 이전까지이전 글에서는 다른 파드에 접근하기 위해 임시로 테스트 파드를 만든 뒤테스트 파드에서 해당 파드로 접근을 했었습니다. 즉, 클러스터 내부에서만 사용할 수 있었습니다. 또한 더 큰 문제는 파드의 IP는 계속 변한다는 부분입이다. 여러개의 디플로이먼트를 연동하려면파드의 IP가 아닌 다른 걸로 서로를 발견할 수 있는 방법이 필요합니다. (Discovery) 여담이지만, 이 내용을 보니 Spring Cloud의 디스커버리 서비스인 Eureka가 떠오르네요.  2. 서비스 란서비스의 주요기능은 다음과 같습니다.1.  여러 개의 파드에 고유한 도메인 이..

2020.10.11 게시됨

개발/devops

[k8s] 4. 디플로이먼트 - 레플리카셋, 파드 배포 관리

실제 운영환경에서는 레플리카셋을 YAML 파일에서 사용하는 경우는 거의 없습니다.대부분 레플리카 셋과 파드의 정보를 정의하는 Deployment라는 이름의 오브젝트를YAML 파일에 정의해 사용합니다. 1. 디플로이먼트레플리카 셋의 상위 오브젝트이기 때문에 디플로이먼트를 생성하면 레플리카 셋도 함께 생성됩니다.따라서 디플로이먼트를 사용하면 파드와 레플리카 셋을 직접 사용할 필요가 없습니다. 생성 예시) deployment-nginx.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: my-nginx-deploymentspec: replicas: 3 selector: matchLabels: app: my-nginx template: ..

2020.10.11 게시됨

개발/devops

[k8s] 2. 파드 - 컨테이너의 기본 단위

쿠버네티스에는 셀 수도 없을 만큼 많은 리소스 종류와 컴포넌트가 있습니다.그중에 이번엔 제일 기초가 되는 파드에 대해 알아보도록 하겠습니다. - 1. Pod(파드) 란파드는 제일 기초적인 리소스로, 쿠버네티스 상의 컨테이너 애플리케이션의 기본 단위입니다.파드는 1개 이상의 컨테이너로 구성된 집합입니다. 다음과 같이 기본적인 nginx 파드를 만들어보았습니다. nginx-pod.yaml 이라는 파일을 만들고 아래의 내용을 입력합니다.apiVersion: v1kind: Podmetadata: name: my-nginx-podspec: containers: - name : my-nginx-container image: nginx:latest ports: - containerPor..

2020.10.10 게시됨