DevOps. 31

Grafana k6 사용하여 부하테스트 하는 방법 3

이번에는 Grafana와 연동하여 모니터링 데이터를 시각화하는 실습을 진행해보겠습니다. 대시보드 구성 1. influx db 설치 influx db 는 8086 포트를 점유합니다. $ sudo apt install influxdb 2. grafana 설치 grafana 는 3000 포트를 점유합니다. 따라서 보안그룹에서 자신의 IP 에 대해 3000 포트 open 정책을 추가합니다. 초기 비밀번호 : admin / admin $ sudo apt install grafana ubuntu 20.04 인 경우 $ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - $ echo "deb https://packages.grafana.com..

DevOps./Infra 2022.12.07

Grafana k6 사용하여 부하테스트 하는 방법 2

이번에는 k6를 이용해서 부하테스트 진행하는 방법을 알아보겠습니다. k6 설치 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69 $ echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list $ sudo apt-get update $ sudo apt-get install k6 Smoke Test 테스트를 진행하기 위해서는 script가 필요하기 때문에, 다음과 같이 테스트 시나리오에 필요한 로직을 작성합니다. # smoke.js import http from..

DevOps./Infra 2022.12.07

Grafana k6 사용하여 부하테스트 하는 방법 1

부하테스트를 진행하기전에 어떠한 테스트들이 있고, 테스트를 위한 설정 값들은 무엇이 있는지 알아보자. Smoke Test 최소 부하 상태에서 시스템에 오류가 발생하는지 확인하는 테스트 VUser: 1~2로 구성 Load Test 적절한 부하를 발생시켜 통계적으로 의미있는 수치를 측정하는 테스트 발생시키는 부하는 실제 시스템에 적용될 예상 트래픽이어야 한다 서비스의 평소 트래픽과 최대 트래픽 상황의 성능 테스트 평균 VUser 최대 VUser 부하 테스트의 목표는 애플리케이션이 향후 예상되는 로드를 관리할 수 ​​있도록 데이터베이스, 하드웨어, 네트워크 등과 같은 애플리케이션의 모든 구성 요소에 대한 상한을 결정한다. Stress Test 시스템이 과부하 상태에서 어떻게 작동하는지를 검사하는 테스트 무조건..

DevOps./Infra 2022.12.05

Nginx로 Reverse Proxy 서버 만들기

1. Reverse Proxy 우리의 WAS는 비즈니스 로직만 담당하도록 구성하고 싶어요. TLS와 같은 부수적인 기능으로 애플리케이션에 직접 영향을 주고 싶지 않아요. 그럴 때 중간에 대신 역할을 수행하는 녀석이 필요한데, 여기서는 Reverse Proxy가 그 녀석입니다. Reverse Proxy는 클라이언트로부터의 요청을 받아서(필요하다면 주위에서 처리한 후) 적절한 웹 서버로 요청을 전송합니다. 웹 서버는 요청을 받아서 평소처럼 처리를 하지만, 응답을 클라이언트로 보내지 않고 Reverse Proxy로 반환합니다. 요청을 받은 Reverse Proxy는 그 응답을 클라이언트로 반환합니다. 통상의 Proxy Server는 LAN -> WAN의 요청을 대리로 수행합니다. 가령, 특정 웹 서비스에 접속..

DevOps./Infra 2022.11.21

[Kubernetes] Secret

Secret이란? 패스워드, API Key, SSH Key 등 민감한 정보를 컨테이너에 주입해야 한다면? 시크릿 (Secret) 컨피그맵과 사용법 비슷 시크릿은 사용 목적에 따라 몇 가지 종류로 나누어 짐 쿠버네티스는 기본적으로 시크릿 값을 저장할 때 Base64 인코딩 Secret의 종류 1. Opaque (generic) — 일반적인 용도의 시크릿 2. dockerconfigjson — 도커 이미지 저장소 인증 정보 3. tls — TLS 인증서 정보 4. service-account-token — ServiceAccount의 인증 정보 kubectl Secret 생성 명령어 (generic) my-secret 이름의 generic 타입 Secret 생성 $ kubectl create secret g..

DevOps./Kubernetes 2022.02.02

[Kubernetess] ConfigMap

ConfigMap이란? 어플리케이션의 설정 값을 컨테이너에 주입하고 싶다면? 컨피그맵 (ConfigMap) 설정 정보를 환경변수 혹은 볼륨의 형태로 파드에 전달하기위한 목적으로 사용 파드에서 직접 환경변수를 관리하지 않고 ConfigMap을 분리하여 목적에 따라 설정 데이터를 다르게 주입 가능 kubectl ConfigMap 생성 명령어 my-config 이름의 ConfigMap 생성 $ kubectl create configmap my-config my-config 이름의 ConfigMap 생성 - 로컬의 config.yaml 파일을 키에 저장 $ kubectl create configmap my-config --from-file config.yaml my-config 이름의 ConfigMap 생성 -..

DevOps./Kubernetes 2022.02.02

[Kubernetes] Service (서비스)

서비스란? Deployment를 통해 파드를 수평확장 하면 트래픽은 어떻게 분산시키지? 외부로부터의 요청을 받으려면 어떻게 해야하지? 서비스 (Service) 여러 파드에 대해 클러스터 내에서 사용 가능한 고유 도메인 부여 여러 파드에 대한 요청을 분산하는 로드 밸런서 기능 수행 파드의 IP는 항상 변할 수 있음에 유의. 일반적으로는 ClusterIP 타입의 Service와 함께 Ingress를 사용하여 외부 트래픽을 처리합니다. 서비스의 종류 (총 4가지) 1. ClusterIP와 서비스 디스커버리 ClusterIP Service API 리소스의 가장 기본적인 타입 쿠버네티스 클러스터는 Pod에 부여되는 Pod IP를 위한 CIDR 대역과 Service에 부여되는 Cluster IP CIDR 대역이 독..

DevOps./Kubernetes 2022.02.02

[Kubernetes] Deployment (디플로이먼트)

디플로이먼트란? 서비스 버전이 업데이트되어 파드를 새로운 버전의 이미지 파드로 교체해야 한다면? 새 버전에 이슈가 발견되어 롤백을 진행해야 한다면? 디플로이먼트 (Deployment) 파드의 이미지 버전이 갱신될 때 배포 전략을 설정 디플로이먼트 오브젝트를 생성하면 대응되는 ReplicaSet과 Pod 자동 생성 기본적으로 Recreate 전략과 RollingUpdate 전략 지원 사용자는 특수한 목적이 아니라면 파드와 레플리카셋이 아닌 디플로이먼트로 워크로드 관리 디플로이먼트의 배포전략 재생성 (Recreate) 기존 레플리카셋의 파드를 모두 종료 후 새 레플리카셋의 파드를 새로 생성 롤링 업데이트 (Rolling Update) 세부 설정에 따라 기존 레플리카셋에서 새 레플리카셋으로 점진적으로 이동 m..

DevOps./Kubernetes 2022.02.02

[Kubernetes] ReplicaSet (레플리카셋)

레플리카셋이란? 파드의 수를 늘리고 싶다면? (Scale-out) 레플리카셋 (ReplicaSet) 정해진 수의 파드가 항상 실행될 수 있도록 관리 기존 실행중이던 파드에 문제가 생기면 파드를 다시 스케줄링 ReplicationController의 신규 버전 (현재는 Deprecated) 레플리카셋의 동작원리 ReplicaSet Controller가 Control Plane(마스터 노드)에 존재 spec.selector에 대응되는 파드의 수가 spec.replicas와 동일한지 지속적으로 검사하고, 다를 경우 스케일 아웃 혹은 인 진행 레이블 셀렉터 (Label Selector) 쿠버네티스 오브젝트는 모두 metadata.labels 에 Key - Value 형태의 레이블 값을 가짐 특정 오브젝트 목록을..

DevOps./Kubernetes 2022.02.02

[Kubernetes] 파드 (Pod)

파드 (Pod) 쿠버네티스가 컨테이너를 다루는 기본 단위 1개 이상의 컨테이너로 구성된 컨테이너 집합 동일 파드 내 컨테이너는 여러 리눅스 네임스페이스를 공유 => 네트워크 네임스페이스 공유 (동일 IP 사용) 파드 관련 kubectl 명령어 파드 목록 확인 $ kubectl get pod 특정 파드 상태 확인 $ kubectl describe pod hello 특정 파드에 명령어 전달 $ kubectl exec -i -t hello bash 특정 파드 로그 확인 $ kubectl logs pod/hello 멀티 컨테이너 파드와 사이드카 패턴 동일 파드 내 컨테이너는 모두 같은 노드에서 실행 (네임스페이스를 공유하기 때문) 사이드카 패턴 (Side-car Pattern) 메인 컨테이너를 보조하는 컨테이너..

DevOps./Kubernetes 2022.02.02