삼성SDS 쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념 게시글을 참고하였습니다.
코딩을 하는 사람들이라면 도커, 컨테이너, 이미지 등의 단어들을 들어보았을 것이다.
쿠버네티스는 이와 관련된 개념이다.
쿠버네티스는 ‘컨테이너를 오케스트레이션 하는 도구’
도커는 컨테이너를 다루는 도구 인데 그렇다면 둘의 차이점은 무엇일까?
용어 정리
- 컨테이너: 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
- 컨테이너 런타임: 컨테이너를 다루는 도구 (ex. 도커)
- 오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위
- 쿠버네티스: 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
우선 컨테이너를 사용하는 이유는 무엇일까?
모두들 컴퓨터를 사용하면서 여러 프로그램을 설치하여 사용할 것이다. 프로그램을 설치할 때에는 특정 경로에 맞춰 설치를 진행하거나 컴퓨터에 맞는 옵션을 일일이 맞춰줘야 하는 경우가 생긴다. 이렇게 되면 무거운 프로그램들의 경우 서로 충돌하는 경우가 생기기 마련이다.
컨테이너는 이런 상황을 방지하고나 프로그램을 구동하는데 필요한 환경을 격리시켜서 여러 프로그램을 구동하더라도 서로 간섭하는 문제가 생기지 않도록 하는 도구이다.
컨테이너는 프로그램들 사이에 장벽을 세워주는 역할을 한다고 보면 된다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있다.
많은 개발자들이 도커를 사용해 본 경험이 있을 것이다. 도커가 바로 컨테이너 런타임 프로그램 중 가장 유명한 종류이다.
컨테이너 런타임은 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구이다.
도커를 많이 이용하지만 도커가 사용하는 컨테이너 규격은 표준화되어있기 때문에 도커가 아닌 다른 컨테이너 런타임을 통해서도 도커로 만든 컨테이너를 구동할 수 있다.
쿠버네티스의 역할은 도커와 같은 컨테이너 런타임을 통해 컨테이너를 다루는 일이다.
쿠버네티스의 역할
- 자동화된 복구(self-healing)
컨테이너를 모니터링 하면서 컨테이너가 죽는 즉시 쿠버네티스는 그것을 빠르게 재시작시킨다.- 로드 밸런싱(Load balancing)
서비스 웹사이트의 니즈에 따라 컨테이너의 숫자를 자동으로 조절한다. 접속하는 유저가 많을수록 쿠버네티스는 구동하는 컨테이너의 숫자를 늘리고, 유저가 적어지면 컨테이너의 숫자를 줄인다.- 무중단(Fault tolerance-FT) 서비스
점진적 업데이트를 통해 서비스를 중단하지 않고도 서비스 업데이트를 가능하게 한다.- 호환성(Vendor Lock In 해결)
서로 다른 클라우드 사이의 호환 문제를 해결하여 사용자들이 특정 업체에 종속되는 일 없이 환경을 이전할 수 있도록 해준다.
도커는 컨테이너 런타임의 종류로, 컨테이너를 다루는 일을 한다. 쿠버네티스는 컨테이너 오케스트레이션 툴의 한 종류로 다수의 컨테이너 실행을 관리 및 조율하는 역할을 한다.
즉 한 개의 컨테이너를 구동시킬 때는 도커를 이용하지만, 다수의 컨테이너를 구동하여 환경을 관리 및 조율할 필요가 있을 때에는 쿠버네티스를 이용한다고 생각하면 된다.
쿠버네티스를 검색하다 보면 위와 같은 사진이 나오는데, 왼쪽부터 전통적 배포(Traditional Deployment), 가상화 배포(Virtualized Deployment) 그리고 컨테이너 중심 배포(Container Deployment)를 의미한다.
전통적 배포는 오래 전부터 쓰이던 방식으로 컴퓨터 한대에 하나의 OS를 설치하고 여러가지 프로그램을 구동하는 전통적인 방식이다. 우리가 컴퓨터를 이용할 때 하나의 컴퓨터에 게임이나 워드 프로그램을 함께 설치해서 사용하는 방법과 같다고 생각하면 된다.
그렇지만 이런식으로 컴퓨터를 사용할 때 우리는 문제에 직면하게 된다. 여러가지 프로그램을 설치하였더니 컴퓨터의 성능이 떨어지거나 프로그램들이 서로 충돌하게 되는 문제점에 맞닥뜨리는데, 이러한 문제를 해결하기 위해 나온 배포 방식이 가상화 배포(Virtualized Deployment) 방식이다.
전통적 배포 방식과 같이 하나의 컴퓨터에 하나의 OS를 설치하는 것까지는 같은데 여기에서는 가상 머신(Virtual Machine)이라는 새로운 개념이 등장한다. 중간에 위치한 하이퍼바이저는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미한다는 정도로만 알고 있으면 된다. 그리고 App은 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일이라고 생각하면 된다.
가상머신은 말 그대로 가상의 컴퓨터다. 비록 물리적으로 한개의 컴퓨터를 사용하지만, 가상머신을 이용하면 여러 프로그램을 각각의 가상머신에서 실행시킴으로서 프로그램들이 서로 간섭하는 것을 방지할 수 있다. 또한 가상머신은 각각 CPU, 메모리, 저장 장치 등을 개별적으로 할당할 수 있으므로 좀 더 무거운 프로그램에는 더 높은 사양을 할당할 수 있다는 장점이 있다.
다만 이 방식이 전통적 배포 방식보다는 분명 효율적이지만, 가상머신은 완전한 컴퓨터이고 가상머신에 일일이 운영체제를 설치해야 하기 때문에 컨테이너 중심의 배포(Container Deployment)보다는 무거운 편이다.
컨테이너 중심의 배포 방식에서는 ‘하이퍼바이저’라는 부분이 ‘컨테이너 런타임’으로 대체되고, ‘가상머신’ 부분은 ‘컨테이너’로 대체된다.
컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없이 하나의 OS만 사용한다. 컨테이너는 컨테이너 아래에서 일어나는 일에는 관심을 두지 않는다. 즉 한 컨테이너에서 일어나는 문제는 다른 컨테이너에서 구동되는 프로그램에 아무런 영향을 주지 않는다. 따라서 하나의 OS를 공유하더라도 각각의 컨테이너에서 구동되는 프로그램들은 서로의 간섭 없이 독립적으로 실행될 수 있다.
다만, 컨테이너는 어디까지나 OS 위에 존재하기 때문에 OS에서 일어나는 문제에는 영향을 받게 된다. 따라서 한 컨테이너에서 일어난 문제가 OS 환경 자체에 문제를 일으켰다면 다른 컨테이너 역시 그 영향을 받게 될 것이므로 이 점을 유의해야 한다.
Kubernetes is an open-source platform designed to automate the deployment, scaling, and management of containerized applications. It provides a framework for deploying and managing containers across a cluster of nodes.
Docker, on the other hand, is a platform that enables developers to package applications and their dependencies into containers. While Docker allows you to create and run containers on a single host, Kubernetes takes containerization to the next level by providing orchestration and management capabilities for containerized applications running across a cluster of machines.
In essence, Docker is a tool for creating and managing containers, while Kubernetes is a platform for orchestrating and managing containerized applications at scale. https://chatgptspanish.org/de/