본문 바로가기

전체 글333

Kubernetes - Volume - 출처: Kubernetes in action - 볼륨 소개 볼륨은 파드의 구성요소이며, 파드의 spec 에서 정의한다. 독립적인 쿠버네티스의 구성요소는 아니어서 자체적으로 생성이나 삭제가 불가능하다. 파드의 모든 컨테이너에서 사용가능하지만 접근하려는 컨테이너에서 마운트 돼야한다. 예를 들어 아래와 같은 컨테이너들이 있다고 가정해보자. 웹서버: /var/htdocs 디렉터리에서 HTML 페이지 서비스, /var/logs 에 엑세스 로그를 저장하는 웹서버 실행 컨텐츠 에이전트: /var/html 에 html 을 생성하는 에이전트 로그 로테이터: /var/logs 디렉터리를 처리(로그 순환, 압축, 분석) 또한 아래 2 가지 볼륨을 갖는다고 가정하자. 볼륨1: HTML 공유 볼륨 볼륨2: 로그 공유 볼륨 .. 2022. 11. 12.
DDD - 개념적 윤곽 - 출처: 도메인 주도 설계 - 에릭 에반스 - 개념적 윤곽(Conceptual contour) 코드를 개발하다보면 유연하게 조합할 수 있도록 작은 크기로 기능을 나누기도 하며, 복잡성을 캡슐화하기 위해 기능을 더 큰 단위로 통합 하기도 한다. 이런 방법들은 지나치게 단순해서 일반 원칙으로 적용하기에는 부적절하다. 하지마 이런 방법들은 문제를 해결하기 위한 동기를 부여한다. 모델 혹은 설계를 구성하는 요소가 모놀리식 구조이면 기능이 중복되어 클라이언트는 인터페이스로부터 유용한 정보를 일부만 파악가능하다. 반대로 클래스와 메소드를 잘게 나누면 작은 객체들의 협력 방식을 이해하고 있어야 하기 때문에 클라이언트 객체가 무의미하게 복잡해진다. 도메인에는 잠재적인 일관성이 존재한다. 특정 모델을 발견하면 나중에 .. 2022. 10. 31.
Kubernetes - readness probe, headless service - 출처: Kubernetes in action - 레디니스 프로브 서비스의 레이블 셀렉터와 파드의 레이블이 일치하면 해당 파드는 서비스 관리대상(엔드포인트 리소스에서 IP 목록으로 유지함)이 된다. 요청이 서비스로 전송된 후에 서비스는 임의의 파드로 해당 요청을 전송하는데 만약 파드가 요청을 처리할 준비가 되지 않은 상황이라면 어떻게 해야 할까? 앞서 이와 비슷한 라이브니스 프로브를 알아본적이 있다. 라이브니스 프로브는 불안전한 컨테이너를 다시 시작해서 앱의 상태를 원활하게 유지한다. 레디니스 프로브도 주기적으로 호출되며 특정 파드가 클라이언트 요청을 수신할 수 있는지 여부를 판단한다. 이때 준비가됐다는 기준은 앱의 특성에 맞도록 개발자가 잘 정의해야 한다. 레디니스 프로브에도 3 가지 유형이 존재한다.. 2022. 10. 30.
Kubernetes - ingress - 출처: Kubernetes in action - 인그레스 리소스 인그레스(ingress)란 들어가거나 들어가는 행위, 들어갈 수단, 장소, 진입로라는 의미를 갖고 있다. 인그레스 리소스를 사용하면 외부로 서비스를 노출할 수 있다. 이미 외부에 서비스를 노출하기 위한 유형으로 노드포트와 그의 확장형인 로드 밸런서를 살펴보았다. 그렇다면 인그레스라는 리소스는 왜 필요할까? 로드 밸런서는 자신의 공용 IP를 가진 로드 밸런서가 필요하다. 반면 인그레스는 한 IP 주소로 수십개의 서비스에 접근이 가능하다. 또한 네트워크 스택의 애플리케이션 계층(HTTP)에서 작동 하므로 서비스가 할 수 없는 쿠키기반 세션 어피니티와 같은 기능을 제공할 수 있다. 인그레스 리소스를 사용하려면 클러스터에 인그레스 컨트롤러를 실.. 2022. 10. 30.
Kubernetes - External service, Service export - 출처: Kubernetes in action - 클러스터 외부에 있는 서비스 연결 지금까지는 모두 클러스터 내부의 파드에 대해서만 통신을 지원하는 서비스를 설명했다. 하지만 쿠버네티스는 외부 서비스를 노출해서 외부 IP과 포트로 연결을 전달할 수 있다. 즉 클러스터 내부 클라이언트 파드에서 외부 서비스로 연결이 가능하다. - 서비스 엔드포인트 서비스와 파드 연결 과정에는 숨은 리소스가 있다. 서비스는 파드에 직접 연결되는것이 아니라 서비스 - 엔드포인트 리소스 - 파드로 연결된다. "kubectl describe svc"명령어로 서비스 정보를 확인해보자. 항목을 보다보면 엔드포인트(Endpoints)란 속성을 확인할 수 있을것이다. 엔드포인트 리소스는 서비스로 노출되는 파드의 IP와 포트 목록이다. .. 2022. 10. 24.
DDD - Assertion - 출처: 도메인 주도 설계 - 에릭 에반스 - 개요 복잡한 계산을 하는 부분은 앞서 살펴본 side effect free function 으로 분리하면 문제의 난이도를 낮출 수 있다. 하지만 여전히 부수효과가 있는 명령(command)는 Entity 에 남아있으며 개발자는 이런 명령의 영향력을 이해해야 한다. 단순한 명령의 경우 코드를 조사하는것만으로도 결과를 예측할 수 있다. 하지만 앱의 규모가 커지면 작은 부분을 조합하여 큰 부분을 구성하는 설계가 등장하기 마련이고, 이럴 경우 사용자가 하나의 명령을 호출하면 다른 명령을 호출하게 된다. 이렇게 되면 각 호출되는 명령을 이해해야 해서 캡슐화가 깨지게 된다. 내부를 조사하지 않고 설계 요소의 의미와 연산 실행결과를 이해하는 방법이 필요하다. 이를 "단.. 2022. 10. 22.