쿠버네티스 (Kubernetes)
쿠버네티스는 어플리케이션을 배포, 관리, 확장(Scale)을 자동화해주는 소프트웨어입니다.
어플리케이션을 컨테이너 단위로 포장하여 동시에 수천 대의 서버에 걸쳐서 확장할 수 있도록 도와줍니다.
쿠버네티스 동장 방식
트래픽이 로드밸런서를 통해 쿠버네티스 내부 클러스터의 노드에 리다이렉션 합니다. 그런 다음 노드의 요청을 처리하고 응답을 다시 전달합니다.
쿠버네티스는 크게 다음과 순서대로 작성합니다.
- 어플리케이션 개발
- 어플리케이션 컨테이너화
- 쿠버네티스 클러스터 생성
- 컨테이너를 클러스터에 배포
- 클러스터를 노출(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
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
간단한 어플리케이션을 쿠버네티스에 배포하는 방법을 포스팅하였습니다.
다음에는 좀 더 구체적으로 쿠버네티스를 사용하는 방법을 포스팅하도록 하겠습니다.
'devops > Kubernetes' 카테고리의 다른 글
Kubernetes에서 특정 노드에 파드 하나만 띄우는 방법 (0) | 2023.01.26 |
---|---|
쿠버네티스 관리형 서비스 비교 ( GKE vs EKS vs AKS) (0) | 2020.09.21 |
쿠버네티스를 터미널에서 유용하게 사용할 수 있는 툴 모음 (0) | 2020.06.09 |