인프라Human/Kubernetes

왜 쿠버네티스인가요 형님들..

채채1013 2021. 2. 3. 20:32

여기저기 자료를 찾아 정리해 본다.

혼자 꿍얼대는 내용도 포함 됨. 내가 좋아하는 초록색으로..


쿠버네티스가 서비스 운영에 있어서 어떤 자동화 기능을 제공하는가 ?

 

어떤 서비스든 원활하게 유지되기 위해서는 충분한 서버 자원이 뒷받침되어야 한다.

ex ) 신규게임이 나왔을 때, 수강신청 할때 "xx 명이 접속대기 중입니다 " >> 이러면 존빡!

 

기업 입장에서도 어느 정도 트래픽이 될지 예상하기도 어렵고

엄청 많은 서버 자원을 준비해두기도 부담스러울 듯(일회성 이벤트니까)

 

위와 같이 여러 서비스를 운영한다면 상당히 부담쓰

 

 

 

기존에는 한 서버에 한 서비스만 올렸었다.

 

ex)

한 회사는 A, B, C 서비스를 운영중인데

이른 아침에는 A 서비스 접속자가 많음 >> 서버 3대 운영 필요

정오가 되면 B 서비스가 많아지고

밤이 되면 C가 많아짐

 

요렇게 되면 총 9대를 운영해야 함.

기존에는 요거 말고 백업도 하나 더 뒀어야하는데

 

쿠버네티스를 끼면 A,B,C 트리팩을 N빵 해서 4대만 운영하면 되고, 오토 스케일링 기능이 있어서 알아서 서비스의 자원 량을 증가 해줌.

운영은 3대만 하고 있어서 한대 백업서버를 두게 됨. 요때 여분 서버 1대만 더 있으면 되어서 총 5대

 

 

Deployment 라는 오브젝트를 통해 업데이트가 자동적으로 처리 되도록 지원

 

사실 지금으로서는 Azure 에서 VM 을 자동으로 늘려주는 기능이랑.. or 일반 가상화랑 뭐가 다른건지 별로 체감이 안된다.

귀신같이 다음 강의는 VM vs Container..

 

 

시스템 구조에서 오는 차이점 ▽

 

요렇게 되는데 일단 VM 의 경우 나도 알고 너도 알고 우리도 아는 그것.

컨테이너는 호스트 OS 위에 컨테이너 가상화를 시켜주는 도커 (<요놈이 젤 유명) 를 깔게 되는데

 

요 도커가 컨테이너란 놈을 만든다.

 


 

컨테이너는 몰까 그러면~!

 

리눅스마다 버전이 있고, 요 버전에 따라 기본으로 설치되는 라이브러리가 다름

 

내가 Linux 6 + OpenJDK 1.6에 맞춰서 개발해서 A서비스를 만든다.

요걸 Linux 7로 옮기면 잘 작동할까 ??

분명 버전 차이에 따른 문제가 발생할 것임.

 

 

 

그래서 우리는 도커를 설치하고, 이걸 통해서 컨테이너 이미지를 만들 수 있는데

요 이미지에는 서비스 + 그 서비스가 돌아가는 데 필요한 라이브러리들이 같이 있다.

 

 

요렇게 된다는 말씀!

6버전에 도커 설치하고 >> 컨테이너 이미지를 하나 딴다.

 

 

 

그래서 리눅스 7 버전에 다른 라이브러리들이 있더라도, 도커만 설치 되어 있으면

컨테이너 이미지를 가져와서 사용했을 때

A 서비스는 자신의 이미지 안에 있는 라이브러리를 사용하기 때문에 시스템 구동이 안정적이게 된다.

 

 

 

 


 

 

그리고 또 도커가 해주는 일이, 여러 컨테이너들 간에 호스트 자원을 분리해서 쓰도록 해줌.

 

리눅스 고유 기술임. 격리

namespace >> mnt, pid, net, pic, uts, user >> 커널영역 분리

cgroups >> memory, cpu, I/O, network >> 자원에 대한 영역 분리해줌

 

OS에서 제공하는 자원 격리 기술을 이용해서

컨테이너 단위로 서비스 분리를 할 수 있게 만들어 주고,

이걸 사용하면 컨테이너 가상화가 깔려 있는 OS에서는 개발환경 걱정 없이 배포가 가능하게 됨

 

 

 

다시 VM 과 컨테이너의 차이를 얘기하자면,

시스템 구조적으로 컨테이너는 한 OS를 공유하고, VM은 각각의 OS를 띄워야 한다.

>> 컨테이너가 빠를 수밖에..

VM 은 내가 윈도우를 사용하고 있어도, 새로운 Guest OS를 설치할 떄 리눅스 OS 사용 가능

컨테이너는 리눅스 OS 에서 윈도우용 컨테이너 사용 불가

 

보안적으로 VM 은 Guest OS 하나가 뚫려도 다른 Guest OS 나 Host OS에는 영향 X

Container 는 하나가 뚫려서 OS에 접근 가능하게 되면 다른 컨테이너들도 위험해질 수 있다.

 

 

 

 

 


 

시스템 개발 사상(?) 적인 면으로도 큰 차이가 있다.

한 서비스를 만들 때

하나의 언어를 사용해서

여러 모듈들이 한 서비스로 돌아간다.

 

모듈 A,B는 괜찮은데 C가 부하가 될 때

VM을 하나 더 생성해서 띄운다.

자원 사용 / 성능 입장에서 두개가 되고, A와 B는 확장할 필요없는데 걍 곁들여 두개 됨

 

 

컨테이너는 MSA 랑 같이 움직이게되는데

한 서비스를 만들 떄 모듈별로 쪼개서 각각의 컨테이너에 담는 걸 권한다.

그 모듈에 맞는 최적화된 언어를 쓰는 걸 추천

여기서 쿠버네티스는 여러 컨테이너를 한 파드로 묶을 수 있고

한 파드가 하나의 배포 단위이다.