1. 쿠버네티스란?

  • 컨테이너화 된 워크로드와 서비스를 관리하기 위한 플랫폼. 

2. 쿠버네티스가 유용하게 된 히스토리

  • 물리 배포 시대에는 리소스 할당이 어려웠음. 하나의 물리 서버에 여러 개의 애플리케이션이 돌아갈 경우 한 애플리케이션이 모든 리소스를 할당해 가져갈 수도 있었고 이를 격리하기에는 물리 격리가 필요했음.
  • 이를 해결하기 위해 VM을 도입함. VM간의 격리를 두고 폐기 가능하도록 했다.

3. 컨테이너와 VM의 차이는?

  • VM이 좀 더 격리 수준이 높음. 컨테이너는 운영체제를 공유한다. 그렇기에 VM보다 좀 더 가볍다.
  • 배포 시점이 아닌 빌드해서 배포할 수 있고 빠르고 효율적으로 롤백할 수 있다.

4. 쿠버네티스가 그래서 왜 필요한가?

  • 컨테이너화 된 워크로드를 확장성있게, 중단 없이 운영하기 위한 많은 기능들을 제공하기 때문임.

5. 어떤 기능?

  • 자동 복구 : 실패한 컨테이너를 다시 시작
  • 롤아웃, 롤백
  • 스토리지 오케스트레이션
  • 서비스 디스커버리, 로드밸런싱
  • 스크릿과 구성 관리

6. 쿠버네티스의 구성 요소

  • 노드 : 컨테이너화 된 애플리케이션을 실행하는 것을 노드. 워커 머신의 집합.
  • 파드 : 노드는 애플리케이션의 구성요소인 파드를 호스팅함.
  • 컨트롤 플래인 : 워커 노드와 클러스터 내 파드를 관리한다. 

6-1. 컨트롤 플레인

  • 클러스터에 관한 전반적인 결정(스케줄링 등)을 수행. 클러스터 이벤트를 감지하고 반응(ex. Replicas 맞추기)
  • 어디서든 동작 가능하지만, 보통 사용자 컨테이너와 분리하여 동작시킨다.(간결성을 위하여)

6-1.-1. 컨트롤 플레인의 컴포넌트들

  • Kube-apiserver
  • Etcd : 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소. 
  • Kube-scehduler : 노드가 배정되지 않은 파드를 감지, 실행할 노드를 선택하는 컨트롤 플래인 컴포넌트
    • 노드 컨트롤러, 컨트롤러, 엔드포인트 컨트롤러, 서비스 어카운트 & 토큰 컨트롤러
  • Kube-controller-manager : 컨트롤러 프로세스를 실행하는 컴포넌트.
  • Cloud-controller-manager
    • 노드 컨트롤러, 라우트 컨트롤러, 서비스 컨트롤러의 컴포넌트를 가지고 있음.

6-2. 노드 컴포넌트

  • 노드컴포넌트는 동작중인 파드를 유지시키고, 런타임 환경을 제공하며 모든 노드상에서 동작한다.

6-2-1. 노드의 컴포넌트들

  • Kubelet: 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
  • Kube-proxy : 네트워크 프록시로, 쿠버네티스 서비스 개념의 구현부.
  • 컨테이너 런타임: 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어

6-3. 애드온

  • 리소스를 이용하여 클러스터 기능을 구현. 클러스터 단위 기능을 제공하기에 kube-system 네임스페이스에 속한다.
  • DNS, 웹 UI, 컨테이너 리소스 모니터링, 클러스터-레벨 로깅

7. 쿠버네티스 오브젝트 (핵심 개념)

  • 쿠버네티스 오브젝트는 시스템에서 영속성을 가지는 오브젝트. 클러스터의 상태를 나타내기 위해 이 오브젝트를 이용한다.
  • 상태?
    • 어떤 애플리케이션이 동작중이고 어느 노드에서 동작 중인지
    • 애플리케이션이 이용할 수 있는 리소스
    • 재구동 정책, 업그레이드 등 동작 정책
  • 결국 쿠버네티스 오브젝트는 의도를 가진 레코드라고 할 수 있다. 
  • 생성 방식?
    • 오브젝트를 생성하기 위해서는 컨트롤플레인의 쿠버네티스 API를 사용해야 함. 주로 Kubectl cli를 통해 api를 대신 호출한다.

8. 오브젝트 명세(Spec)와 상태(Status)

  • 거의 모든 쿠버네티스 오브젝트는 spec과 status를 가진다. 
  • spec을 통해 의도하는 상태를 기술하여 쿠버네티스에 전달하면 해당 오브젝트의 status라는 개념이 생기고 이는 쿠버네티스 시스템에 의해 제공된다.
  • 의도된 spec과 현재 status를 일치시키기 위해 능동적으로 관리한다.

9. 오브젝트 기술 방법

  • 쿠버네티스 API를 활용하기 위해서는 JSON 형식으로 정보를 포함시켜 줘야 한다. (대부분은 kubectl을 활용하여 yaml로 기술하여 제공한다, 이를 kubectl이 JSON형태로 변환하여 전달해 준다.)
  • 요구되는 필드
    • apiVersion : 오브젝트를 생성하기 위해 사용되고 있는 쿠버네티스 API 버전이 어떤 것인지
    • Kind: 어떤 종류의 오브젝트를 생성하려고 하는지
    • Metadata: 이름 문자열, UID, 선택적인 namespace를 포함하여 오브젝트를 유일하게 구분 지어줄 데이터
    • spec: 오브젝트에 대해 어떤 상태를 의도하는지

'Developer > Architecture, Cloud' 카테고리의 다른 글

Kafka 학습  (1) 2022.12.11

+ Recent posts