본문 바로가기

소프트웨어-이야기/인프라

개발자를 위한 최소한의 DNS 지식 (2): 쿠버네티스 응용편 개발자를 위한 최소한의 DNS 지식 (1): 기초편에 이어서, 쿠버네티스를 통해 DNS을 살펴보자. 쿠버네티스 컨테이너의 DNS 설정 확인해보기 dnsutils를 설치해서, 테스트를 해보자. kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml 그다음 resolv.conf 설정을 살펴보자. kubectl exec -i -t dnsutils -- cat /etc/resolv.conf dnsutils 컨테이너를 실행하여, resolv.conf 기본값을 살펴보자. resolv.conf 파일에 search option이 설정되어있다. 쿠버네티스에서 올라간 애플리케이션에서 PQDN으로 도메인을 호출했을 때, 알아서 주소를 찾아가는 이유는 이 설정 덕분..
[Kubernetes] readiness/liveness probe 쿠버네티스는 두가지 유형의 상태 체크 기능을 가지고 있다. Readiness Readiness Probe는 애플리케이션이 트래픽을 받을 준비가 되었다는 것을 쿠버네티스에 알리는 역할을 한다. 쿠버네티스는 트래픽을 받기 전에 Readiness Probe를 통과했는지 확인한다. Readiness Probe에 실패하면, 쿠버네티스는 Readiness Probe을 통과할 때까지 파드로 트래픽 전송을 중단한다. Liveness Liveness Probe는 애플리케이션이 살았는지, 죽었는지 알려주는 역할을 한다. 파드가 살아있으면 쿠버네티스는 별도의 조치를 하지 않는다. 그러나 파드가 죽어있다면, 쿠버네티스는 파드를 제거하고 새로운 파드를 시작한다. 두가지 시나리오를 통해, 두 차이점을 이해해보자. Readines..
개발자를 위한 최소한의 네트워크 지식 방화벽 방화벽은 미리 정의해둔 보안 규칙에 의해서 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 역할을 한다. VIP 가상 IP (Virtual IP)의 약자이다. NAT 사설 네트워크에 속한 여러 호스트가 하나의 공인 IP으로 인터넷에 접속하기 위해 사용하는 기술을 말한다. NAT은 제한된 공인 IP을 여러 호스트가 공유해서 사용하기 위해 나온 기술이다. 그래서 공인 IP를 NAT IP이라고 부르기도 한다. 인바운드 트래픽 인바운드 트래픽은 외부에서 서버 내부로 들어오는 요청을 말한다. 인바운드 트래픽 IP 제한은 서버를 호출할 수 있는 외부 서버 IP를 관리하는 것을 말한다. 아웃바운드 트래픽 아웃바운드 트래픽은 서버에서 외부로 나가는 요청을 말한다. 즉, 서버에서 다른 외부 서버를 호출하는..
IPv6와 Nginx Ipv4 ipv4 프로토콜은 우리가 익히 알고있는 32bit의 IP 주소 체계로 되어있다. 그러다보니 사용할 수 있는 IP 수가 43억개로 제한되어있다. 223.130.195.95 Ipv6 Ipv6 프로토콜은 Ipv4 인터넷 주소가 고갈되는 문제를 해결하기 위해 만들어졌다. Ipv6은 128비트로 되어있고, IPv4 주소공간에 비해 296배의 크기를 갖는다. 2001:0db8:85a3:08d3:1319:8a2e:0370:7334 요상하게 생겼는데, 이게 주소다. nginx에서 Ipv6 활성화하기 nginx.conf 파일에서 listen 80; 하위에 다음과 같이 선언해주면, nginx에서 ipv6 주소 요청을 수신할 수 있다. listen [::]:80; 이 설정은 서버에서 ipv6을 활성화한 상태에서만..
AWS SQS Queue - 표준 VS FIFO 표준 대기열 초당 호출수 제한이 거의 없다. 무제한이다. 표준 대기열도 최대한 메시지가 도착한 순서대로 처리될 수 있도록 메시지를 정렬하고 있다. 그러나 순서가 안맞을 수도 있다. 메시지가 중복으로 발행될 수도 있다. AWS에서는 고가용성을 위해 메시지를 여러 서버에 복제해둔다. 만약 메시지 수신/삭제 요청이 서버에 반영되지 않는 경우, 메시지가 중복으로 발행될 수 있다. 때문에 표준 대기열을 사용하는 경우, 중복 요청이 발생하더라도 문제가 되지 않도록 멱등적으로 기능을 구현해야한다. FIFO 대기열 초당 호출수 제한이 있다. API는 초당 최대 300개까지 호출할 수 있다. 배치 함수는 메시지를 초당 최대 3000개까지 처리할 수 있다. 배치 API도 초당 최대 300개까지 호출할 수 있고, 하나의 A..
(PostgreSQL) Temporary Table과 Autovacuum Temporary Table은 Autovacuum 대상이 아니다. Temporary Table은 임시 테이블을 생성한 Connection에서만 조회할 수 있기 때문에 Autovacuum 데몬은 Temporary Table을 볼 수 없다. Temporary Table이 사용중인 공간은 Connection이 닫히면 저절로 회수된다. 그러나 만약, Transaction이 장기간 지속된다면 자원이 회수되지 않아 문제가 될 수 있다. Temporary Table에서 XID를 오랜시간 점유하고 있다면, Temporary Table을 생성한 세션을 종료하여 자원을 반환시켜야한다. 참고 What is autovacuum doing to my temporary tables? - Cybertec Did you know t..
(PostgreSQL) PostgreSQL autovacuum을 튜닝할 때 유용한 Tip 💡 이번 글에서는 Working with PostgreSQL autovacuum on Amazon RDS을 정리한 내용을 다루고자 한다. Autovacuum은 자동으로 VACUUM과 ANALYZE 명령문을 실행한다. Autovacuum은 추가/수정/삭제된 튜플이 많은 테이블을 찾는다. 그리고 데이터베이스에서 더 이상 사용되지 않는 데이터를 정리하여 저장공간을 확보한다. 기본적으로 AWS RDS PostgreSQL에서 Autovacuum이 활성화되어있다. 그리고 autovacuum과 관련된 설정들을 적절한 값을 기본값으로 설정해준다. 이 기본값들은 일반적인 기준으로 설정한 값이다. 때문에 시스템 특성에 맞는 적절한 값으로 설정값을 튜닝하면 성능상 이점을 얻을 수 있다. 해당 포스팅에서는 autovacuum 튜..
[쿠버네티스] uWsgi Graceful Shutdown 발단 회사 시스템에서 API 요청이 비정상적으로 종료되는 오류가 있어서 원인을 분석하게 되었다. 그러다 이 오류는 배포 타이밍과 비슷한 패턴으로 발생한다는 것을 발견하게 되었다. 즉, 이 문제는 Pod이 죽을 때, uWsgi 컨테이너가 Graceful Shutdown을 하고있지 않아서 발생한 문제였다. 이번 글에서는 이 경험에서 학습했던 uWsgi의 특징과 쿠버네티스 파드의 종료 방식에 대해서 정리해보고자 한다. Graceful Shutdown이란? 프로그램이 종료될 때, 최대한 사이드 이펙트 없이 로직을 잘 처리하고 종료하는 것을 말한다. 예를 들어, 열심히 PPT를 작성하던 도중에 파워포인트가 꺼지는 모습을 상상해보자. 이 때, 아무런 조치없이 프로그램이 종료되고, 이전의 작업 내용이 유실된다면 이는..