본문 바로가기
서버인프라/kubernetes

쿠버네티스를 공부해요~

by techwold ted 2022. 12. 12.

조금 늦게 나마 쿠버네티스를 공부하려 한다.

시작은 일찍이 손 댔었는데 회사 사정상 적용하지 못하고 공부 역시 뒤로 미뤄뒀다. 몇년 전에는 시작 단계여서 지금처럼 활성화 되지 않은 이유도 있다 개인적으로 너무 일찍 기술에 손대기가 점점 싫어진 것도 있고.. 트랜드에 맞춰 공부를 해야 하는 것은 맞지만 무조건 적으로 트랜드가 옳다라고 할 수는 없다. 지금도 마찬가지다 몇대 사용하지 않는 곳에서 쿠버네티스를 사용할 이유는 없다고 생각한다 최소 50대 이상 사용할 경우가 아니라면 구지 컨테이너를 할 필요가 있을가 싶다. 오히려 가상화 하이퍼 바이저만 잘 사용해도 운영함에 있어서 불편함이 없다. 그러던 중 이제는 해야 할 때가 되었다고 판단하고 같은 직종에 일하는 동생들 형들이 다들 쿠버네티스에 대한 얘기가 많아서 손을 대보기로 했다. 이 글을 보는 사람들과 같이 공부하는 마음으로 설치부터 하나하나 사용 해 가면서 자료를 올려볼 생각이니 혹시 지금 쿠버네티스를 시작하시는 분들이 같이 공부 하는 마음으로 댓글을 달아주시면 좋을거 같다.

뭐든지 시작이 어렵다. 시작할 마음을 먹고 시작 하면 일단 우리는 절반은 한 것이다 그러니 주저 말고 같이 한번 달려보자~

 

자 오늘 첫 시간이니 만큼 

쿠버네티스란 무엇인가에 대해 알아보자!

 

1. 쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년 이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.

그러 왜 이 쿠버네티스란 녀석이 인기가 좋아졌는지에 대해 알아보자. 

우리가 기존에 사용하던 방식은 아래와 같다.

전통적인 구성

하드웨어에 운영체제를 설치 하고 거기에 어플리케이션을 설치하여 사용 하던 방식이다. 해당 방식의 문제점은 장애가 발생시에 위에 있던 모든 어플리케이션이 죽는다는 것이다. 정말 작은 회사는 한대의 서버로 운영 하는 곳도 있다. 저 위에 데이터베이스와 웹서버를 다 통합하여 올려 놓은 경우이다. 그리고 저렇게 여러대를 사용 하는 경우다. 많은 문제가 발생할 요지가 많았고 한번 장애가 나면 복구하는 시간이 엄청났다. 그리고 자원 낭비가 심했다. 그걸 보안 하고자 아래와 같이 구성해서 사용 하게 됐다 Virtual Machine이 유행하게 되었다 위에서 생기는 문제점을 보안하기 위해 나왔다. 구성은 아래와 같다.

Virtual Machine

하드웨어가 발전하면서 CPU가 남아 도는 현상이 발생했다. 이걸 처리하는 부분에 있어서 많은 고민이 있고 처음 가상화 도입할떄 많은 문제가 있었다. 위와 같이 한대가 떨어지면 많은 Guest OS들이 죽는 다는 단점 역시 있었지만 많은 자원을 활용할 수 있다는 점에서는 굉장한 이득이 있었고 분산 처리 한다면 한대가 죽더라도 다른 한대로 안정적인 서비스를 할 수 있다는 점에서 많은 장점이 있던 서비스 였습니다.

하지만 여기서 하나의 문제가 있었습니다. 바로 어플리케이션의 이식성 즉 OS에 따라 환경에 따라서 어플리케이션에 대한 종속성 라이브러리를 설치 해야 했던 것입니다. 이 작업이 생각 보다 많은 시간을 잡아 먹었습니다. 한 예로 PHP를 build해서 설치하려면 꾀 많은 시간이 걸립니다. OS에 따라 설치해야할 라이브러리 명칭도 다르고 이런 문제로 인하여 조금더 시간을 줄여줄 수 있는 방법이 컨터이너 방식입니다. OS에 영향을 받지 않고 단독으로 잘 포장하여 단독으로 어플리케이션을 동작 시킬 수 있는 것이다. 이건 시간적으로 상당히 효율적인 방식이기도 하다 개발할때 어떠한 환경에 영향을 받이 않고 배포를 쉽게 유연하게 할 수 있기 때문이다. 그럼 쿠버네티스 환경은 어떻게 구성 되는지 아래 그림을 보고 확인해 보자.

Container Deployment

컨테이너 환경은 위와 같다. 우선 하드웨어와 OS 위에 Container Runtime을 올려서 컨테이너간 상호 통신이 가능하게 만드는 것이다. 다시 OS가 올라가는 과정이 빠지니 확실히 가볍긴 하다 하지만 저 방식은 실제로 우리가 사용하는 방식은 아니다. 난 그렇게 생각한다. 실질적으로 이 이전 단계인 Virtual Machine 위에 다시 Container Runtime을 설치하고 거기위에 컨테이너를 올리는 것이니까. 사실 그것이 더 안정적이라는 생각이 든다. 자원의 효율과 안정성 그리고 빠르고 유연한 배포를 하려면 아래와 같은 방식으로  사용 하는 것이 맞을거 같고 우리가 사용하는 방식이라 생각이 든다.

어떠한가? 다들 이런방식의 사용 아닐까? EKS, AKS, GKE 뜯어 놓고 보면 이런 구조 환경 일 것이다.

이 방식은 결국 안정성, 배포의 유연함, 환경의 확정성을 고려 한 것이다. 하지만 속도면에서는 조금 손해를 봐야 한다. 그래도 지금 하드웨어의 환경으로 볼때는 컨테이너 환경을 사용 하는 것이 바람직 하다고 생각이 든다. 우리에게 최고로 필요로 하는 것은 결국 생산성이다. 그 측면에서 바라봤을때 컨테이너 환경은 앞으로 피할 수 없는 트랜드이다.

 

그럼 지금부터 같이 각자가 키를 잡고 항해를 떠나보자~

 

댓글