목록DevOps (186)
devops
가용성과 확장성 가용성(Availability)는 시스템이 정상적으로 사용 가능한 정도를 의미한다. 정상 사용시간(Uptime)을 정상사용시간과 사용불가시간(Downtime)을 합친 전체 사용시간으로 나눈값을 표현한다. 가용성 99.95%는 1년에 4시간 22분의 다운타임이 된다. 서비스 사용 불가시간을 최소로 하는 것이야말로, 더 높은 가용성을 달성하는 것이다. 또한, 가용성의 핵심으느 단일 장애점(Single Point of Failure)를 없애는 것이다. 어떤 한 노드가 장애가 발생하더라도, 다른 노드가 대체할 수 있어야한다. 이것을 시스템 확장이라고 말한다. 확장성(Scalability)은 요구되는 시스템의 성능에 따라서 동적으로 서버 구성이 변경되고, 시스템 처리 능력을 최적화할 수 있는 것을..
SLI(서비스 수준 척도, Service Level Indicator) 서비스 수준을 판단할 수 있는 정량적인 측정 값이다. 응답속도: 요청에 대한 응답이 리턴되기까지의 시간 에러율: 전체 요청 수 대비 에러 처리량: 초당 처리할 수 있는 요청 수 가용성: 서비스가 사용가능한 상태로 존재하는 시간 비율 내구성: 데이터 저장이 중요한 경우 SLO(서비스 수준 목표, Service Level Objectives) SLI를 기준으로 서비스의 목표를 정한다. SLI
프로메테우스는 오픈소스 모니터링/알림 시스템이다. 쿠버네티스와 노드, 프로메테우스를 모니터링할 수 있다. 쿠버네티스를 지원하는 재단 CNCF가 프로메테우스를 관리하고 있고 이 두 도구의 시각화를 담당하는 Grafana를 포함, 이 세 가지가 한 묶음으로 많이 쓰이는 편이다. Prometheus 구성요소 시계열(Time series) 데이터를 저장 다양한 exporter로부터 대상의 메트릭을 pull하여 주기적으로 가져오는 모니터링 시스템 Alert manager로 경고, 알람 설정 사용자가 직접 질의가능한 Web UI(PromQL언어 사용) 쿠버네티스 exporter 프로메테우스는 쿠버네티스 메트릭을 가져올 수 있는 쿠버네티스 exporter가 있다. exporter는 kube API를 사용한다.
Load Average? 프로세스의 여러 상태에서 Running(자원을 소모하고 있는 실행 상태), Uninterruptible Sleep(I/O 작업 처리를 대기 중인 ps상태, D 라고도 한다)에 있는 프로세스들의 개수를 1분, 5분 15분 단위로 평균을 만든 것이다. 값이 작을 수록 부하가 덜되었다는 의미 0.00 : CPU 사용률이 없다 (싱글코어 기준) 1.00 : CPU를 100% 사용 (싱글코어 기준) 1.00 이상인 경우, 2.00은 50%는 처리중, 50%는 대기중 (싱글코어 기준) *1분 동안의 값이 15분에 비해 작으면 이는 장애가 발생한지 좀 지난 것으로 해석할 수 있다. *15분 값에 비해 1분과 5분 값이 높으면 부하가 심해지고 있다고 해석할 수 있다. 여기서 Load Avera..
모니터링의 목표 1. 시간 기준으로 측정되는 주요 메트릭을 최소화, 고가용성 달성 2. 사용량 추적을 통해 이전에 세운 가설을 검증, 개선 * 메트릭(Metric) 메트릭은 시간에 따라 측정한 결과값이다. 큰 의미로는 비즈니스 개념을 나타내는 수치 측정을 의미하기도 한다. 간단한 예로는 연간 순매출, 시간당 CPU 사용률 등 시간 개념과 함께 적용된다. 시간외에도 다른 기준으로 삼을 수 있다. 모니터링 메트릭 및 목표 by 구글 1. 장기적인 트렌드 분석 데이터베이스의 예상 용량, 용량의 증가 속도 확인 DAU(일간 활성 사용자수)의 증가 속도 2. 시간의 경과 및 실험 그룹 간의 비교 DB별 쿼리 속도 확인 캐시용 노드 추가 시, 캐시 적중률(hit rate) 확인 3. 경고 인프라 예상 문제 및 문제..
K6 Grafana k6는 성능 테스트를 쉽게 할 수 있는 오픈소스 부하 테스트 도구다. 무료로 사용할 수 있고, 자유자재로 확장가능하다. Grafana Labs와 커뮤니티가 개발 했으며, 시스템의 안정성을 테스트하는 데 굉장히 효과적이다. 아래와 같은 특징이 있다. 개발자 친화적인 API Javascript ES2015/ES6의 Script(로컬과 연결 모듈 지원) 목표 지향적이고 자동화 부하 테스트 가능 K6 설치 방법(Ubuntu/Debian) $ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD1..
500 Internal Server Error 하이퍼텍스트 전송 프로토콜 (HTTP) 500 Internal Server Error 서버 에러 응답 코드는 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였다는 것을 나타냅니다. 이 에러 응답은 "서버 에러를 총칭하는"(catch-all) 구체적이지 않은 응답입니다. 종종, 서버 관리자들은 미래에 같은 에러를 발생하는 것을 방지하기 위해 500 상태 코드 같은 에러 응답들에 더 많은 자세한 내용을 남겨 둡니다. 어플리케이션 상태검사 liveness probe : 컨테이너 내부의 어플리케이션이 살아있는 지 검사한다. 검사 실패 시 해당 컨테이너는 restartPolicy에 따라 재시작된다. (정상 상태를 유지하고 있는지, 트래픽 전송) readine..
인그레스 인그레스는 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API Gateway다. HTTP를 관리하며 로드 밸런서, SSL Termination, 가상 호스팅을 제공한다. 인그레스 필요성 인그레스 리소스는 로드 밸런싱과 더불어 호스트 기반 라우팅을 지원한다. Cluster IP는 인그레스가 로드 밸런서의 역할을 수행한다. 단순한 어플리케이션도 서비스는 두 개 이상의 HTTP 요청을 가진다. 보통 Web Server와 WAS인데, 이러한 서비스의 접근을 별도의 포트로 구분해서 접속하게 할 수 있다. 그러나 하나의 호스트 상에서 라우팅으로 구분하면 보다 유연한 서비스를 만들 수 있다. * Web server는 ' / ' , WAS는 ' /api ' 로 라우팅할 수 있다. * YAML 파일에서 s..
Pod(파드) 파드는 일시적이며, 언제나 삭제될 수 있따. 그래서 Stateless하다는 특징이 있다. 이 파드의 교체와 배치를 담당하는 것은 deployment다. deployment는 replicaset을 통해서 파드를 scale out하고 이 때 만들어지는 파드들은 상호 대체가 가능하다. 파드가 사라져도 데이터를 남기고 싶을 수 있다. 대표적인 Stateful 어플리케이션으로 MySQL, MongoDB, Redis같은 DB가 있다. DB 어플리케이션이 담긴 파드가 사라질때, 데이터가 함께 사라져선 안된다. 그래서 쿠버네티스는 영속적인 데이터를 저장하기 위해 볼륨(Volume)을 연결할 수 있다. 이 볼륨은 클라우드 서비스에서 Volume을 따로 분리하는 것과 같은 역할을 한다. 그래서 파드에 볼륨을..
https://gre-eny.tistory.com/344