본문 바로가기

전체 글

(21)
OS - 소켓 통신이란 소켓(Socket)이란?프로세스가 네트워크를 통해 다른 프로세스와 데이터를 주고받기 위해 운영체제가 제공하는 네트워크 통신의 엔드포인트이다. 서버는 일반적으로 로컬 IP 주소와 포트 번호를 바인딩한 리스닝 소켓을 생성한다. 클라이언트는 서버의 IP 주소와 포트로 연결을 요청하고, 서버는 연결을 수락(accept)한 뒤 클라이언트별 연결 소켓을 생성해 데이터를 주고받는다. 이러한 기술을 사용하여 서버는 하나의 리스닝 소켓으로 새 연결을 기다리면서, 여러 클라이언트에 각각 별도 TCP 연결 소켓을 통해 요청을 처리할 수 있다. 소켓 통신의 흐름 서버 1. socket() 함수를 이용하여 소켓 생성2. bind() 함수로 요청을 받을 ip와 port를 지정3. listen() 함수로 클라이언트 요청에 대기열을..
K8S - CRI(Container Runtime Interface)란 CRI란?kubelet이 여러 Container Runtime을 사용할 수 있도록 만든 플러그인 인터페이스이다. CRI 스펙을 준수하는 런타임으로 인해 kubelet은 코드 변경 없이 여러 컨테이너 런타임을 사용할 수 있다.kubelet은 gRPC 클라이언트이고, containerd/CRI-O 같은 Container Runtime은 로컬의 Unix domain socket을 통해 CRI gRPC 서버를 제공한다. protocol buffer 직렬화를 사용한다.High Level Container Runtime과 Low Level Container Runtime이 있다. Low Level Container Runtime이란?컨테이너는 cgroup과 namespace, chroot로 격리되어 프로세스로 실..
K8S - preStop Hook과 terminationGracePeriodSeconds preStop Hook이란?쿠버네티스는 컨테이너 라이프 사이클에 Hook을 제공한다. 이 중 preStop Hook은 API 요청이나 활성/시작 프로브 실패와 같은 클러스터 관리 이벤트에서 발생하는 컨테이너 종료 시 호출된다. 훅 호출이 끝나야 컨테이너를 종료하는 Sigterm 시그널이 전송되기 때문에, 애플리케이션이 정상적으로 요청을 처리할 수 있도록 버퍼를 주는 것이 좋다. 별도 애플리케이션 종료 스크립트가 없는 경우 sleep을 사용해서 훅을 일시정지 시켜 시간을 버는 용도로 사용한다. terminationGracePeriodSeconds 이란?API Server가 파드를 Terminated 상태로 바꾸고 Kubelet이 파드의 상태를 Terminated라고 확인하게 되면 파드 종료 프로세스를 시작..
AKS - Managed Prometheus 메트릭 수집 방식 AKS의 Managed Prometheus는 어떻게 메트릭을 수집할까? AKS는 Node Exporter라는 에이전트는 있지 않다. 다만 Azure Managed Prometheus를 사용하면 ama라고 하는 agent가 생성되고 이 중 ama-metrics-node가 Node exporter를 대체한다. 아래는 실제 AKS 클러스터에 배포된 ama 에이전트 목록과 설명이다. 이름 (구성 요소)배포 방식주요 역할ama-metrics-operatorDeployment (syspool 에만)클러스터 공통 타겟(kube state metrics 등), CRD로 추가한 앱 타겟(PodMonitor/ServiceMonitor 등)을 누가 수집할지 할당해주는 역할.ama-metricsDeployment (syspo..
리눅스 Cgroup 과 Kubernetes Pod Resource 리눅스 Cgroup이란?리눅스 시스템에서 실행되는 프로세스 그룹이 사용할 수 있는 리소스(CPU, Memory, I/O, Network)를 분리하고 제한할 수 있는 커널 기능. 이 기능을 사용해 리소스를 세밀하게 제어하여 중요한 프로세스에 필요한 리소스를 할당하고, 다른 프로세스가 리소스를 독점하지 않도록 함. 프로세스 그룹이란 하나 이상의 프로세스를 묶은 것으로 부모 - 자식 프로세스와 같이 서로 관계가 있는 프로세스의 묶음이다. Cgroup 기능을 사용하는 방법에는 Systemd와 Cgroupfs가 있지만, 이글의 실습 환경인 Azure Kuberntes 환경에서는 Systemd 드라이버로 테스트를 진행할 예정이다. CPU 격리 확인AKS 기준으로 Cgroup V2, Systemd를 사용하고 있어 아..
K8S - 쿠버네티스의 네트워킹 구조 이 글은 도커와 쿠버네티스의 네트워킹 구조에 대한 설명을 담은 글입니다. Docker Networking 위 그림은 Docker의 네트워킹 구조를 나타내는 그림입니다(Docker는 기본적으로 브릿지 모드입니다). 여기서 호스트의 physical network interface 인 eth0이 존재하고 docker를 설치했을 때 생성되는 docker0 가상 브릿지가 존재합니다. dockerd에서 IP Tables를 수정하여 컨테이너에서 외부로 NAT 방식으로 나갈 수 있도록 합니다.(windows, macOS에서 Docker Desktop을 설치한 경우라면 VM이 Docker 엔진을 수행하기 때문에 docker0 인터페이스가 호스트 OS에서는 안보입니다.) 컨테이너가 생성되면 pair interface라고..
25년 회고 보호되어 있는 글입니다.
DevOps - Node-Modules, PnP 그리고 Next.js의 Standalone Node Modules란 https://nodejs.org/api/modules.html#loading-from-node_modules-foldersIf the module identifier passed to require() is not a built-in module, and does not begin with '/', '../', or './', then Node.js starts at the directory of the current module, and adds /node_modules, and attempts to load the module from that location. Node.js will not append node_modules to a path already ending i..