Kubernetes #1. 쿠버네티스(Kubernetes)란 / 쿠버네티스의 기능
개요
Kubernetes 란, 쿠버네티스에 대한 개념이해
What is Kubernetes?
요즘은 인프라엔지니어 뿐만아니라 개발자들 사이에서도 Docker나 Kubernetes라는 용어가 익숙해보인다. (물론 나는 개발자가 아니기 때문에 개발자 친구들한테 건너 건너 들은거다😗) 그중 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자체적으로 제공하는 서비스와 유사한데 서버의 필요대수가 줄어들기 때문에 유지보수 비용이 다운된다.
- 이는 운영에 규모가 커질수록 쿠버네티스의 중요도가 상승한다는 특징이 있다.
(작은 환경에서도 일일이 계산할 필요가 없기 때문에 유리하다.)
5. Kubernetes 구조?
쿠버네티스는 보통 서버 한대는 마스터노드로, 다른 서버들은 워커노드라고 지칭하며 한 마스터에 여러 노드가 연결되는 구조이다. 이렇게 묶인 것들이 하나의 쿠버네티스 클러스터 라는 개념으로 묶인다.
마스터는 전반적인 클러스터를 운영하는 것이고 노드들은 자원을 제공하는 것이다. (클러스트 전체의 자원을 늘리고 싶다면 노드들을 추가하면 된다. 혹은 노드 자체의 사양이나 자원을 더 높이는 방법도 있다.)
클러스터 안에 것이 쿠버네티스 오브젝트들을 독립된 공간으로 분리되게 만들어준다. 다음 포스팅에서 이 쿠버네티스라는 것을 실제로 서버환경에서 설치해 보고, 어떻게 활용하는 것인지 알아보겠다.
쿠버네티스 2부에서 계속 :)
'System Engineering > Kubernetes' 카테고리의 다른 글
Kubernetes #6. Kubernetes의 Volume(쿠버네티스 볼륨) (0) | 2020.07.20 |
---|---|
Kubernetes #5. Kubernetes의 Pod와 Service(쿠버네티스 파드와 서비스) (0) | 2020.05.30 |
Kubernetes #4. 쿠버네티스 네트워크/Dashboard 설정하기 (0) | 2020.05.08 |
Kubernetes #3. 쿠버네티스 Unable to connect to the server: x509 에러 (0) | 2020.04.27 |
Kubernetes #2. CentOS7에 쿠버네티스 설치하기 (0) | 2020.04.27 |
댓글