DevOps/Kubernetes

Kubernetes Architecture

알로그 2022. 7. 10. 18:02
반응형

컨트롤 플레인 컴포넌트

  • kube-apiserver: 쿠버네티스 API를 노출하는 쿠버네티스 컴포넌트
  • etcd: 모든 클러스터 데이터를 담는 키-값 저장소
  • kube-scheduler: 노드가 배정되지 않은 새로 생성된 파드를 감지하고 실행할 노드를 선택하는 컴포넌트
  • kube-controller-manager: 노드 컨트롤러, 레플리케이션 컨트롤러, 엔드포인트 컨트롤러, 서비스 어카운트, 토큰 컨트롤러를 포함한다.
  • cloud-controller-manager: 클라우드별 컨트롤 로직을 포함하는 컴포넌트

 

노트 컴포넌트

  • kubelet: 각 노드에서 실행되는 에이전트. 파드에서 컨테이너가 확실하게 동작하도록 관리
  • kube-proxy: 각 노드에서 실행되는 네트워크 프록시로 서비스 개념의 구현부
  • 컨테이너 런타임: 컨테이너 실행을 담당하는 소프트웨어

 

마스터 노드에는 etcd, kube-scheduler, kube-apiserver가 존재하고 이는 /etc/kubernetes/manifests에 각각 해당하는 yaml 파일이 존재한다.

워커 노드에는 kubelet과 container runtime이 구성되어 있으며, 데몬셋인 kube-proxy가 구성되어 있다.

 

 

파드 생성 과정

  1. 요청자가 kubectl create 명령어로 파드 생성 요청
  2. kube-apiserver로 전달되며, etcd에 pod에 대한 이력정보를 저장
  3. kube-scheduler는 수시로 각각의 노드 자원을 수집하고 있으며, kube-apiserver에 watch 기능으로 etcd에 파드 생성요청이 왔는지 모니터링 후 노드 자원 상태를 확인한 후 etcd 파드에 노드정보를 추가
  4. kubelet도 kube-apiserver에 watch가 걸려있고 자신의 노드가 붙어있는 파드를 발견하면 정보를 가져와서 파드를 생성하고자 함
  5. kubelet이 container runtime에 컨테이너를 생성하라고 요청
  6. kubelet은 kube-proxy한테 네트워크 생성요청을 하고 kube-proxy가 통신이 되도록 설정

 

디플로이먼트 생성 과정

  1. kube-controller-manager.yaml 파일에 의해 Controller Manager가 존재하며 여러 컨트롤러가 각 스레드로 도는중
  2. 요청자가 kubectl create 명령어로 디플로이먼트(replicas:2) 생성 요청
  3. kube-apiserver로 전달되며, etcd에 정보를 저장
  4. Controller Manager의 Deployment가 kube-apiserver에 watch로 모니터링 중이며, 레플리카셋을 생성하라고 요청함
  5. ReplicaSet도 watch가 걸려있어 감지 후 파드를 생성하라고 요청
  6. kube-scheduler는 수시로 각각의 노드 자원을 수집하고 있으며, kube-apiserver에 watch 기능으로 etcd에 파드 생성요청이 왔는지 모니터링 후 노드 자원 상태를 확인한 후 etcd 파드에 노드정보를 추가
  7. kubelet도 kube-apiserver에 watch가 걸려있고 자신의 노드가 붙어있는 파드를 발견하면 정보를 가져와서 파드를 생성하고자 함
  8. kubelet이 container runtime에 컨테이너를 생성하라고 요청
  9. kubelet은 kube-proxy한테 네트워크 생성요청을 하고 kube-proxy가 통신이 되도록 설정

 

 

 

References:

 

쿠버네티스 컴포넌트

쿠버네티스 클러스터는 컴퓨터 집합인 노드 컴포넌트와 컨트롤 플레인 컴포넌트로 구성된다.

kubernetes.io

 

반응형