컨테이너 API
컨테이너 API

컨테이너 기동
컨테이너 내의 어플리케이션은 기동 시에 환경 변수나 실행 인자를 읽어서 그에 맞게 동작하게 만들 수 있다.
헬스 체크 (쿠버네티스 환경)
준비 완료 프로브는 컨테이너의 어플리케이션이 초기화가 완료되어 외부로부터의 요청을 받을 수 있게 되었음을 알리는 인터페이스, 로드밸런서가 컨테이너에 요청을 전달하기 시작해도 될지 확인하기 위한 목적으로 사용된다.
활성 프로브는 어플리케이션의 기동 상태(정상/비정상)를 알리는 인터페이스, 비정상이 감지되면 쿠버네티스가 컨테이너를 재기동하여 복구를 시도한다.
어플리케이션에 이들 API에 대응하는 구현을 하면 쿠버네티스의 헬스 체크 기능을 사용할 수 있다.
컨테이너 종료
컨테이너 내의 어플리케이션은 종료 요청 시그널 (SIGTERM)에 대한 종료 처리를 구현하는 것이 좋다.
종료 처리란 메모리의 값을 보존하거나 데이터베이스와의 세션을 종료한 뒤 정상 종료를 말한다.
강제 종료 시그널(SIGKILL)은 제한 시간 내에 종료 처리가 완료되지 않은 경우 컨테이너를 강제 종료 하기 위해 사용된다. 어플리케이션이 강제 종료를 막을 수 있는 방법은 없다.
서비스
컨테이너 위에서 돌아가는 서버 어플리케이션은 특정 포트를 통해 클라이언트로부터의 요청을 받아들인다. 서비스는 특정 포트번호로 클라이언트로부터의 요청을 받고, 처리 결과를 반환하는 역할을 수행한다.
컨테이너의 포트를 호스트의 IP 주소에 포트 포워딩하여 외부에서의 요청을 받아들여야한다.
쿠버네티스에서는 컨테이너를 담는 파드에 포트를 열어 클라이언트로부터의 요청을 받는다.
그리고파드로의 접근을 돕는 쿠버네티스 오브젝트인 서비스와 연동하여 클라이언트에게 기능을 제공한다.
로그
MSA 아키텍처를 사용하고 규모가 커지게 되면 보통 많은 수의 컨테이너를 돌리게 된다. 그러면 프로그램의 로그의 양도 비례해서 늘어난다. 도커나 쿠버네티스에서는 로그를 일관되게 관리하려 컨테이너의 표준 출력(STDOUT)과 표준 오류(STDERR)를 로그로 간직한다. 컨테이너의 어플리케이션은 로그를 파일에 쓰는 것이 아니라 표준 출력이나 표준 오류에 쓰면 된다.
후크(쿠버네티스 환경)
컨테이너가 기동하고 종료할 때 컨테이너 내에서 특정 처리를 실행시킬 수 있다. 쿠버네티스에서는 파드의 매니페스트에 실행 내용을 기술 할 수 있다.
컨테이너에는 후크에 의해 실행될 스크립트, 혹은 HTTP 요청 처리를 구현해야 한다. 이 때 Dockerfile의 ENTRYPOINT나 CMD로 지정한 명령어와 후크는 비동기적으로 실행되어 실행 순서가 보장되지 않는다.
퍼시스턴트 볼륨
컨테이너에서 퍼시스턴스 볼륨을 사용하는 대표적인 경우는 설정 파일을 외부에서 주입하는 경우와 발생 데이터를 보전하는 경우 두 가지 존재, 두 경우 다 호스트의 디렉터리를 컨테이너의 파일 시스템에 마운트하여 사용한다.
전자의 경우, 어플리케이션이 읽어 들일 설정 파일을 컨테이너 외부에서 주입한다. 설정 파일을 바꾸기 위해 이미지를 다시 빌드하지 않아도 되어 컨테이너의 재사용이 높아진다.
쿠버네티스에는 보안에 민감한 데이터를 다루기 위한 시크릿과 일반적인 설정 파일을 다루는 컨피그맵이 있다. 컨테이너는 일시적인 존재이기 때문에 보관이 필요한 데이터를 컨테이너의 파일 시스템에 저장해서는 안된다.
종료 상태
PID가 1인 프로세스의 Exit 코드가 컨테이너의 종료 코드로 설정된다. 쿠버네티스에서는 컨테이너가 종료 코드 0으로 종료하면 정상 종료로 취급하고, 그 외의 값인 경우에는 비정상 종료로 취급한다.
컨테이너 상의 어플리케이션은 적절하게 종료 코드를 반환하도록 구현해야 한다.
Last updated