- 주제
- 컨테이너와 도커
- Container Orchestration(컨테이너 오케스트레이션)
- k8s. Kubernetis(쿠버네티스)
컨테이너와 도커
컨테이너 동작 시키는 도커플랫폼 프로세스
웹 서비스와 os 정보 수집해서 애플리케이션 동작시키면 콘솔로그 출력하고
80 포트로 열어서 클라이언트커넥션 대기함.
그러다가 클라이언트가 8080포트로 웹 요청하면 요청 받아서 200번 상태코드랑 호스트네임을
컨테이너 호스트네임이라는 메세지랑 전달해주는 노드js 기반의 프로그램.
도커파일을 만들어서 노드 환경을 설치하고 app.js를 컨테이너에 복사해주면 실행됨
노드12 버전 만들고 환경 만들고 app.js 집어넣은 구조야.
컨테이너 동작시킬 컨테이너 플랫폼이 필요한데 도커나 로켓이 그 예다.
리눅스 시스템에 도커를 설치 → 도커데몬 시작 → 도커플랫폼 완성
→ 도커파일을 가지고 webserver 컨테이너 이미지 빌드 → 하나의 하드디스크에 컨테이너이미지가 만들어짐
→ 푸시 명령어로 도커저장소에 컨테이너이미지가 저장
→ 컨테이너 이미지 실행하기 위해 도커커맨드로 컨테이너 이미지를 다운 → 다운받은 컨테이너 가지고 run해줌
→ 컨테이너 실행되면서 nodejs에 8080 포트를 열고 클라이언트 커넥션을 리슨함
→ 클라이언트 사용자가 80포트로 접속하면 컨테이너의 호스트네임을 받음.
가상머신 VS 컨테이너
가상머신
하드웨어에 하이퍼바이저(vmware,버츄어박스)를 설치하고 sw 기술 이용해서 가상머신 만듦.
가상머신 안에는 하드웨어,메모리,cpu,네트워크 다 들어가는 상태에서 애플리케이션 동작시켜주는 것.
(os는 하이퍼바이저에 포함되어있어.)
애플리케이션이 웹서버라면,
웹서버에 클 사용자들이 접속을 하는 게
하드웨어리소스를 메모리 16기가,cpu 8코어정도였을 때
그걸로 클라이언트 커넥션 처리할 수 있다면 딱 그만큼만 넣어줌 돼.
더 많이/부족하게 할 필욘 ㄴㄴ
만약, 세일기간 같이 트래픽 늘어나는 경우는
하드웨어에 리소스를 더 늘려서 집어넣어줌.
(원랜 메모리가 16기가 였던 거를 64기가로 확장하거나
cpu가 8코어였는데 16코어로 확장한다든지와 같이)
이렇게 유동적으로 하드웨어 리소스를 조절하면서 가상머신을 운영하는 것.
가장 적당한 하드웨어 리소스를 할당함으로써 하드웨어를 효율적으로 쓸 수 있어.
그래서 목적에 따른 어플리케이션 운영을 위해 가상머신을 각각 따로 만들어서 운영함.
ex) 웹서비스 가상머신, 결제 어플리케이션 서비스 가상머신, 백단 디비관련 어플리케이션 서비스 가상머신
그럼 가상머신 마다 필요한 하드웨어리소스들을 효율적으로 유연하게 제어 가능함.
- 단점
특정 서비스 운영하는 가상머신에 하드웨어 리소스 많이 넣어줬는데
만약에 시스템이 다운되면 의미가 없어.
=> 수직적으로 스케일업하는 방법보단 수평적으로 스케일아웃 하는 방법을 통해 서버다운을 방지함.
ex)
웹서버를 하나만 실행하는 게 아니라
8코어에 16기가짜리 가상머신이 평상시에 운영되는 형태라면
세일기간이라면 스케일아웃을 통해
하나가 다운되더라도 두대가지고 원활하게 비즈니스연속성을 지원하도록 해주는 게 트렌드야.
기업에서 많이 쓰는 구조.
컨테이너
인프라구조는 동일하게 하드웨어가 들어가고 호스트운영체제(일반 리눅스/윈도우즈/맥)가 들어감.
도커플랫폼이 먼저 올라감.(도커데몬 start) 그 위에서 컨테이너 애플레이션 복수개가 동작됨.
ex) 웹서버, 백단의 디비, 미들단의 결제시스템,오더시스템,결제시스템과 연동되어있는 블록체인,상품리스트,쇼핑카트,..등등이 하나의 컨테이너로 동작됨.
필요에 따라 서비스들을 추가로 컨테이너 기반으로 만들어서 운영하도록 해줌
차이점
가상머신들 중 웹서버 있는 가상머신에서 nginx로 돌아간다친다면,
실제 어플리케이션 사이즈- 100메가 정도 + os - 1~3기가
근데 이거를 스케일아웃할 때마다 다 동일하게 넣어줘야함.
컨테이너는 어플리케이션 사이즈만 고려하면 됨. 스케일아웃할 때마다 그 사이즈만큼만 늘어나는 것.
=> 컨테이너가 훨씬 가볍고 스케일인/아웃이 빠름.
컨테이너의 주 목적 : 배포(deploy)
가상머신처럼 독립된 공간으로 운영되게 하면서
가상머신의 단점인 스케일인/아웃을 보완함.
Container Orchestration(컨테이너 오케스트레이션)
배경
리눅스시스템에 도커플랫폼으로 웹서버 실행함+외부네트워크 가능한 상태.
한대가 다운되도 나머지가 서비스하도록 운영하는 것이 도커컨테이너의 장점
용량 작으니까 빠르게 축소/확대가 가능하므로 평상시에는 웹서버를 1개만 실행하다가
세일 기간과 같이 트래픽 몰리는 경우에 3개 실행해서 운영되게끔함.
하지만 만약 웹서버 3개를 돌린다 한들, 시스템이 망가지면 무소용..
=> 한대의 도커플랫폼 시스템 가지고는 한계 존재
=> 대안 : 멀티호스트 도커 플랫폼
시스템 하나에 컨테이너를 운영하는 게 불안하니까
도커시스템 여러대를 만든느 것.
그리고 나서 컨테이너를 여러개의 도커시스템에다가 분산해서 실행시켜주는 것.
도커시스템 1 : 웹서버 2개 , 파이썬 애플리케이션 1개 실행
도커시스템 2: 웹서버 1개 , 파이썬 애플리케이션 1개, 노드js 기반의 서비스 어플리케이션 실행
그러다가 도커시스템 1대가 다운되도 다른 쪽 도커시스템에서 서비스 운영이 됨.
근데 일일이 엔지니어가 모든 컨테이너를 모니터링하면서
이건 어떻게 배치하고 하는 것과 같은 배치관리는 할 수 없어.
하나의 웹서버 운영하는 데에만 해도 컨테이너는 수백개가 돌아갈 수 있는데 너무 힘듬.
개념
- Orchestration(오케스트레이션)
관현악 편곡(법), 악기 편성법, 관현악 조곡(組曲), 통합, 결집, 편성
⇒ 오케스트라의 지휘자가 음악을 잘 나타낼 수 있는 구조로 배치해서 선율을 맞춤
여러개의 노드 중 그중에 지휘자 역할을 하면서
컨테이너엔진(여기선 도커플랫폼)에 있는 컨테이너를 관리, 스케쥴링, 운영해주는 시스템
원리
마스터노드인 control plane이 각각의 worker node(워커노드)에서
어떻게 어플리케이션을 배치하면 최적이 될지 생각해서 관리함.
특징
필요하면 특정 어플리케이션의 스케일인아웃이 가능하고
특정 어플리케이션이 다운되면 다른 도커플랫폼에 있는 걸 다시 복사해줘서 실행해주게 함
다양한 오케스트레이션 서비스모델이 있는데
그중에서 1등인 쿠버네티스에 대해 다룬다.
k8s. Kubernetis(쿠버네티스)
정의
- 운영수준의 컨테이너 오케스트레이션
- 컨테이너화된 애플리케이션을 자동으로 컨테이너 배포, 스케일링, 관리해주는 오픈소스 시스템
그리스어로 조타수라는 뜻으로
컨테이너를 어케 운영하냐에 따라서 움직인다는 뜻에서 명명.
쓸 땐 k랑 s 사이에 8개의 글자라는 의미로 쓰인다.
HISTORY
구글에서 일주일에 수십억개의 컨테이너를 운영해줄 목적을 가지고,
즉, 대규모의 워크로드에 기반해서 만듬.
- CNCF
세계최고의 개발자,최종사용자 및 공급업체를 한 데 모아서
글로벌기술인프라의 중요한 구성요소를 호스팅하고
클라우드 네이티브 소프트웨어(컨테이너 기반의 솔루션)를 위한 지속가능한 생태계 구축을 목적으로
(컨테이너와 관련된 다양한 기술적 문제를 오픈소스로 해결하는 것을 목적으로)
설립하여서 최대 규모의 오픈소스 개발자 컨퍼런스를 운영함.
여기서 프로메테우스나 쿠버네티스도 나왔고 쿠버네티스 자격증도 주최함.
특징
워크로드 분리
도커컨테이너플랫폼 분리시켜줌
ex) node1, node2
어디서나 실행 가능
온프레미스, 퍼블릭 클라우드(AKS,EKS,GKE 등) 등
- 온프레미스 형태
마스터시스템 노드1,2를 만든 것처럼
회사에서 서버 이용해서 컨테이너 설치하는 장비 만들고 os,도커,쿠버네티스 설치해서 운영가능함.
이것을 온프레미스 서버 라고 함. 온프레미스형태로 도커플랫폼이 운영되는 것
- 퍼블릭클라우드 환경으로 전환하고 싶을 때
이전에 운영했던 어플리케이션 쿠버네티스 기반의 yaml 파일들을 가지고
aks,eks,gke 등등 퍼블릭클라우드 환경으로 옮겨가도 동일하게 실행됨.
(저거 말고도 쿠버네티스를 지원해주는 퍼블릭클라우드 플랫폼이 많음)
선언적 API
쿠버네티스의 가장 큰 특징으로서 ops의 여부 상관 없이 컨테이너 관리 가능하게 한다.
- 선언
쿠버네티스가 준비가 되어있는 상태에서(노드2,컨트롤플레인1)
컨트롤플레인에다가 웹서버 3개 실행해달라고 명령 내리는 것
그럼 요청받은 컨트롤플레인은 노드1,2중에서 어디다 컨테이너를 어떻게 실행할지를 생각해서 배치시킴
배치에서 운영하다가 갑자기 노드2가 다운되면(컨테이너 전체가 다운됨)
쿠버네티스가 현재 상태를 모니터링하다가
내가 요청한 3개 웹서버랑 실행갯수랑 다르면 정상적으로 실행될 수 있는 노드에다가 알아서 실행시킴
하드웨어에서 애플리케이션이 잘 동작하도록 해준다는 측면에서 쿠버네티스를 os라고도 부름.
⇒
가볍고 고객요청 빠르게,다양하게 처리 가능하고
비즈니스환경에서 매출에 큰 영향 주는 게 고객요구의 다양성을 얼마나 빠르게 응대할수 있느냐인데 그거에 쿠버네티스가 최적이라는 것
관련 페이지
공홈 - kubernetis.io
깃헙,슬랙,페북