본문 바로가기

devops/Kubernetes

쿠버네티스(kubernetes) 기초

쿠버네티스 (Kubernetes)

쿠버네티스는 어플리케이션을 배포, 관리, 확장(Scale)을 자동화해주는 소프트웨어입니다. 

어플리케이션을 컨테이너 단위로 포장하여 동시에 수천 대의 서버에 걸쳐서 확장할 수 있도록 도와줍니다.

쿠버네티스 동장 방식

쿠버네티스 개요

트래픽이 로드밸런서를 통해 쿠버네티스 내부 클러스터의 노드에 리다이렉션 합니다. 그런 다음 노드의 요청을 처리하고 응답을 다시 전달합니다. 

쿠버네티스는 크게 다음과 순서대로 작성합니다. 

  1. 어플리케이션 개발
  2. 어플리케이션 컨테이너화
  3. 쿠버네티스 클러스터 생성
  4. 컨테이너를 클러스터에 배포
  5. 클러스터를 노출(Expose)하고 확장(Scale)

 

쿠버네티스 실습 예제

1. 어플리케이션 개발

간단한 Node.js 어플리케이션을 작성해봅니다. 

어플리케이션은 호스트명과 플랫폼을 문자열로 반환하는 어플리케이션입니다. 

const os = require('os');
const http = require('http');

const requestHandler = (req, res) => {
    console.log('Request incoming from ' + req.connection.remoteAddress);
    res.writeHead(200);
    res.end('Success! You\'ve hit ' + os.hostname() + ' on ' + os.platform() + '!');
};

const server = http.createServer(requestHandler)

server.listen(3000);

위 코드로 index.js 파일을 생성합니다. 

이 어플리케이션이 localhost:3000으로 정상 접속 가능한지 확인합니다. 

 

2. 어플리케이션 컨테이너화

1번에서 개발한 어플리케이션을 도커 컨테이너로 만들어보도록 하겠습니다. 

우선 도커 컨테이너화를 하기 위해서는 Dockerfile을 작성해야합니다. 

FROM node:lts
ADD index.js /index.js
CMD node index.js

위 내용으로 Dockerfile을 작성합니다. 

작성한 Dockerfile을 이용해서 컨테이너를 만들어보도록 하겠습니다. 

docker build -t simple-http ./

터미널에서 도커 명령러를 이용해 위 명령어를 입력하면 Dockerfile을 기반으로 도커 이미지를 생성합니다. 

만들어진 이미지를 도커허브(Docker hub)에 업로드하려면 아래 명령어를 이용하세요.

docker tag simple-http <<도커허브 사용자명>>/simple-http

docker push <<도커허브 사용자명>>/simple-http

도커 컨테이너를 시작해서 동작확인을 하겠습니다. 

아래 명령어를 사용하세요.

docker run --name server-container -p 3000:3000 -d <<도커허브 사용자명>>/simple-http
  • -d 옵션은 컨테이너를 백그라운드에서 실행하도록 합니다. 
  • -p 옵션과 3000:3000 은 호스트 포트 번호 3000번과 컨테이너 내부 로컬 포트 번호 3000번을 맵핑합니다. 

localhost:3000 으로 접속되는지 확인하세요.

어플리케이션 동작에 문제가 없다면 컨테이너를 아래 명령어로 정지시킵니다. 

docker stop server-container

 

3. 쿠버네티스 클러스터 생성

쿠버네티스 클러스터는 베어메탈로 생성할려면 여러 네트워크 장비와 물리서버들이 필요하므로, 구글 클라우드인 GCP를 이용하겠습니다. 

처음 가입하면 무료 크레딧을 받을 수 있습니다. 

아래 링크의 cloud SDK를 설치하세요.

 

gcloud container clusters create simple-http-kubes --num-nodes 2 --machine-type f1-micro --region asia-northeast3

https://cloud.google.com/sdk/docs/quickstarts

 

빠른 시작  |  Cloud SDK 문서  |  Google Cloud

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trade

cloud.google.com

 

kubeclt tool을 아래 명령어로 추가합니다. 

gcloud components install kubectl

쿠버네티스를 관리 CLI 툴인 kubeclt이 설치됩니다. 

 

구글 클라우드 프로젝트를 생성합니다. 

gcloud projects create simple-http-project — set-as-default

그리고 노드가 2개인 새로운 쿠버네티스 클러스터를 생성합니다. 

gcloud container clusters create simple-http-kubes --num-nodes 2 --machine-type f1-micro --region asia-northeast3

혹시 Kubernetes Engine API를 사용하도록 설정하라는 메시지가 뜨면 링크를 따라가서 활성화 하시면 됩니다. 

NAME               LOCATION  MASTER_VERSION  MASTER_IP      MACHINE_TYPE  NODE_VERSION  NUM_NODES  STATUS
simple-http-kubes  us-east1  1.10.9-gke.5    xx.xx.xx.xx    f1-micro      1.10.9-gke.5  6          RUNNING

  이렇게 표시되면 클러스터 생성 완료입니다. 

 

4. 컨테이너를 클러스터에 배포

2번에서 생성한 도커 이미지를 배포하도록 하겠습니다. 

아래 명령어를 실행합니다. 

kubectl expose rc simple-http-kubes --type=LoadBalancer --name simple-http

 

5. 클러스터를 노출(Expose)하고 확장(Scale)

배포된 도커 컨테이너에 접속하기 위해서는 로드밸런서를 이용하여 노출(Expose) 해야할 필요가 있습니다.  

kubectl expose rc simple-http-kubes --type=LoadBalancer --name simple-http

같은 도커 컨테이너를 확장하기 위해서는 아래 명령어를 사용합니다. 

아래 명령어는 같은 컨테이너를 10개 확장(Scale)하는 명령어 입니다.

kubectl scale rc simple-http-kubes --replicas=10

 

간단한 어플리케이션을 쿠버네티스에 배포하는 방법을 포스팅하였습니다. 

다음에는 좀 더 구체적으로 쿠버네티스를 사용하는 방법을 포스팅하도록 하겠습니다.