파드의 라이프 사이클 쿠버네티스의 트러블 슈팅 중 가장 많이 발생하는 것이 파드의 기동 실패 원인 분석이다. 개인의 개발 환경에서 컨테이너 이미지를 빌드하고 쿠버네티스 환경에 배포했을 때 제일 먼저 경험하는 것이 컨테이너가 기동하지 않거나 재시작을 반복하는 현상이다. 파드의 상태가 가지는 의미를 이해하고 적절한 대처를 할 수 있어야 문제를 해결할 수 있다. 문제를 파악하기 위해서는 kubectl get pods 명령어를 실행 해 나타나는 STATUS 열의 정보가 중요하다. 이 필드의 정보는 Kubernetes API를 통해 획득하는데, 이 API를 통해서 얻을 수 있는 다양한 정보 중에서 도움이 될 만한 정보가 선별되어 STATUS 열에 표시된다. STATUS 의미와 대책 ContainerCreating..
분류 전체보기
반응형
파드란? 파드는 쿠버네티스에서 컨테이너를 실행하는 최소 단위로 한개 혹은 여러 개의 컨테이너를 포함한다. 하나의 파드에 속하는 모든 컨테이너들은 같은 노드에서 동작한다. 파드는 다음과 같은 특징을 가진다. 컨테이너 재사용 촉진을 위한 플랫폼 파드는 하나의 목적을 위해 만들어진 컨테이너를 부품처럼 조합할 수 있도록 설계되었다. 파드 내부의 컨테이너들은 파드의 IP 주소와 포트번호를 공유한다. 파드의 내부 컨테이너들은 localhost로 서로 통신할 수 있다. 파드의 내부 컨테이너들은 System V 프로세스 통신이나 POSIX 공유 메모리를 사용하여 서로 통신할 수 있다. 파드의 내부 컨테이너들은 파드의 볼륨을 마운트하여 파일 시스템을 공유할 수 있다. 이 기능들은 같은 파드 내의 컨테이너 사이에서만 가능..
쿠버네티스 API란? 쿠버네티스의 대한 조작은 모두 API를 통해 이뤄진다. 커맨드 라인 유저 인터페이스인 kubectl은 마스터 노드상의 kube-apiserver에게 쿠버네티스 API 규약에 맞게 기술된 목표 상태 선언서인 매니페스트를 YAML 형식 혹은 JSON 형식으로 전송하여 오브젝트를 만들고, 바꾸고, 제거하는 일을 한다. 이 API 규약은 새로운 버전이 공개될 떄마다 추가나 변경된 점이 반영된 API 래퍼런스가 공개된다. 오브젝트란? 쿠버네티스 오브젝트란 클러스터 내부의 엔티티로서, 이후 설명할 파드, 컨트롤러, 서비스 등의 인스턴스를 의미한다. 각각의 오브젝트는 쿠버네티스 API의 리소스 종류에 맞게 설정되고 생성된다. 오브젝트는 지정된 상태가 유지되도록 쿠버네티스에 의해 제어된다. 각 오..
쿠버네티스의 아키텍처 및 구성요소 쿠버네티스는 마스터와 노드로 구성된다. 쿠버네티스 클러스터를 구성하는 코어 프로세스(컨테이너) kubectl K8s 클러스터를 조작하기 위한 도구로 가장 비번하게 이용되는 커맨드 라인 인터페이스다. kube-apiserver kubectl 등의 API 클라이언트로부터 오는 REST 요청을 검증하고, API 오브젝트를 구성하고 상태를 보고한다. kube-scheduler 쿠버네티스의 기본 스케줄러이며, 새로 생성된 모든 파드에 대해 실행할 최적의 노드를 선택한다. 스케줄러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 높은 노드를 선택한다. kube-controller-manager 컨트롤러를 구동하는 마스터상의 컴포넌트 cloud-controller-man..
레지스트리와 쿠버네티스의 관계 쿠버네티스에서도 레지스트리에 이미지를 다운받아 컨테이너를 실행한다. 쿠퍼네티스에서 컨테이너가 동작할 때까지의 흐름을 설명하면 다음과 같다. docker build로 이미지를 빌드한다. docker push로 이미지를 레지스트리에 등록한다. kubectl 커맨드로 매니페스트에 기재한 오브젝트들의 생성을 요청한다. 매니페스트에 기재된 리포지터리로부터 컨테이너의 이미지를 다운로드 한다. 컨테이너를 파드 위에서 가동한다. 이처럼 레지스트리는 쿠버네티스를 사용할 때 반드시 필요한 서비스다. 도커와 쿠버네티스의 연동 쿠버네티스는 도커를 컨테이너의 런타임 환경으로 사용한다. 쿠버네티스를 설치할 때 제일 먼저 도커를 설치해야 하는 이유도 이 때문이다. 도커 데몬 프로세스인 dockerd와..
도커의 아키텍처 리눅스 커널이 제공하는 기능을 활용하면 도커가 아니라 자체적으로 컨테이너를 만드는 것도 가능하다. 그러나 직접 개발한 컨테이너는 커뮤니티가 개발한 컨테이너를 재상용하는 것이 어렵고 공유하기도 어렵다. 도커는 스프트웨어 개발자가 컨테이너를 이용해 개발 생산성을 높일 수 있도록 컨테이너를 Build(작성), Ship(이동), Run(실행)할 수 있는 기능을 지원한다. 이런한 기능을 제공하는 도커는 도커 데몬 서버와 클라이언트인 도커 커맨드, 그리고 이미지 보관소인 레지스트리로 구성된다. 1. 도커 데몬 도커 데몬은 클라이언트인 도커 커맨드의 명령을 받아들여서 도커 오브젝트인 이미지, 컨테이너, 볼륨, 네트워크 등을 관리한다. 그리고 네트워크 너머에 있는 원격 클라이언트로 부터 요청을 받는 것..
쿠버네티스를 위해 꼭 알아야 하는 도커 지식 애플리케이션을 개발할 때는 다양한 라이브러리를 사용하게 되는데, 이를 사용하게 되면 개발자가 직접 작성해야되는 코드가 줄고 단기간에 고품질의 애플리케이션을 개발할 수 있다. 그러나 오픈 소스 프로젝트는 빈번하게 버전 업 되며, 버그 수정, 보안 패치 등이 일어난다. 그 결과 애플리케이션을 빌드할 때마다 다른 라이브러리를 사용하게 될 가능성이 있고 라이브러리의 버전이 바뀌게 되면 호환성의 문제가 발생해 새로운 버그가 잠재될 수 있다. 즉, 개발 생산성이 좋아지는 대신에 안정성을 유지하기 어려워진다. 도커는 이러한 문제를 컨테이너를 통해 해결하여, 오픈 소스를 사용한 개발 생산성 향상과 애플리케이션 안전성 두 가지를 모두 가지고있다. 컨테이너화된 애플리케이션을 운..
도커와 쿠버네티스의 개요 쿠버네티스(Kubernetes)는 컨테이너화된 어플리케이션을 효율적으로 배포하고 운영하기 위해 설계된 오픈 소스이다. 따라서 쿠버네티스를 이해하기 위해서는 먼저 컨테이너를 사용하는 이유부터 알아야 한다. 애플리케이션이 생활 많은곳에 사용되고 중요성이 높아지고 있어 지속적 통합(CI)과 지속적 배포(CD)의 중요성이 점차 높아지고 있다. 사용자에게 새로운 기능과 서비스를 빠르고 안정적으로 제공해야 하는 것이다. 컨테이너 기술은 이러한 요구사항에 효과적인 대안을 제시한다. 개발자들은 서로 다른 개발환경으로 개발하기 때문에 개발 생산성과 안정성이 떨어지게 된다. 이러한 상황에서 컨테이너 기술이 빛을 발한다. 컨테이너 기술은 애플리케이션 실행에 필요한 라이브러리나 운영체제 패키지 등을 ..
@Null / @NotNull 값이 null이거나(@Null) Null이 아닐때(@NotNull)를 검증한다. @NotNull로 설정 시 String의 ""(빈값) 값도 통과된다는 것을 주의하자. @Min(value) / @Max(value) 숫자(정수)를 입력하는 필드에서 입력 가능한 값의 최솟값(@Min)과 최댓값(@Max)을 설정한다. 예) @Min(100), @Max(99999) @DecimalMin(value) / @DecimalMax(value) 이것도 최솟값(@DecimalMin), 최댓값(@DecimalMax)을 설정하지만 정수가 아닌 BigDemical이나 BigInteger 객체 또는 String 값으로 숫자를 설정하는 경우에 사용한다. @Min, @Max도 String 값이나 Deci..
Simple Queue Service 소개 및 사용법(2/3) Simple Queue Service 소개 및 사용법(1/2) Simple Queue Service(SQS)란 ? 분산 시스템를 구성할때 시스템간 메세지를 주고 받을 수 있는 메세지 큐 SQS는 전송,수신,삭제 3가지 기능을 제공한다. SQS의 기.. devbksheen.tistory.com 앞서 기본적으로 SQS에 메시지를 보내고 받는 예제를 구현해보았다. 이번에는 메시지를 객체로 보내고 받는 예제를 구현해보겠다. 앞서 만들었던 Controller와 Sender, Listener를 수정해서 구현해볼것이다. 이메일을 보내는 로직이라고 했을때 SendMailDTO Getter, NoArgsConstructor, AllArgsConstructor..