본문 바로가기

server

(37)
[k8s] nginx pod * 200개를 띄울수 있나요? k8s (minikube) 에서 과연 몇개의 pod까지 띄울수 있을까?나는 순진하게 무한대라고 생각했다. 정확히는 서버의 자원이 허락하는한 무한히 띄울수 있다고 생각했다.일단 테스트 시작 apiVersion: apps/v1kind: Deploymentmetadata: name: smallest-web-serverspec: replicas: 2 # 두 개의 Pod를 생성합니다. selector: matchLabels: app: web-server template: metadata: labels: app: web-server spec: containers: - name: web-server image: nginx:alpin..
rabbitmq 심화 (persistent / cluster) rabbitmq persistentdelivery_mode는 RabbitMQ에서 메시지의 배달 모드를 지정하는 데 사용되는 옵션. 이 옵션은 메시지를 메모리에만 저장할지 아니면 디스크에 영구적으로 저장할지를 결정Transient메시지를 메모리에만 저장. RabbitMQ가 종료되면 메모리에 있는 메시지는 모두 삭제됨메시지는 RabbitMQ 서버의 메모리에서만 보관되므로 메모리가 부족한 경우 메시지 손실이 발생할 수 있음메시지를 가장 빠르게 처리하고자 할 때 사용Persistent메시지를 디스크에 저장. RabbitMQ가 종료되어도 메시지는 디스크에 보존됨.메시지를 디스크에 영구적으로 저장하여 메시지 손실을 방지할 수 있으며 재부팅 후에도 메시지가 유지되므로 안정성을 높일 수 있다.메시지의 지속성이 중요하고..
rabbitmq start docker-compose.yamlversion: "3"services: rabbitmq: image: rabbitmq:3-management-alpine container_name: rabbitmq-stream volumes: - ./etc/:/etc/rabbitmq/ - ./data/:/var/lib/rabbitmq/ - ./logs/:/var/log/rabbitmq/ ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_ERLANG_COOKIE: "RabbitMQ-test" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DE..
[k8s] argocd (minikube에 올려보기) 저번 포스팅에 올렸던 간단한 helm을 체험한 후 이번엔 minikube에 argocd를 통해 CI/CD 자동 배포화가 가능하도록 해보았습니다. 이번 포스팅의 배포 아키텍처입니다. 로컬에 docker 이미지를 빌드 후 github에 변경된 코드(helm)를 커밋합니다. Push 함과 동시에 helm chart에 버전 업데이트를 진행한다. 그러면 Argo에 등록된 Helm Chart 저장소에서 yaml resource를 읽게 되고 코드에 맞춰 쿠버네티스에 배포가 진행된다. 1. argocd install $ kubectl create namespace argocd $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/..
[k8s] fastapi + helm (minikube에 올려보기) helm 공부하기 위해 간단하게 fastapi를 minikube에 올리는 예제를 해보았다. 이번 포스팅에서는 (1)로컬에서 docker를 실행해보고, (2) minikube에서 실행시켜 보고, (3) 마지막으로 helm으로 실행시켜 보았다. 내용이 꽤 길다. 해당 포스팅의 모든 소스는 github에 올려두었다. https://github.com/uiandwe/fastapi_k8s 1. 로컬에서 docker를 실행 k8s에 올리기 위해 위해 docker부터 만들어야 한다. fastapi 서버 부분이다. 간단하게 호출히 리턴하도록만 만들었다. app/main.py from typing import Union from fastapi import FastAPI app = FastAPI() @app.get("/"..
http status 307 개발 진행중 307 status를 처음 발견해서 포스팅한다. 아래 그림을 보면 첫번째 notice/ 로 put을 날렸는데, 서버에서 307을 리턴하고 바로 다음 notice로 다시 put이 가는 상황이다. 사실 별건 아니고, 요청한 body값을 재사용하기 위한 status값으로 똑같은 body값을 반환하며 notice/ → notice 로 response headers에 location에 변경한것을 볼수 있다. 동작에는 아무런 문제가 없지만 결국 요청이 두번가는 것이다. 요청에 대한 사소한 실수로 “/” 를 빼면 요청이 한번만 가는것을 확인했다. 요런 사소한 실수를 없애면 더욱 비용 절감되지 않을까? 참고사항 https://developer.mozilla.org/en-US/docs/Web/HTTP/Sta..
airflow ModuleNotFoundError: No module named 'slacker’ 문제점 airflow를 docker-compose로 관리하며 사용중이며 python 패키지를 추가해야하는데, docker 빌드시 requirement.txt에 패키지를 추가 했지만 airflow에서는 설치가 안되엇다고 계속 에러 메시지가 뜬다. 심지어 도커 빌드시 설치가 되는것을 확인했다!!! dockerfile에서 설치하려는 나의 노력을 볼수있다! 하지만 소용이 없었다. FROM apache/airflow:2.1.3 USER root RUN apt-get update \ && apt-get install -y --no-install-recommends \ openjdk-11-jre-headless \ && apt-get autoremove -yqq --purge \ && apt-get clean \ &..
쿠폰발급 서비스 구축하기 (실험용) 문제!! 쿠폰 발급 시스템을 만들어 볼 예정입니다. 쿠폰은 100개이며 선착순으로 발급됩니다. 대용량의 요청을 견디기 위해선 어떤 점을 고려해서 해야 하는가? 1. 10000개의 요청을 견디는 서비스 구조를 만들자!! 우선 하나의 ec2를 올려서 LB에 물려서 통신을 확인하자!! (Hello, world!) LB 로그에서 통신 10개 성공 확인 성공 확인 (200) 이번엔 10000개를 테스트해보자!! 에러율 83%!!!! 하나의 서버로는 일반 요청(DB 요청 커넥션 없음)부터 에러가 발생한다. gunicorn 로그를 봤더니 별다른 에러가 없다. 그냥 통신 자체가 서버까지 도달하지 못했다. 그러면 ec2를 LB(로드 밸런스)에 더 추가해보자. (target group에 추가하는 게 건강상 좋습니다.) e..