패러다임의 전환 : 모놀리스 레거시 -> 마이크로 서비스로 발전 되면서..
쿠버네티스는 '어플리케이션 격리'를 위해 리눅스 컨테이너 기술을 사용함
도커와 같은 컨테이너 기술이 어떤 문제를 해결하기 위해 나왔는지 알 필요가 있다
동일한 머신에서 실행되는 서로 다른 SW 가 각자 가진 종속 라이브러리 버전을 관리하려면 어떻게 해야하나?
-> 전용 가상머신을 제공하고 고유의 OS 를 제공하여 환경을 격리하면 된다.
이를 하드웨어 리소스를 낭비하지 않으며 해야한다.
가상머신은 리소스 낭비가 심하다 -> 컨테이너 기술을 사용하자
가상머신보다 컨테이너가 가볍고 효율적
가상머신
컨테이너
각 프로세스가 시스템에 대한 독립된 뷰만 볼수 있도록 함
네임스페이스 종류
각 네임스페이스는 특정 리소스 그룹을 격리하는 데 사용
각 컨테이너는 자신이 속한 고유한 네트워크 네임스페이스들을 사용하므로 고유한 네트워크 인터페이스 세트에 속한 리소스만 볼 수 있다
각 프로세스가 사용할 수 있는 리소스의 양을 제한
컨테이너가 사용할 수 있는 시스템의 리소스 양을 제한
프로세스 (컨테이너)는 설정된 양 이상의 CPU, 메모리, 네트워크 대역폭등을 사용할 수 없다
도커는 컨테이너를 여러 시스템에 쉽게 이식 가능케 하는 시스템, 도구
어플리케이션을 패키징, 배포, 실행하기 위한 플랫폼
어플리케이션 뿐 아니라 라이브러리, 운영체제의 파일시스템 까지도 도커를 실행하는 컴퓨터에 어플리케이션을 프로비저닝하는 데 사용할 수 있음
간편하게 이식 가능한 패키지로 패키징 하는 과정을 단순화 했음
EX) RHEL OS 전체 파일과 함께 어플리케이션을 패키징 한 경우, 다른 OS 서버에서 실행되더라도 어플리케이션은 항상 RHEL 에서 실행된다고 생각됨. 커널만 다를 뿐.
가상머신에 OS 설치 후 그 안에 어플리케이션 설치하고 이미지 배포하고 실행하는 것과 유사 (큰 모놀리스 가상 머신 이미지를 사용)
이에 비해 도커는 훨씬 가벼운 컨테이너 이미지를 사용
컨테이너 이미지는 여러 이미지에서 공유되고 재사용될 수 있는 레이어로 구성되어 있다는 점이 중요
* 가상머신과의 차이점 잘 모르겠네..
어플리케이션과 해당 환경을 패키지화한 것
도커를 통해 생성한다
도커 이미지를 저장하고 공유할 수 있는 저장소
푸시 -> 풀 하면서 사용한다
이미지에서 생성된 일반적인 리눅스 컨테이너
도커를 실행하는 호스트에서 실행되는 프로세스. 호스트와 호스트에서 실행중인 다른 프로세스와 완전히 격리
쿠버네티스 : 컨테이너화된 어플리케이션을 배포, 관리할 수 있게 해주는 SW
리눅스 컨테이너 기능에 의존해 어플리케이션 내부 세부사항을 몰라도 이기종 어플리케이션을 쉽게 실행할 수 있음
호스팅된 어플리케이션을 완전히 격리하면서 하드웨어를 최대한 효율적으로 사용함
기본 인프라를 추상화하여 개발, 운영, 배포, 관리를 단순화함
전체 데이터 센터를 하나의 배포 플랫폼으로 제공한다.
마스터 노드와 여러 워커노드로 구성
개발자가 어플리케이션 매니페스트를 마스터에 게시 -> 어플리케이션을 워커 노드 클러스터에 배포
스케줄링, 서비스 디스커버리, 스케일링, 로드밸런싱, 자가 치유, 리더선출 등의 기능을 제공한다
구성요소
1. 마스터 노드
2. 워커 노드
전체 쿠버네티스 시스템 제어하고 관리
컨트롤 플레인을 실행
클러스터를 제어하고 작동시킴
마스터 노드에서 실행됨
실제 배포되는 컨테이너 어플리케이션을 실행
그림 1.9
워커 노드는 컨테이너화된 어플리케이션을 실행하고 모니터링하는 시스템
어플리케이션 디스크립션
스케줄러 : 각 컨테이너에 필요한 리소스 계싼, 워커노드에 컨테이너 할당
Kubelet : 도커를 이용해 컨테이너 이미지 가져오고 컨테이너 실행
쿠버네티스는 어플리케이션 배포 상태가 디스크립션과 일치하는지 지속적으로 확인.
일치하지 않으면 일치하는 상태로 만든다
클러스터간 어플리케이션을 이동시키고 배치시키는 걸 자동으로 해준다 -> 이는 사람이 수동으로 하는 것보다 리소스활용 최적화를 잘해줌