Kubernetes 1. 쿠버네티스(Kubernetes)란 / 쿠버네티스의 기능



개요

Kubernetes 란, 쿠버네티스에 대한 개념이해

What is Kubernetes?


요즘은 인프라엔지니어 뿐만아니라 개발자들 사이에서도 DockerKubernetes라는 용어가 익숙해보인다. (물론 나는 개발자가 아니기 때문에 개발자 친구들한테 건너 건너 들은거다😗) 그중 Docker는 컨테이너의 유행으로 자주 접했을수 있을테지만, 쿠버네티스는 인프라종사자가 아니면 사실 정확히 개념을 잡기 힘들것 같다. 


why kubernetes ?

현재 전세계적으로, 그리고 국내의 많은 기업들도 쿠버네티스에 대해 관심을 갖고 실제 업무에 이미 적용하고 있다. 특히 자체적으로 IDC를 갖고 있는 대기업들부터 작은 스타트업까지 컨테이너 인프라 운영환경으로 쿠버네티스를 채택하는 곳이 많다고 한다.

최대한 자원을 효율적으로 사용하고자함과 통신속도의 향상이 가져다준 ``클라우드컴퓨팅의 영향`으로 MSA, 컨테이너, 도커, 쿠버네티스 라는 용어가 우리에게 꽤나 가까이 와있는듯 하다. 

오늘은 여기 이 쿠버네티스(Kubernetes)라는것에 대해 알아보고 개념을 잡아보려한다.🙃



1. 가상화기술

먼저 쿠버네티스 하면 생각나는 가상화 기술 의 역사 은 다음과 같다.

  • 1. 1991 - Linux : 자원격리 기술 사용

  • 2. 2010.7 - VM : 가상화기술 사용

  • 3. 2014.6 - (dotCloud / Docker의 전신) Container : 가상화기술

  • 4. 2015.7 - Container : 오케스트레이터 : 킹갓구글의 주도로 탄생한것 쿠버네티스(타 오케스트레이터에 대비해 매우 높은 사용률을 보여줬다.)

  • 5. Today - Kubernetes : 클라우드 서비스 / kubernetes 기능을 활용하여 google cloud, aws, azure, IBM cloud, Oracle cloud 의 인프라를 구성 (위 서비스는 쿠버네티스가 이미 설치 되어 있다.)

여기서 언급된 컨테이너 가상화 기술 은 서비스간에 자원 격리를 할때 별도로 OS를 띄우지 않아도 된다는 특징이 있다. OS 기동시간이 없기 때문에 자동화시 매우 빠르고, 자원 효율도 높다. (기존의 호스트형, 하이퍼바이저형 가상화와 다른 개념)

참고로 기존의 호스트형 가상화는 호스트OS위에 VM을 띄워 게스트OS를 구동시키는 방식이고 하이퍼바이저형 가상화는 하드웨어 위에 하이퍼바이저를 실행시키고 각 게스트 OS를 띄워서 하이퍼바이저가 제어하는 방식이다. 이는 아래 포스트를 참고하면 더 이해에 도움이 될 것이다.

https://zunoxi.github.io/infra/2020/08/19/infra-linux-hypervisor/


※ 도커엔진은 컨테이너기술을 기반으로 특정서비스(AP,Middle Ware 등)를 컨테이너화시키고 배포하는역할을한다.

단, 이 도커라는것을 이용하여 대량의 서비스들을 운영할때는 일일히 관리하고 운영하는 기능이 필요한데, 필자같은경우 처음 컨테이너기술을 접했을때는docker compose기능을 이용하여 컨테이너간의 실행순서나 의존성을 관리했었다.

그러던중 최근에는 여러가지 이유로 쿠버네티스 를 사용하여며 도커컨테이너들을 다루게 되었다. 여기서 쿠버네티스처럼 컨테이너들을 일일히 배포하고 운영하는 기능을 하는것을 컨테이너 오케스트레이터 라고 부른다. 정리하자면, 쿠버네티스는 여러 컨테이너들을 관리 해 주는 솔루션이라고 이해할 수 있다.

이와 비슷한 플랫폼으로는 Docker Swarm, Apache Mesos등이 있고, 오캐스트레이터 중에는 보통 쿠버네티스가 가장 많이 쓰이는것으로 알고있다.



2. VM vs Container

여기서 이 둘의 차이는 무엇일까? 위에 이미 설명을 했지만 이 두개만 놓고 비교를 하자면 다음과 같다.

VM : Host Server - Host OS - Hypervisor(VM, VMware,KVM 등) - Guest OS : 여러개의 OS를 공유한다.

  • 윈도우위에 Guest OS 로 리눅스를 설치하여 돌릴수 있다.

  • Guest OS가 뚤려도 다른 Guest OS. Host OS와 완벽하게 분리되어 있어서 각각의 VM끼리 피해가 가지 않는다.

  • 한가지의 언어를 사용하여 만든 모듈들을 통해 한가지 서비스를 구성하기때문에 특정 모듈에 서비스 부하가 일어날때 별도의 VM을 더 만들어서 이를 해결해야 한다. (Guest OS 추가됨)


Container : Host Server - Host OS - Docker(컨테이너 가상화 소프트웨어 중 1개) - Container : 한개의 OS를 공유한다.

  • 리눅스 OS에서 윈도우용 OS를 사용할 수 없다.

  • 한 컨테이너의 보안이 뚤려 OS에 접근을 하게 되면 다른 컨테이너들도 위험하다.

  • 모듈별로 쪼개서 각각의 컨테이너에 담는다. 모듈에 맞는 최적화된 개발언어 사용하는것이 좋다.

  • 여러 컨테이너들을 Pod라는 단위로 묶을수 있고 이것이 배포의 단위가된다. (내가 필요한 pod만 쿠버네티스를 통해 확장 할 수 있다.)


3. Container대해

컨테이너 이미지가 정상적으로 만들어져 있다면 어떤 환경에서도 도커엔진이 설치된 환경에서는 동일하게 동작한다. 참고로 윈도우컨테이너라는것 도 존재한다.

보통은 컨테이너 환경자체가 리눅스 진영에서 시작됐기에 리눅스 컨테이너의 존재만을 생각할 수 있지만, 예를들어 윈도우 서버에서만 서비스할 수 있는 프로그램 같은경우는 컨테이너 환경에서 반드시 윈도우가 필요할 것 이다. 해당글은 데브시스터즈 테크 블로그에서 너무나 정리를 잘해놓으셨으므로 아래 링크를 참고하면 좋을 것 같다.

https://tech.devsisters.com/posts/intro-windows-container


___

4. 쿠버네티스의 강점

쿠버네티스는 일반적으로 Auto Scailing(트래픽양에 따라 알아서 서비스의 자원량을 변경), Auto Healing(장애가난 서버위에 올라와 있는 서비스들을 자동으로 다른 서버에 옮겨주는 기능)의 장점을 제공한다. AWS자체적으로 제공하는 서비스와 유사한데 서버의 필요대수가 줄어들기 때문에유지보수 비용이 다운된다.

  • 이는 운영에 규모가 커질수록 쿠버네티스의 중요도가 상승한다는 특징이 있다.
    (작은 환경에서도 일일히 계산할 필요가 없기때문에 유리하다.)

그림1


5. Kubernetes 구조?

쿠버네티스는 보통 서버 한대는 마스터노드로, 다른 서버들은 워커노드라고 지칭하며 한 마스터에 여러 노드가 연결되는 구조이다. 이렇게 묶인것들이 하나의 쿠버네티스 클러스터 라는 개념으로 묶인다.

마스터는 전반적인 클러스터를 운영하는 것이고 노드들은 자원을 제공하는 것이다. (클러스트 전체의 자원을 늘리고 싶다면 노드들을 추가하면 된다. 혹은 노드 자체의 사양이나 자원을 더 높이는 방법도 있다.)

클러스터안에 Namespace 라는 것이 쿠버네티스 오브젝트들을 독립된 공간으로 분리되게 만들어준다. 다음 포스팅에서 이 쿠버네티스라는것을 실제로 서버환경에서 설치해보고, 어떻게 활용하는 것인지 알아보겠다.

쿠버네티스 2부에서 계속 :)






© 2019.04. by zunoxi

Powered by zunoxi