TIL kubernetes 2

sundays·2022년 10월 7일
0

Kubernetes 동작 원리

cluster 구성 요소

Master node - control plane

대규모 container를 운영하려면 worker node의 가용 리소스 현황을 고려하여 최적의 container 배치 및 모니터링, container에 대한 효율적인 추적 관리 수행

Worker node

각기 다른 목적과 기능으로 세분화된 컨테이너들이 실제 배치되는 노드

Control Plane Component

cluster의 master node가 수행하는 각 container 및 worker node 관리는 Control Plane Component 를 통해 수행

etcd

  • cluster안의 각 구성요소들에 대한 정보가 key - value 형태로 저장된 DataBase
  • cluster의 모든 핵심 데이터가 저장되어 있다.
  • kubectl 명령을 통해 조회 가능한 모든 정보는 etcd를 거쳐 오며, 제어 명령을 통해 cluster 변화가 적용되어다면 etcd에 업데이트 된다.

Scheduler( kube-scheduler )

  • Pod를 어느 노드에 배치할 지 결정하는 프로세스
  • 실제 해당 노드에 Pod를 배치하는 작업은 kubelet에 의해 수행
  • kube-scheduler는 kube-system 네임스페이스에 kube-controller-scheduler-- master Pod로 존재
    • kube-scheduler Pod 정의 파일
    • /etc/kubernetes/manifests/kube-scheduler.yaml

API 서버( kube-apiserver )

  • cluster 각 요소들을 모니터링하며 작업을 수행하도록 해주는 중앙 접근 포인트 역할
    유저 인증, 요청사항 검증, 데이터 수신, etcd 업데이트, 스케줄링, kubelet 통신등 다양한 역할 담당
  • API 서버에 대한 client가 kubectl 명령
  • API는 kube-system 네임스페이스에 kube-controller-scheduler-master Pod로 존재
    • kube-apiserver Pod 정의 파일
    • /etc/kubernetes/manifests/kube-apiserver.yaml

controller manager( kube-controller-manager )

  • cluster 안에서 구동되는 다양한 리소스들을 모니터링하며 이들이 원할하게 동작하도록 관리하는 프로세스
  • Node, Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Service Account, Cronjob, Namespace등 각 구성요소들을 관리하는 control들이 하나로 패키징되는 형태를 가진다.
  • API는 kube-system 네임스페이스에 kube-controller-controller-manager-master Pod로 존재
    • kube-apiserver Pod 정의 파일
    • /etc/kubernetes/manifests/kube-controller-manager.yaml

Node Component

각 node에서 Pod와 container를 구동시키고 관리하기 위해 필요한 요소

Kubelet

  • cluster의 각 node에서 Pod 안 container들이 정상 구동되도록 조율하는 agent

  • master node의 scheduler가 node를 Pod에 할당하면, kubelet이 해당 Pod와 container를 배치

  • Pod와 container 상태를 주기적으로 체크하여 결과를 API 서버에 전송하는 역할

  • kubeadm으로 cluster 구축시 kubelet은 포함되지 않으므로 별도로 kubeadm, kubectl과 함께 설치하고 버전을 일치시켜 주어야 한다.

Kube-proxy

  • cluster의 각 node에서 구동되는 Kubernetes 네트워크 proxy
  • Service 객체로 들어오는 내/외부 트래픽을 어느 Pod로 포워딩할 것인지에 대한 규칙을 생성하고 관리하는 역할
  • kubeadm은 모든 node에 하나씩 kube-proxy Pod를 daemonset으로 배포

Container runtime

  • cluster 내부에 container 이미지를 가져오고 구동시키는 엔진
  • 여러 종류의 container runtime을 지원하기 위해 OCI의 CRI 스펙을 지원하는 container runtime 사용이 가능하게 구성
  • Kubernetes v1.24 이후 Docker 지원을 중단하였다. 하지만 containerd와 다른 대체 수단을 지원하고 Docker container는 OCIdml CRI 스펙을 준수 함으로 동작에는 문제가 없다.

Kubernetes 동작 방식

Kubernetes는 선언형 API를 사용하는 특징

명령형 API

일반적으로 사용하는 CLI 명령

선언형 API

원하는 결과만 제시하고 시스템이 스스로 결과를 얻어주는 API

NginX application을 배포하고 서비스 운영 과정을 Kubernetes에서 동작하는 과정

개발자/운영자 host

개발자/운영자는 Nginx Image 생성
Nginx Image를 public 또는 private registry에 저장
개발자/운영자는 kubernetes 명령을 통해 container 생성 요청 - 선언형 API 사용

cluster - control plane( master node )

요청한 명령은 cluster의 control plane( master node )에 API server에 전달된다. -> scheduler에 container 생성 요청
scheduler는 node의 상태에 따라 특정 node에 Pod 생성 요청

cluster - node( worker node )

해당 node의 kubelet이 scheduler의 요청 정보 수신
요청 수신 정보에 따라 Pod 생성
container 생성 - 현재 node에 image가 없는 경우 registry로 부터 image 다운로드
생성된 container를 이용하여 Pod 생성

profile
develop life

0개의 댓글