최근에 쿠버네티스를 통해 간단히 파드로 서버를 띄워야 하는 일이 있었다. 오랜만에 쿠버네티스를 사용해보는 것이라 서버 자체는 빠르게 띄웠는데, 외부에서 접속하는 방법을 잊어버려서 조금 헤맸다. 그래도 minikube를 사용하니까 쉽게 웹 브라우저나 curl 명령어로 요청/응답이 가능했다. 하지만, LoadBalancer 타입의 Service 오브젝트를 실행하면서 의문이 들었었다. 분명 External IP, targetPort도 잘 지정이 되었는데 막상 로컬 환경에서는 접근이 불가했던 것이다. 구글링하면서 문제를 확인하고 나름 해결했는데 회고하는 겸 서버 띄우는 과정들 및 원인, 이를 해결하는 방법들을 공유해보고자 한다. 혹시 이 게시물이 도움이 될 수 있는 사람이 한 사람이라도 있지 않을까? Mini..
쿠버네티스
서비스 쿠버네티스에서는 서비스라는 개념이 있습니다. 일반적인 서비스의 의미와는 다르게, 외부에서 쿠버네티스 클러스터에 접속하는 방법을 서비스라고 합니다. 노드포트 노드포트는 외부에서 쿠버네티스 클러스터에 접근할 수 있는 방법입니다. 노드포트는 워커 노드의 특정한 포트를 설정하여 그 포트에 들어오는 요청이 노드포트 서비스로 전달이 됩니다. 그리고 사용자의 요청을 처리할 수 있는 파드에 요청을 전달하여 사용자가 클러스터 내부에 접근할 수 있도록 하는 것입니다. 간단하게 하청을 보내는 중간자 역할을 하는 서비스입니다. 하나의 파드를 만들어둔 후에 오브젝트 스펙을 사용하여 노드포트 서비스를 생성합니다. apiVersion: v1 kind: Service metadata: name: np-svc spec: sel..
파드 생성 컨테이너를 담을 파드를 생성합니다. 그런데 파드를 만드는 데는 2가지 방법이 있습니다. 먼저 첫 번째 방법입니다. kubectl run [파드명] --image=[이미지명] 이렇게 해서 파드를 생성한 다음에 파드가 잘 생성되었는지 확인합니다. kubectl get pods 다음 방법입니다. run이 아니라 create를 통해서 파드를 생성하는 것입니다. kubectl create deployment [파드명] --image=[이미지명] 동일하게 파드 생성을 확인합니다. kubectl get pods 그런데 둘은 동일하게 파드를 생성하는데 왜 명령어를 굳이 2개나 사용할까요? 디플로이먼트 둘의 차이는 바로 디플로이먼트입니다. run을 통해 생성한 파드는 디플로이먼트가 없으며, create dep..
인프라를 통한 서비스 설계의 구조는 크게 두 가지가 있다. 모놀리식 아키텍처와 마이크로서비스 아키텍처이다. 모놀리식 아키텍처 모놀리식 아키텍처는 하나의 목적을 가진 서비스나 애플리케이션에 여러 가지 기능이 통합되어 있는 아키텍처를 의미한다. 여러 가지가 통합된 상태로 결합한 구조이기 때문에 단순하게 개발할 수 있고 개발 초기나 소규모 환경에서 설계하기 좋다는 장점이 있으나 규모가 커지면서 유지 보수가 까다로워 진다는 단점이 있다. 경제로 치면 규모의 불경제가 발생했다고 생각하면 된다. 규모가 커지면서 오히려 유지 보수 들어가는 비용, 관리 비용 등으로 효율이 떨어지는 것이다. 마이크로 아키텍처 마이크로 아키텍처(MSA, Microservices Architecture)는 각 서비스가 독립된 상태에서 개별..