Pod가 생성될 때 내부동작쿠버네티스에서 pod가 생성될 때 내부적으로 어떤 과정이 진행되는지 이해하는 것은 중요합니다. 사용자가 pod 생성을 요청했을 때 kuberntes 클러스터 내부에서 어떤 동작이 수행되는지 단계별로 알아보겠습니다. Pod 생성 과정 (요청흐름)1. 사용자가 kube-apiserver에 요청(Authenticat user)사용자는 kubectl apply -f pod.yaml 또는 API 요청을 통해 pod 생성을 요청합니다.curl -X POST /api/v1/namespaces/default/pods -d '{...}'kube-apiserver는 Kubernetes 클러스터의 중심 API 엔드포인트이며, 모든 요청을 관리합니다. 이때 사용자 인증 및 권한부여 단계를 수행합니..
쿠버네티스를 설치하는 방법은 수십가지가 넘을정도로 많습니다. 가장 일반적이고 핵심적인 방법은 다음과 같습니다.Kubeadm : 쿠버네티스 공식 프로젝트에서 제공하는 설치/부트스트랩 도구 클러스터 구성에 필요한 핵심 컴포넌트(API Server, etcd, Controller Manager, Kubelet 등)을 초기화하고 설정해줍니다.장점 : 쿠버네티스 공식 프로젝트에서 지원하므로, 문서와 커뮤니티 정보가 많고 신뢰성이 높음.단점 : 네트워크 플러그인(CNI)설정, 로드밸런서 구성, OS 종속정인 설정은 별도로 작업이 필요.Kubespray : Ansible 플레이북을 활용하여 쿠버네티스 클러스터를 설치하고 구성하는 프로비저닝 자동화 도구 다양한 환경(AWS, GCE, Azure, OpenStack, 베..
개요쿠버네티스는 컨테이너라는 가상환경에서 애플리케이션을 효율적으로 관리하고 배포하기 위한 플랫폼입니다. 그러나 수많은 파드들의 복잡한 네트워크를 관리하는 방법이 필요했습니다. 심지어 여러 노드에 파드들이 분산되어 있기도하고 노드가 대규모로 존재한다면 더욱 복잡하겠죠. 이러한 문제를 해결할 방법이 필요했습니다. Overlay란?오버레이는 물리적인 네트워크 위에 가상 네트워크 계층을 추가로 구축하여 여러 노드 간의 통신을 가능하게 만드는 기술입니다. 실제로 복잡할 수 있는 엔드 포인트 간의 네트워크 구조를 추상화하여 네트워크 통신 경로를 단순화하는 것이 목적입니다. 위의 사진을 보면 피지컬 네트워크가 존재하고 가상의 오버레이 네트워크가 존재합니다. 피지컬 네트워크는 node1(192.168.0.141), ..
개요쿠버네티스에서 지정한 파드의 수를 보장해주고, 파드가 문제가 생겨서 죽었을 때도 다시 파드를 생성해주는 역할이 바로 Replica 입니다.Replica는 쿠버네티스의 고가용성을 유지해주고 안정성을 보장하는데요.구버전 쿠버네티스에서는 Replica Controller를 사용했었는데 이제는 거의 대부분 ReplicaSet을 사용합니다.그리고 단독으로 Replica를 생성하기 보단 Deployment와 함께 사용하기를 권장합니다.Replica Controller와 ReplicaSet의 차이, 왜 Deployment와 함께 사용해야하는지 알아보겠습니다. Replica Controller란?레플리카 컨트롤러는 쿠버네티스의 컨트롤러 중 하나로 파드의 지정된 복제본 수를 유지하는 역할을 합니다.하지만 equal..
서비스 디스커버리란?서비스 디스커버리는 IP주소를 할당하거나 앤드포인트를 구성하지 않아도 서비스가 동적으로 서로 검색할 수 있게하는 것입니다. 최근에 개발되고 있는 애플리케이션은 확장성 문제로 Microservice Architecture를 도입했을텐데 서비스끼리 통신할 때 어떻게하면 효율적으로 할 수 있을까 고민하여 나온 것이 서비스 디스커버리입니다. 마이크로서비스가 종료되거나 IP가 바뀌어도 자동으로 이를 검색할 수 있는 메커니즘이 필요해진 것이죠. 클라이언트 사이드 서비스 디스커버리클라이언트 사이드 디스크버리는 마치 우리가 배달앱에 들어가서 음식점에 원하는 음식을 직접 주문하는 방식으로 생각하면 쉽습니다.작동방식은 서비스 레지스트리에서 서비스 목록을 조회하고, 선택한 서비스에 직접 요청합니다.예를..
이번 포스팅에서 외부에서 쿠버네티스에 요청이 왔을 때 어떤식으로 동작하는지 내부 아키텍처에 대해 알아보겠습니다. 1. 현재 아키텍처 구성요소 설명Load Balancer: 외부에서 들어오는 트래픽을 클러스터 내부로 라우팅하는 진입점 트래픽을 여러 노드에 균등하게 부하를 분산시킵니다.kubelet: 각 노드에서 실행되는 핵심 에이전트이며 마스터노드(API 서버)와 통신을 담당합니다. 컨테이너가 pod에서 실행되도록 관리하며 pod의 사양에 따라 컨테이너가 정상적으로 실행되는지 모니터링합니다.kube-proxy: 각 노드에서 실행되는 네트워크 프록시다. pod 네트워크 서비스를 관리하고 pod 간 통신을 처리한다. 쿠버네티스의 service 추상화를 구현한다.iptables: 리눅스 커널의 네트워크 규칙을 ..