[k8s] 쿠버네티스란?

pipi·2023년 6월 25일
3

인프라

목록 보기
2/12

📌 쿠버네티스란?

컨테이너 오케스트레이션

컨테이너의 전반적인 라이프사이클을 관리해주는 플랫폼.

데이터 센터(클러스터) 운영체제

데이터 센터(클러스터) : 여러 컴퓨터의 집합
운영체제 : 프로세스 스케줄링, 자원 관리, 인터페이스

=> 쿠버네티스는 여러 컴퓨터의 집합으로 이뤄진 거대한 시스템을 제어 가능하도록, 인터페이스와 기능들을 제공한다!
=> 쿠버네티스라는 운영체제를 사용하여, 클러스터 시스템을 제어한다!
=> 즉, 서버(노드) 하나하나를 직접 제어하지 않고, 쿠버네티스를 통해 한꺼번에 제어 가능!


📌 기본 개념

Desired State(바라는 상태)

  • 사용자는 원하는 애플리케이션 배포 상태(바라는 상태)를 쿠버네티스에게 알려주면, 알아서 업데이트 해줌

Controller(컨트롤러)

  • 바라는 상태로 바꿔주는 것을, 컨트롤러가 담당
  • control-loop 라는 루프를 돌며 특정 리소스를 지속적으로 모니터링

Resource(리소스)

  • 쿠버네티스는 모든게 리소스로 표현된다.
  • pod, ReplicaSet, Deployment등
  • pod는 하나 이상의 컨테이너를 갖는 쿠버네티스의 최소 실행 단위.

Declarative Commnand(선언형 커맨드)

  • 쿠버네티스는 선언형 커맨드를 지원한다
  • 선언형 커맨드 -> 사용자가 직접 상태를 바꾸지 않고, 바라는 상태를 선언적으로 기술하여, 명령을 내리는 방법(<-> 명령형 커맨드), 예를 들면 html
  • YAML형식을 이용해 선언형 명령을 내린다. -> YAML 정의서 -> 아래는 YAML형식의 리소스(pod) 예시
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: nginx
      image: nginx

Namespace(네임스페이스)

  • 네임스페이스로, 클러스터 환경을 논리적으로 분리

  • 네임스페이스마다, 서로 다른 권한, 네트워크 정책 등 설정 가능

  • 쿠버네티스는 네임스페이스 레벨 리소스, 클러스터 레벨 리소스로 분류 가능

  • 네임스페이스 레벨 리소스

    • 특정 네임스페이스 안에 속하여 존재하는 리소스
      ex) Pod, Deployment, Service
  • 클러스터 레벨 리소스

    • 네임스페이스 영역에 상관 없이 클러스터 레벨에서 존재하는 리소스
      ex) Node, PersistentVolume, StorageClass

Label & Selector (라벨 & 셀렉터)

  • 특정 리소스에 명령을 전달하거나, 정보를 확인하고 싶을 때, 라벨링 시스템 이용
  • 리소스에 key - value 형식의 라벨을 붙히고,
  • 리소스를 찾기 위해 셀렉터가 특정 key - value를 가진 리소스를 뽑아냄. ex) dictionary

Service Discovery (서비스 탐색)

  • 클러스터 내에서 통신하기 위해, 서비스 끝점이 필요함.
  • 즉, 다른 컨테이너(pod)와 통신하기 위해 끝점(Endpoint)의 접속 정보를 알아야하며, 이를 탐색하는 기능
  • Service라는 리소스를 이용해 서비스 탐색 기능 제공

설정 관리

  • 컨테이너를 실행할때 필요한 설정값, 민감 정보를, 쿠버네티스 플랫폼 레벨에서 관리할 수 있게 함.
  • ConfigMap, Secret 리소스를 통해 컨테이너의 설정을 관리

📌 아키텍처


이미지 출처

  • 모든 서버는 마스터, 워커(노드)로 구분됨.
  • 마스터 : 쿠버네티스를 운영하기 위한 필수적인 핵심 컴포넌트가 존재
  • 마스터 : 단일 서버로 구성할 수 있으며, 여러 서버를 묶어 클러스터 마스터로도 구축 가능
  • 워커 : 단순히 컨테이너 환경으로 사용됨.
  • 워커 마다 특별한 역할이 없기때문에, 마스터가 죽지 않는 이상, 특정 워커가 수행한 일을 다른 워커가 대신 수행 가능.

마스터

  • kube-apiserver(API 서버)
    • 마스터로 전달되는 모든 요청을 받는 REST API 서버
    • 마스터와 통신한다 === API 서버와 통신한다!
  • etcd(저장소)
    • 클러스터 내 모든 메타 정보를 저장하는 저장소(DB)
  • kube-scheduler(컨테이너 스케줄러)
    • 적절하게 컨테이너를 워커 노드에 배치하는 스케줄러
  • kube-controller-manager(컨트롤러 집합)
    • 현재 상태와 바라는 상태를 지속적으로 확인하며, 특정 이벤트에 따라 특정 동작을 수행하는 컨트롤러
    • 리소스 별로 개별적인 리소스 컨트롤러가 존재하는데, 이를 합친게 kube-controller-manager
  • cloud-controller-manager(클라우드 컨트롤러)
    • 클라우드 플랫폼(AWS, Azure)에 특화된 리소스를 제어하는 클라우드 컨트롤러

노드(워커)

  • kubelet (노드 관리자)
    • 마스터로부터 명령을 받아, 컨테이너의 라이프 사이클 관리
    • 컨테이너가 정상적으로 동작하는지 지속적으로 모니터링.
    • 주기적으로 마스터 노드의 API 서버와 통신.
  • kube-proxy (노드 관리자)
    • 컨테이너의 네트워킹을 책임지는 프록시
  • conatiner runtime (노드 관리자)
    • 실제 컨테이너를 실행시키는 역할 ex) 도커

📌 장점

  1. 실행환경 고립화
  2. 리소스 관리
    • 하나씩 직접 관리 X, 한번에
  3. 스케줄링
    • 서버 개수 증가 시, 어떤 서버에 메모리 자원이 충분한지 등, 직접 프로세스를 스케줄링 해야함
    • => 쿠버네티스 내장 스케줄러가 최적의 노드를 찾아, 컨테이너 배치!
  4. 프로세스 관리
    • 클러스터 레벨에서 프로세스 편하게 관리
  5. 통합 설정 관리
  6. 손쉬운 장애 대응
    • 각 노드들은 특별한 역할을 갖지 않으므로, 새로운 노드로 이주하는 작업이 매우 간단
  7. 자동 확장 기능
    • 필요시 자동으로 리소스 추가 가능
  8. 하이브리드 클라우드 운영
    • 클라우드 플랫폼 뿐만 아니라, 온프레미스 환경에서도 구축 가능.
  9. 자가 치유
    • 컨테이너에 문제가 생겨 죽더라도, 바라는 상태가 달라진 것을 확인하고, 컨테이너 다시 실행
  10. 데이터 스토리지 관리
  11. 배포 자동화
    • 사람이 직접 하는게 아닌, 자동으로 적절한 노드를 선택하여 컨테이너 배치

쿠버네티스.. 짱이다!

'핵심만 콕 쿠버네티스' 도서 참고했습니다

2개의 댓글

comment-user-thumbnail
2023년 6월 25일

역시 쿠버네티스 짱!

1개의 답글

관련 채용 정보