매일매일 어딘가에서 들려오고, 알고싶고 배우고싶지만 멀게만 느껴졌던 Kubernetes...
도대체 Kubernetes는 무엇인가? 최대한 쉽고 빠르게 기본 개념과 동작 원리에 대해 알아보고, 현재 우리가 이 k8s를 어떻게 사용하고 있는지에 대해서도 가볍게만 알아보려고 합니다!
Kubernetes에 대해 알아보기 전에 미리 알아두면 좋은 내용들이 있습니다.
이전 세대에서는 어떤 과정을 통해 서비스의 빌드/배포가 이루어져왔으며, 어떤 필요성에 의해 Kubernetes가 등장하게 되었는지에 대한 내용인데요, 가장 먼저 살펴볼 내용은 컨테이너와 도커에 대한 개념입니다.
간단한 웹서버를 띄워주는 node.js
코드가 있다고 가정합니다.
const http = require('http');
const os = require('os');
var handler = function(req, res) {
res.writeHead(200);
res.end("Container hostname: " + os.hostname() + "\n");
};
const www = http.createServer(handler);
www.listen(8080);
이 코드를 단순히 VM / PM 등의 서버에서 실행 해줄수도 있겠지만, 우리는 위 코드를 도커 환경에서 동작시켜줄 수 있는 Dockerfile을 정의하여 컨테이너 이미지 형태로도 만들 수 있습니다. (다들 익숙하시죠..?)
FROM node:12
COPY app.js /app.js
ENTRYPOINT ["node", "app.js"]
만들어진 이미지는 Docker Registry(이미지 저장소, ex: Harbor, d2hub, Container Registry)에 업로드하여 보관을 하게 되는데요, 어떤 환경이든 도커 위에서 동일한 이미지를 받아 실행하면 동일한 결과를 얻을 수 있다는 장점이 있습니다.
[이미지 빌드/업로드]
docker build -t test/app:v1 // 컨테이너 이미지 빌드
docker images // 빌드된 이미지 확인
docker push test/app:v1 // Docker Registry로 컨테이너 이미지를 푸시
[이미지 다운로드/배포]
docker pull test/app:v1 // 이미지 저장소에서 컨테이너 이미지를 땡겨옴
docker create --name app -p 80:8080 test/app:v1
docker start app
하나의 OS 위에 Docker를 띄운 다음, 그 위에 여러 개의 앱을 띄워 관리할 수 있게 되었지만 앱들을 여러 대의 서버의 좀 더 안정적인 환경에서 서비스하고 싶다는 니즈가 생겨났고, 이러한 과정들을 개발자들이 하나하나 관리하기에는 힘들었습니다.
이러한 필요성에 의해 나온 Containerized Applications들을 효율적으로 관리해주는 시스템이 Kubernetes입니다
Cluster라는 무대 위에서 master node라는 지휘자가 worker node라는 오케스트라 단원들을 지휘한다
지금까지 Kubernetes에 대한 아주 기초적인 내용들을 알아보았습니다. 다음 스터디때는 각 노드들의 조금 더 상세한(?) 역할에 대해 스터디해보는 시간을 가져보겠습니다.
앞으로 알아봐야 하는 내용들은 어떤 것들이 있을까요?
감사합니다~~!