쿠알못이 정리하는 kubernetes - 1

Intro

쿠버네티스(이하 k8s)에 대한 이야기를 많이 듣게 되면서 배워봐야지 생각은 하게 되었지만 막상 k8s에 대해서 공부나 연습을 해본적이 없어서 이번 기회에 공부를 시작하게되었습니다. 공부는 SKplanet Tacademy 에서 제공하고 있는 쿠버네티스 살펴보기 를 통해 공부 하게되었습니다. 현재 글과 다음 글 들에서 위 영상의 내용을 정리할 예정입니다.

Once upon a time …

저희는 쿠버네티스를 배우기 이전에 과연 서버 운영과정이 어떻게 진화하게 되었는지를 정리하는 과정을 서버 관리는 아래와 같은 진화 과정을 거쳤습니다.

자체 서버 운용

  • 너무 많은 과정과 노력이 필요 서버 주문 > 설치 > 조립 > 네트워크 연결 > OS 설치 > 계정 설정 > 보안 설정 > …
  • 이전 단계가 다음 단계에 영향을 줌 Ruby version 업그레이드시 업그레이드 이후 모든 작업에 영향이 감
  • 사용량을 예측을 해야함 정확히 예측 하는 것은 불가능 하므로 실제 사용량 보다 많은 량을 준비

설정 관리 도구 (Ansible, chef)

  • 자체 서버 운용시 문제점을 방지하고자 상태를 관리하는 코드를 이용하여 서버 관리
  • 선언적 서버 상태 정의
  • 서버의 상태가 재현 가능해짐

VM의 등장

  • 하나의 서버에 여러개의 가상 서버를 설치할 수 있음
  • 서버의 상태를 이미지로 저장
  • 새로운 서버를 만들고 기존 서버의 내용을 저장할 수 있음
  • Immutable 서버 구축

    • 기존 상태를 고려할 필요 없이 통째로 서버를 교체
    • 서버의 이미지만 교체

Cloud 의 등장

장점

  • 하드웨어 파편화 문제 해결
  • 가상화 환경에서 아키텍처 구성
  • 이미지 기반

단점

  • 정확히 어떻게 구성되었는지 알기 어려움
  • 다시 만들기 어려움
  • 관리를 하기 어려움

PaaS의 등장

EX) Heroku, Netlify, AWS EB, GCP AppEngine

장점

  • 서버를 운영하는 것은 복잡하고 어렵다
  • 소스 코드만으로 배포가 가능함
  • 일반화된 프로비저닝 방법을 제공

    • 다만 프로비저닝 과정을 변경하기 어려움

단점

  • Application이 PaaS에 종속됨 (Dependency Version)
  • 서버에 대한 원격접속 제한
  • 파일 시스템을 사용하기 어려움
  • 로그 수집이 제한적임

Docker 의 등장

  • 컨테이너: 격리된 환경에서 작동하는 프로세스
  • 리눅스 커널의 여러 기술을 활용
  • 하드웨어 가상화 기술보다 가벼움
  • 이미지 단위로 프로세스 환경 구성
  • 도커만 설치되어 있다면 어디서든 컨테이너를 만들수 있음
  • 컨테이너라는 표준으로 만들면 다양한 환경에서 실행 가능

장점

  • PaaS와 같은 제한이 없음
  • 클라우드 이미지보다 관리하기 쉬움
  • 성능저하가 적음
  • 복잡한 기술(namespace, cgroups, network … )을 몰라도 사용할 수 있음
  • 이미지 빌드 기록이 남음
  • 오픈소스

단점

  • Docker 자체는 다양한 기능 보다는 간단한 기능만 제공

    • 실제 운용시 필요한 다양한 가능은 서드파티로 지원
    • EX) service discovery, docker-gen

K8S의 등장

  • 여러 대의 서버와 여러 개의 서비스를 편리하게 관리해주는 작업
  • 스케줄링

    • 컨테이너를 적당한 서버에 할당
  • 클러스터링

    • 여러개의 서버를 하나의 서버 처럼 사용
  • 서비스 디스커버리

    • 쉽게 서비스의 접근
  • 로깅, 모니터링

Outro

과연 이렇게 진화 하게된 이유는 무엇이 었을까요?

서버의 상태를 관리하기위한 노력입니다.

좀 더 자세히 이야기 하자면 아래의 가치를 얻기 위해 계속 해서 서버 운영에 대한 기술이 진화하게 되었습니다.

  • 명령어가 아닌 코드와 설정을 사용
  • 격리된 환경을 이용하여 독립적인 실용
  • Immutable하게 Application을 관리하고 스토리지 또는 로그 관리
  • 이미지를 쉽고 편리하게 생성 및 사용
  • 확장 가능한 설계

앞으로는 이러한 가치들이 어떻게 k8s 에서 얻을 수 있는지 알아보도록 하겠습니다.

Published 5 Jun 2020

AWS, Node.js, Typesript 를 주로 사용하며 Nest.js, Golang 에 대해서 관심을 가지고 있는 개발자입니다. 개발 관련 잡담을 좋아합니다. 관심이 필요합니다 :)
Jinho Hong on Github