[Kubernetes] Kubernetes 소개와 기본 설치
📌 Topic
- 따라하면서 배우는 쿠버네티스 입문편 - OT
- Kubernetes 소개
- 쿠버네티스 설치 / 설치없이 웹에서 실습하기
- 도커 쿠버네티스 설치 / PC에 직접 설치하기
01. 쿠버네티스 소개
컨테이너를 도커 플랫폼에 올려서 관리 + 운영 + 클러스터 서비스를 제공해주는
컨테이너 오케스트레이션 서비스 쿠버네티스 정리를 시작 해보자.
02. Kubernetes 소개
도커, 컨테이너..? 지금까지 얘기는 많이 들어왔지만 실제 사용을 해보지 않은
개발자들이 많을 것이라 생각한다. 우선 간략하게 컨테이너와 도커가 무엇인지 알아보자.
02-1. 컨테이너와 도커
// app.js
const http = require("http");
const os = require("os");
console.log("Test server starting...");
var handler = function (req, res) {
res.writeHead(200);
res.end("Container Hostname: " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
node.js 기반 간단한 app 생성
# Dockerfile
FROM node:12
COPY app.js /app.js
ENTRYPOINT ["node", "app.js"]
node.js app을 이미지화 시키기위해 Dockerfile 작성
Dockerfile은 이미지를 만들기 위한 하나의 툴이라 생각하자
해당 app은 web service와 OS 정보를 수집해서 애플리케이션을 동작하게 되면
콘솔을 찍는 node.js 기반의 간단한 앱이다.
위와 같은 앱을 실행 시키기 위해서는 node.js가 설치가 되어 있어야 하는데 지금은
로컬에서 사용하는것이 아니라 가상화 환경에서 해당 app을 실행 시킨다 가정 해보자.
로컬… node.js 깔고 npm install… npm app.js 이런식으로
가상화 환경에서는?
도커와 같은 가상 환경에서는 이미지를 생성하고 해당 이미지를 실행하여
컨테이너화를 시켜야 한다.
(컨테이너는 이미지를 기반으로 만들어진 하나의 프로세스)
그렇기 때문에 우리는 위와 같이 Dockerfile이라는 것을 작성하여
기존에 제공되는 이미지가 아닌 우리만의 이미지를 만든 것이다.
위와 같이 Dockerfile을 사용하게 되면 node.js 환경 위에서 app.js 파일을 구동할 수 있다.
하지만 여기서 필요한 것은 컨테이너 환경이 필요하다.
02-2. 컨테이너 이미지 생성
컨테이너 이미지를 생성하는 과정은 다음과 같다
- Linux 환경에 Docker를 설치한다
- Dockerfile을 생성 (위에서 작성한 Dockerfile)
- Dockerfile을 빌드
- 이미지를 실행한다
- 도커 허브에 이미지를 업로드 하거나 다운로드 받아서 사용
02-2. 가상머신 vs 컨테이너
이번에는 가상머신(VM Ware)와 도커 컨테이너의 차이점에 대해 알아보자.
가상 머신
- H/W 인프라가 존재
- Hypervisor를 설치하여 가상의 머신을 생성
- Memory
- CPU
- Network
- Disk
- VMware같은 가상머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용
- 목적에 따라 Application을 분리하여 동작 시킨다
컨테이너
- Host OS 위에 도커 엔진(Docker Engine)이 존재한다
- 해당 엔진 위에서 Application이 실제 동작한다
- VM Ware와 같은 가상머신에 비해 훨씬 더 가벼움
- 실행 환경만 독립적으로 실행 시키기에
- 컨테이너의 주 목적은 배포(deploy)를 위해 만들어졌다
02-3. 컨테이너 동작 구조
컨테이너 동작 구조를 이해하기 위해 지금부터 Linux 환경에서의
흐름을 하나씩 파악 해보자. 위 환경은 아래와 같다.
- Linux 시스템이 존재
- 외부 Networking이 가능한 환경
- Client Connection을 받을 수 있는 환경
- Linux 환경에 도커 플랫폼을 올린다
- Web Server 하나를 실행 한다
- 내일부터 세일이라 가정하고 아래와 같이 Scale Out을 수행한다
- Auto Scailing을 수행한 화면
- 기존 1개의 Web Server에서 3개의 Web Server로 구성이 되었다
- 컨테이너 기반 Python 기반 결제 시스템
- 컨테이너 기반 Node.js 기반 장바구니 시스템
- 이 때 Web Server에 이상이 생겼다 가정해보자
- 시스템 자제가 다운되면 복구가 힘들어진다
- 한 대의 시스템으로는 한계가 있다는 의미다
- 멀티 호스트 도커 플랫폼을 사용 해보자
- 멀티 호스트 도커 플랫폼을 사용한 화면이다
- 한 대의 서버에 이상이 생겨도 다른 서버가 커버를 해준다
- 가용성을 유지할 수 있다
- Control Plain 3개 권장
- Elasticsearch의 master node를 n개(홀수) 주는것과 유사
02-4. 오케스트레이션
결국 Kubernetes를 사용하는 근본적인 이유는 Pod를 모니터링, 스케쥴링 및 관리하여 자동으로
Application의 상태를 체크하고 배포까지 진행 해주는 엄청난 녀석이기 때문이다.
Kubernetes의 기본적인 구조는 컨트롤 플레인(Master Node)와 워커 노드(Worker Node)로 구분이 된다.
여기서 지휘자는 Master Node에 해당이되고 컨테이너가 워커 노드에 해당된다.
02-5. 컨테이너 계층 구조
- Layer 6 : OpenShift, Cloud Foundary, Docker Cloud, Deis, Flynn ..
- Layer 5 : Kubernetes, Docker Swam, Marathon/Mesos, Nomad, Diego ..
- Layer 4 : Docker, Rocket, RunC(OCI), Osv, LXC, LXD
- Layer 3 : Ubuntu, RHEL, CoreOS, Unikernels
- Layer 2 : vSphere, EC2, GCP, Azuer, OpenStack
- Layer 1 : Raw Computer, Network, Storage
02-5. kubernetes.io
- Kubernetes 공식 웹 페이지
- 필요한 자료가 있을 경우 해당 페이지를 참고하자
- Kubernetes는 구글이 만들었다 (CNCF)
- CNCF(Cloud Native Computing Foundation) 오픈소스 세미나
02-6. k8s 특징
- 워크 로드 분리
- 어디서나 실행 가능
- 온프라미스, 퍼블릭 클라우드(EKS, AKS, GKE)
- EKS 사용중인데, Kubernetes 그대로 사용이 가능
- 선언적 API
- kubectl을 통해 컨트롤 플레인(Master Node)에 요청
- 즉, 커멘드를 통해서 어떠한 명령을 선언한다는 의미
03. 설치없이 웹에서 실습
이번에는 로컬 환경에 쿠버네티스 설치를 진행 해보자.
우선 설치없이 쿠버네티스를 사용하는 방식에 대해 알아보자.
03-1. 설치없이 쿠버네티스 사용하기
설치 없이 쿠버네티스 사용하는 방식은 따로 기재하지 않음
필자는 다음 04장에서 로컬에 설치 후 진행할 예정
- 카타코다 쿠버네티스 플레이그라운드
- https://www.katacoda.com/courses/kubernetes/playground
- Master, node1이 구성되어 있어 바로 사용가능
- 로컬에 kubernetes 깔아서 하는게 더 편한 것 같다
- Play with Kubernetes
- docker에서 제공, github, docker hub 계정으로 로그인
- https://labs.play-with-k8s.com/
- 4시간 사용 가능, Master, worker Node를 직접 구성 후 사용 가능
댓글남기기