ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] Architecture
    DevOps/Kubernetes 2022. 1. 11. 17:14

    Desired State

     

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    Desired State는 쿠버네티스의 가장 중요한 핵심이다. 쿠버네티스는 원하는 상태를 계속 체크하고 차이점이 있다면 자동으로 조치를 한다. 여기서 원하는 상태(Desired State)는 관리자가 바라는 환경을 의미하고, 좀 더 구체적으로 몇 개의 웹 서버를 구동시킬 것인지, 몇번 포트로 서비스할 것인지 등에 대한 정보를 말한다.

    Desired State를 설정하는 방법

    쿠버네티스에서는 YAML 또는 JSON 파일을 사용해 원하는 상태(Desired State)에 대해 명시적으로 설정할 수 있다. 쿠버네티스는 작성 파일에 정의된 사양(spec)에 따라 컨테이너의 라이프사이클을 관리한다.

    출처: https://kubernetes.io/docs/concepts/_print/

     

    Architecture

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    쿠버네티스의 아키텍처는 크게 마스터 노드(Master Node)와 워커 노드(Worker Node)로 나눌 수 있다.

    • 마스터 노드: 전체 쿠버네티스 시스템을 관리하고 통제하는 Control plane 역할
    • 워커 노드: 컨테이너화된 애플리케이션을 실행하는 시스템으로 서비스 실행모니터링 제공

    Master Node(마스터 노드)

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    etcd

    • 모든 상태와 데이터 저장
    • 분산 시스템으로 구성하여 안정성을 높임 → 고가용성
    • 가볍고 빠르면서 정확하게 설계 → 일관성
    • Key(directory)-Value 형태로 데이터 저장
    • TTL(time-to-live), watch 같은 부가 기능 제공
    • 굉장히 중요한 데이터이기 때문에 백업 필수

    API Server

    • 상태를 바꾸거나 조회하는 역할
    • etcd와 유일하게 통신하는 모듈
      • 다른 컴포넌트들은 etcd의 정보를 갱신, 조회하기 위해 API 서버와 통신함
    • REST API 형태로 제공
    • 권한을 체크하여 적절한 권한이 없을 경우 요청 차단
    • 관리자 요청(e.g., kubectl)뿐만 아니라 다양한 내부 모듈(e.g., 컨트롤러)과 통신
    • API 서버의 로드가 굉장히 많기 때문에 수평으로 확장되도록 디자인

    Scheduler

    • 새로 생성된 Pod을 탐지하고 생성된 Pod이 있을 때 어떤 노드에 할당할지 결정함
    • 노드의 현재 상태 및 Pod의 요구사항을 체크
      • 노드에 라벨 부여 e.g., a-zone, b-zone, gpu-enabled 등

    Controller

    • 논리적으로 다양한 컨트롤러가 존재함
      • 복제 컨트롤러(Relica Set 확인), 엔드포인트 컨트롤러(로드밸런싱 체크) 등
    • 끊임없이 상태를 체크하고 원하는 상태(Desired State)를 유지
    • 복잡성을 낮추고 관리의 편의성을 위해 단일 프로세스로 실행

    조회 흐름

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    1. 컨트롤러는 컨트롤러가 체크하고 있는 상태를 조회하기 위해 API 서버에 조회 요청한다.
    2. API 서버는 컨트롤러가 해당하는 정보를 조회할 수 있는지 권한을 체크한다.
    3. 권한이 있다면, etcd에 정보를 조회하고 컨트롤러에게 알려준다.

    갱신 흐름

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    1. 컨트롤러가 계속해서 상태를 체크하고 원하는 상태(Desired State)가 변경되었을 경우 원하는 상태로 리소스를 변경한다.
    2. 리소스 변경 결과를 API 서버에게 전달한다.
    3. API 서버는 컨트롤러가 정보를 갱신할 수 있는지 권한을 체크한다.
    4. 권한이 있다면, etcd에 정보를 갱신한다.

    Worker Node(워커 노드)

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

     

    워커 노드의 Proxy와 Kubelet 또한 마스터 노드와 통신하기 위해 API 서버에게 요청한다.

    Kublet

    • 각 노드에서 실행
    • Pod의 실행/중지/상태 체크 담당

    Proxy

    • 애플리케이션 구성 요소  네트워크 트래픽 분산 및 프록시 담당

     

    쿠버네티스 흐름

    출처: https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6

    1. 관리자가 API 서버에 Pod 생성을 요청한다.
    2. API 서버는 etcd에 Pod 생성 요청 정보를 추가한다.
    3. 컨트롤러는 새로운 Pod 생성 요청이 있는지 계속 확인한다.
    4. Pod 생성 요청이 있으면, API 서버에 Pod 할당을 요청한다.
    5. API 서버는 etcd에 Pod 할당 요청으로 상태를 바꾼다.
    6. 스케쥴러는 새로운 Pod 할당 요청이 있는지 계속 확인한다.
    7. Pod 할당 요청이 있으면, 특정 노드에 해당 Pod을 할당하고 API 서버에게 상태를 전달한다.
    8. API 서버는 etcd에 노드 할당/미실행으로 상태를 바꾼다.
    9. Kublet은 내 노드에 할당된 Pod 중에 미실행 Pod을 계속해서 확인한다.
    10. 미실행 Pod이 있으면, Pod을 생성하고 API 서버에게 상태를 전달한다.
    11. API 서버는 etcd에 노드 할당/실행중으로 상태를 바꾼다.

    Reference

    https://www.youtube.com/watch?v=SNA1sSNlmy0&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=6 

    https://tech.ktcloud.com/68

    'DevOps > Kubernetes' 카테고리의 다른 글

    [Kubernetes] Objects  (0) 2022.01.11
    [Kubernetes] Container Orchestration  (0) 2022.01.09

    댓글

Designed by Tistory.