[욕망의 인프라 : 도커 & 쿠버네티스] 컨테이너와 쿠버네티스

이열음·2022년 11월 18일
0

욕망의 인프라

목록 보기
1/2

본 스터디(이하 욕망의 인프라)는 알렉스(https://github.com/yxxnghwan)와 함께합니다.

도커와 쿠버네티스가 왜 필요한가?

기존의 모놀리틱 아키텍처는 스케일 아웃 시 리소스 복제가 많이 일어난다. 그만큼 공수도 많이 들 것 같은데, 이를 개선하기 위해서 관심사별로 서비스를 나누어 해당 서비스끼리의 통신으로 하나의 통합된 서비스를 만드는 아키텍처인 MSA가 나오게 된다.

이렇게 분리가 되어있다보니 충돌도 덜나고 빠른 배포도 가능해졌으나 다음과 같은 문제점이 있다.

  • 트랜잭션이 서비스별로 쪼개져서 하나의 트랜잭션처럼 동작해야할때 고려해야 할 점이 많음.
  • 동적 인프라 스트럭처를 관리하는 비용이 증가함.

이때 쿠버네티스는 변경이 잦은 동적 인프라 스트럭처를 보다 간편하고, 안전하게 관리하게끔 도와주기 때문에 해당 도구가 필요하다.

쿠버네티스

쿠버네티스 문서에서는 다음과 같이 정의한다.

컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼

뭔가 서비스를 컨테이너화 시켜서 서비스를 유연하게 관리한다는 말인 것 같다. 좀 더 알아보기 위해 배경을 좀 살펴보겠다

유명한 그림이다. 위에서 말한 개념에서 조금 더 물리적?으로 들어가보겠다.

전통적인 배포란?

기존에는 서비스가 따로 격리되어있지 않았고, 이렇게 통합된 서비스를 한 하드웨어, 한 OS내에서 전부 관리해야했기에 충돌이 잦고 서비스 자체가 무거웠다.

가상화 배포란?

이를 위해 나온게 VM을 활용한 가상화 배포인데, 하나의 환경 내에서 여러개의 가상 머신을 구동하고 이를 하이퍼바이저로 관리하여 서비스 내의 어플리케이션을 관심사별로 구분하는 방식이다. 이렇게 하면 물리적인 하드웨어 내의 한정된 리소스를 더 효율적으로 활용할 수 있다. 그리고 관심사별로 구분되어있어서

다만 단점이 있다면.. 서비스끼리 완벽히 분리된 환경인지라 기본 환경인 OS도 각자 가지고 있어서 공유하는 영역이 없어 무겁다. 그리고 환경을 세팅할때 서로 티키타카할 수 있도록 연결하는게 좀 번거롭다는 점..은 실제로 AWS를 활용해서 환경 구성할때 느꼈던 불편함이기도 하다. 결론적으로 정리하자면 쿠버네티스는 변경이 잦은 동적 인프라 스트럭처를 보다 간편하고, 안전하게 관리하게끔 도와준다. 이걸 어떻게 하느냐? 컨테이너 런타임을 통해 한다고 한다.

Q. 아니 근데 EC2 == 가상머신 맞아?

https://www.redhat.com/ko/topics/cloud-computing/cloud-vs-virtualization

응응 맞다. 클라우드라는 서비스에서 가상머신인 EC2를 제공하는 개념으로 이해했다. 물리컴퓨터 가상화 시켜서 리소스풀에 올려가지고 하나로 리소스를 합쳐주는걸 클라우드에서 제공해준다. 리소스를 동적으로 할당해주는 기능도 있다. 클라우드에서는 이외에도 그런것처럼 리소스를 동적으로 할당해주는 기능도 있다.

컨테이너는 프로세스일까?

https://anweh.tistory.com/67

https://sonseungha.tistory.com/535

공부하다보니 컨테이너가 프로세스의 개념으로 동작할지, 스레드의 개념으로 동작할지 궁금했다. OS를 공유한다는 개념에서 스레드스러운데 환경적으로 분리되어있다는점은 프로세스를 닮아있었기 때문이다.

그래서 찾아본 결과는.. 프로세스가 맞다. 리눅스의 namespace와 cgroup으로 하나의 개별적인 프로세스처럼 동작하게끔 되어있다.(여기서 쓰는 리눅스는 도커 설치하면 자동으로 VM이 설치된다. 따라서 로컬 기기가 뭐든간에 리눅스 기반으로 사용할 수 있게 되는 것이다.)

namespace & cgroup

namespace는 일종의 파티션같은 개념이다. 하드디스크의 영역을 segment로 나누어 프로세스나 그룹별로 자원을 분리하는 기술인데 처음에 리눅스를 켜면 하나가 자동으로 생긴다.

여기서 unshare 명령어로 격리된 namespace를 하나 더 만들어서 격리해주면? 이런식으로 uts값이 달라지면서 호스트가 하나 더 생긴다. 참고로 uts namespace는 호스트 이름을 격리해주는거라고 한다. 이거 말고는 다 똑같던데 이건 리눅스 개념을 좀더 알아봐야할 것 같다.🤔 전반적으로 의문이 드는 구간..

리눅스는 이런식으로 호스트 이름을 달리줘서 서로 격리된 환경이라는걸 명시해주고 cgroup이라는 커널모듈의 서브시스템을 이용해서 격리된 각각의 네임스페이스에서 쓸 CPU나 메모리를 어느정도로 할당해줄건지 정해준다. 도커는 이 원리를 활용해서 컨테이너를 격리(namespace)하고, 그 안에서 쓸 자원을 제한(cgroup)해준다.

아 근데 나 불안한 아티클 하나 봤다?

https://fastcampus.co.kr/story_article_kubernetes

개념 학습하려고 문서랑 이것저것 보는데 “**쿠버네티스, 도커 지원 중단! 어떻게 해야 할까요?”**

이게 뭔소리지?!!?! 나 이제 공부 시작했는디.. 두려운 제목이 보여서 홀린듯이 클릭했다.

근데 읽어보니까 어차피 도커는 OCI(Open Container Initiative)라는 형식에 맞게 이미지를 생성한다고 한다. 음.. 나는 일단 컨테이너 이미지를 만들때 지켜야하는 인터페이스? 규격? 정도로 이해했다. 더 자세한 내용은 이미지라는 개념을 좀 더 공부해야할듯ㅎㅎ

아무튼 쿠버네티스에서 도커를 더이상 지원하지 않아도 도커는 OCI라는 공통된 규격의 이미지를 사용하기 때문에 쿠버네티스에서 도커를 지원하지 않게 되더라도 그냥 이미지를 실행하는 컨테이너 런타임만 바꿔주면된다는 말.. 다행이다^ㅅ^;

0개의 댓글