
애플리케이션이 물리서버 위에서 돌아간다.
하나의 애플리케이션이 리소스를 너무 많이 쓰면 다른 애플리케이션의 성능이 저하될수 있고,
애플리케이션이 많은 리소스를 필요로하지 않을 때는 물리서버의 리소스가 낭비된다
물리서버 위 여러개의 vm 이 돌아가고 그 위에서 애플리케이션들이 실행된다
전통적 방법보다 리소스를 효율적으로 활용할 수 있고 vm 간 환경이 격리되므로 보안성도 좀더 낫다
가상화 기술로 하이퍼바이저 사용함
하이퍼바이저란 호스트 시스템에 다수의 게스트 os 를 구동할수 있게 해주는 소프트웨어. 각 vm 은 독립된 가상 하드웨어 자원을 할당받고 하이퍼바이저는 가상화된 하드웨어와 각각의 vm 을 모니터링하는 중간 관리자 역할을 함.
각 os 를 가지는 vm 과 달리 os 를 공유함으로써 격리수준이 완화됨.
컨테이너는 vm 보다 가벼워서 주기적 빌드, 배포, 롤백이 쉽다 > 애플리케이션을 작게 쪼개 동적으로 배포하고 관리할 수 있는 마이크로서비스 구성이 가능하다 > 개별 서비스를 다른 언어/기술스택을 쓰는것도 가능하고 개별 서비스에서 문제 생겼을때 전체 서비스에 미치는 영향이 적다
컨테이너 = 하나의 프로세스
도커는 컨테이너라는 가상의 격리환경을 만들기 위해 리눅스의 컨테이너(LXC) 를 활용한다.
리눅스 커널이 제공하는 namespace 를 사용해서 프로세스가 독립적 시스템을 가지게 하고 cgroup 을 사용해 독립적 자원을 가지게 함. (근데 정확히 namespace, cgroup 을 쓰고있는게 맞는지는 잘 모르겠음)
애플리케이션을 '컨테이너' 단위로 포장하고 배포하면 좋다는 건 이해했는데, 그럼 쿠버네티스는 무슨 역할을 하는지?
쿠버네티스는 분산형 애플리케이션 및 서비스를 규모에 맞게 실행하도록 설계된 오픈소스 컨테이너 오케스트레이션 플랫폼이다.
쿠버네티스는 클라우드 시대의 os라고도 말할 수 있으며, 쿠버네티스를 적절히 이용하면 대규모 서비스를 효율적이고 안정적으로 관리할 수 있다.
deployment로 파드들을 배포하고, 고정 ip를 할당하기 위해 서비스 리소스를 정의하고, 해당 서비스로 외부의 트래픽을 전달하기 위해 ingress를 띄운다. 이 과정은 선언형 시스템이라는 쿠버네티스의 특성상 yaml파일만 잘 적어주면 알아서 관리 해준다...