Kubernetes | Components | Part 1

양승현·2023년 10월 3일
0

kubernetes

목록 보기
16/18
post-thumbnail

kubernetes

kubernetes

  • Kubernetes는 컨테이너 오케스트레이션 시스템으로, 컨테이너화된 애플리케이션을 배포, 관리 및 확장하는 데 도움을 주는 오픈 소스 플랫폼이다.

  • Kubernetes의 구성 요소는 클러스터를 관리하고 컨테이너화된 애플리케이션을 실행하는 데 사용된다.

  • 관리를 쉽게하기 위해 애플리케이션을 구성하는 컨테이너를 논리적 단위인 Pod로 그룹화한다.

  • 온프레미스, 하이브리드 클라우드, 퍼블릭 클라우드와 같이 다양한 인프라 환경에서 사용할 수 있다.

  • 쿠버네티스를 배포하게 되면 모든 노드는 하나의 클러스터로 이루어지며, 내결함성과 고가용성을 제공한다.

  • 클러스터의 Kubernetes 주요 구성 요소는 많은 물리적 혹은 가상머신으로 구성되어 있으며, 각 머신은 마스터 또는 워커 노드로서 특수 기능을 수행한다.

제공 기능

  • 서비스 디스커버리와 로드 밸런싱 :

    • 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다.
    • 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.
  • 스토리지 오케스트레이션 :

    • 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있다.

    • 자동화된 롤아웃과 롤백 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다.

    • 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.

  • 자동화된 빈 패킹(bin packing) :

    • 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다.
    • 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다.
    • 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
    • 이를 통해 낭비되는 자원을 최소화 할 수 있다.
  • 자동화된 복구(self-healing) :

    • 쿠버네티스는 장애가 생기는 컨테이너가 있는지 확인하기 위해 주기적으로 컨테이너를 진단한다.

    • 정상적으로 작동하지 않는 컨테이너가 있으면 컨테이너를 다시 시작하거나 교체해 정상적으로 작동하게 한다.

  • 시크릿과 구성 관리 :

    • 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있다.
    • 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트할 수 있다.
  • Auto Scaling

    • 특정 컨테이너에 부하가 급격하게 발생할 경우, 자동으로 스케일 아웃하여 컨테이너를 늘려 부하를 분산시킬수 있다.
    • 사용이 줄어 부하가 감소하게 되면 쿠버네티스는 다시 컨테이너를 이전 수준으로 줄여준다.

Kubernetes Components

  • 아래 구성 요소와 기능은 Kubernetes를 활용하여 컨테이너화된 애플리케이션을 쉽게 배포, 관리 및 확장할 수 있게 해준다.
  • Kubernetes를 사용하면 애플리케이션의 가용성, 확장성 및 관리 용이성을 향상시킬 수 있다.

1. Master node main components

  • 마스터 노드는 쿠버네티스 클러스터를 관리하고 클러스터의 기능을 실행한다.
  • 마스터 노드는 단일 혹은 여러대의 노드(3배수)로 생성할 수 있으며, 고가용성을 보장할 수 있는 여러 구성요소로 구성되어 있다.

etcd

  • etcd는 Kubernetes 클러스터 데이터(pod, namespace, API & 서비스 세부 정보 및 클러스터와 관련된 것들)를 분산 key-value 쌍의 형태로 저장하는 간단한 쿠버네티스용 스토리지 시스템이다.
  • 클러스터 구성 정보와 상태를 저장한다.
  • API 서버를 통해서만 액세스할 수 있으며, 구성 변경과 관련된 클러스터에 대한 알림을 활성화하는데 사용한다.
  • etcd는 마스터 노드 당 1개의 프로세스로 존재하며, 여러 개의 마스터 서버에 분산되어 실행해 안정성을 보장하도록 한다.

kube-apiserver

  • 마스터 노드는 클러스터의 프론트엔드이며 클러스터를 제어하는데 사용되는 Kubernetes API 서버를 실행하며, pod, service 혹은 기타 변경 사항과 관련된 모든 요청은 API 서버애 의해 처리된다.
  • 요약하자면, Kubernetes 클러스터와 상호 작용할 수 있는 API 서버로, 클러스터로 온 요청이 유효한지 검증하고, API 서버를 통해 다른 컴포넌트가 서로 필요한 모든 작업 요청을 받아들이고 처리한다.
  • Kubernetes API 서버의 주요 구현은 kube-apiserver이다.
  • kube-apiserver의 여러 인스턴스를 실행하고 해당 인스턴스 같의 트래픽의 균형을 맞출 수 있다.

kube-scheduler

  • 클러스터에 있는 노드의 워크로드는 kube-sheduler에 의해 추적되고 처리된다.
  • 파드 스케쥴링을 위한 정책에 따라 자원 소비를 기반으로 각 노드의 자원량에 따라 파드를 실행할 노드를 선택하는 역할을 한다.

kube-control-manager

  • kube-control-manager는 백그라운드에서 여러 컨트롤러 프로세스를 실행하여 원하는 클러스터 상태를 달성하기 위해 조정 루프를 사용하여 클러스터 상태를 관리하고 제어한다.

  • 엔드포인트 컨트롤러 혹은 복제 컨트롤러와 같은 프로세스는 요청된 파드 수가 kubernetes 사용자의 사양에 따라 실행되도록 한다.

  • 원하는 상태가 달성되지 않는 것을 발견하면, 지정된 상태를 달성하기 위해 조정 루프를 수행하며, 서비스 구성에 변화가 발생하면, 원하는 상태를 달성하기 위해 파드를 확장한다.

  • 다양한 종류의 컨트롤러가 있으며, 논리적으로 각각의 별도 컨트롤러 프로세스이지만, 복잡성을 줄이기 위해 단일 바이너리로 컴파일되어 단일 프로세스에서 실행된다.

    • 노드 컨트롤러 : 노드가 다운될 경우 이를 인지하고 대응할 책임이 있다.
    • 작업 컨트롤러 : 일회성 작업을 나타내는 작업 개체를 보고 해당 작업을 완료하기 위해 파드를 생성한다.
    • 엔드포인트 슬라이스 컨트롤러 : EndpointSlice 객체를 채운다.(서비스와 파드간의 링크를 제공)
    • 서비스 계정 컨트롤러 : 새 네임스페이스에 대한 기본 서비스 계정 생성

2. Worker node main components

kubelet

  • 컨테이너가 실행되고 건강한지 확인되는 컴포넌트이다.
  • 워커 노드에서 실행되며, 마스터 노드와 통신하여 파드스펙(PodSpec) 설정을 주기적으로 전달 받아 컨테이너를 관리하고 실행한다.
  • 파드의 상태를 주기적으로 체크(health check)하고 오류를 보고한다.
  • 쿠버네티스를 통해 생성되지 않은 컨테이너는 관리하지 않는다.

kube-proxy

  • 클러스터의 노드에서 실행되는 네트워크 프록시 서비스이며, 서비스의 네트워크 트래픽을 로드 밸런싱하고, 파드 간의 통신을 관리한다.

container runtime

  • kubernetes가 컨테이너를 효과적으로 실행할 수 있도록 하는 기본 구성 요소이다.
  • Kubernetes 환경 내에서 컨테이너의 실행과 생명 주기를 관리한다.
  • EX) docker, containerd, CRI-O ETC

3. add-ons

DNS Add-on

  • 파드에 DNS 이름을 할당하여 서비스 간에 이름 기반 통신을 가능하게 한다.

Dashboard

  • 웹 기반 대시보드로 클러스터의 상태를 시각화하고 관리할 수 있다.

Ingress controller

  • 클러스터 외부에서 내부로의 HTTP & HTTPS 트래픽을 관리하고 라우팅하는 역할을 한다.

0개의 댓글