쿠버네티스는 왜 좋은가?

코딩노잼·2022년 6월 4일
0
post-thumbnail

애플리케이션 배포의 역사...

Traditional Deployment

애플리케이션이 물리서버 위에서 돌아간다.
하나의 애플리케이션이 리소스를 너무 많이 쓰면 다른 애플리케이션의 성능이 저하될수 있고,
애플리케이션이 많은 리소스를 필요로하지 않을 때는 물리서버의 리소스가 낭비된다

Virtualized Deployment

물리서버 위 여러개의 vm 이 돌아가고 그 위에서 애플리케이션들이 실행된다
전통적 방법보다 리소스를 효율적으로 활용할 수 있고 vm 간 환경이 격리되므로 보안성도 좀더 낫다
가상화 기술로 하이퍼바이저 사용함

하이퍼바이저란 호스트 시스템에 다수의 게스트 os 를 구동할수 있게 해주는 소프트웨어. 각 vm 은 독립된 가상 하드웨어 자원을 할당받고 하이퍼바이저는 가상화된 하드웨어와 각각의 vm 을 모니터링하는 중간 관리자 역할을 함.

Container Deployment

각 os 를 가지는 vm 과 달리 os 를 공유함으로써 격리수준이 완화됨.
컨테이너는 vm 보다 가벼워서 주기적 빌드, 배포, 롤백이 쉽다 > 애플리케이션을 작게 쪼개 동적으로 배포하고 관리할 수 있는 마이크로서비스 구성이 가능하다 > 개별 서비스를 다른 언어/기술스택을 쓰는것도 가능하고 개별 서비스에서 문제 생겼을때 전체 서비스에 미치는 영향이 적다

컨테이너 = 하나의 프로세스
도커는 컨테이너라는 가상의 격리환경을 만들기 위해 리눅스의 컨테이너(LXC) 를 활용한다.
리눅스 커널이 제공하는 namespace 를 사용해서 프로세스가 독립적 시스템을 가지게 하고 cgroup 을 사용해 독립적 자원을 가지게 함. (근데 정확히 namespace, cgroup 을 쓰고있는게 맞는지는 잘 모르겠음)

컨테이너의 장점

  • vm 이미지 생성보다 컨테이너 이미지 생성이 쉽고 빠르다 > 컨테이너 이미지를 주기적으로 빌드해서 배포하고 문제 생겼을때 빠르게 롤백할수 있다
  • 개발, 테스팅, 운영환경을 일관적으로 구성할수 있다
  • 애플리케이션을 작고 독립적으로 쪼개 동적으로 배포하고 관리할 수 있는 마이크로서비스 구성이 가능하다 > 개별 서비스를 다른 언어로 작성할수도 있고 개별 서비스에서 문제 생겼을때 전체 서비스에 미치는 영향 적음
  • 자원, 리소스를 효율적으로 사용할수 있다

쿠버네티스의 역할

애플리케이션을 '컨테이너' 단위로 포장하고 배포하면 좋다는 건 이해했는데, 그럼 쿠버네티스는 무슨 역할을 하는지?

쿠버네티스는 분산형 애플리케이션 및 서비스를 규모에 맞게 실행하도록 설계된 오픈소스 컨테이너 오케스트레이션 플랫폼이다.

쿠버네티스는 클라우드 시대의 os라고도 말할 수 있으며, 쿠버네티스를 적절히 이용하면 대규모 서비스를 효율적이고 안정적으로 관리할 수 있다.

deployment로 파드들을 배포하고, 고정 ip를 할당하기 위해 서비스 리소스를 정의하고, 해당 서비스로 외부의 트래픽을 전달하기 위해 ingress를 띄운다. 이 과정은 선언형 시스템이라는 쿠버네티스의 특성상 yaml파일만 잘 적어주면 알아서 관리 해준다...

쿠버네티스가 제공하는 것들

  • dns, 자체 ip 사용하여 컨테이너를 외부로 노출시키기
  • 트래픽이 많으면 로드밸런싱하여 안정적으로 배포
  • 스토리지 오케스트레이션
  • 컨테이너의 원하는 상태를 yaml 로 정의하여 정의에 맞게 롤아웃, 롤백
  • 컨테이너가 필요로 하는 cpu, 메모리를 쿠버네티스한테 알려주면 노드를 할당해줌
  • 컨테이너 죽었을때 다시 시작하기 (죽었는지 알기위해 상태 검사함)
  • secret, configMap 관리

이 중에 내가 이해한 부분(...)

  • 컨테이너가 알수없는 이유로 죽으면 다른 컨테이너를 다시 시작해야 한다. 이걸 자동으로 누가 해주면 좋을 것 같은데 쿠버네티스가 이런역할을 해줄수 있다. (원래 서버는 여러 이유로 죽을 수 있고 대부분의 문제는 컴을 껐다 키면 해결된다!)
profile
올해는 진짜 블로그 써야지 (라고 매년 말하기)

0개의 댓글