Devops 엔지니어 솔렐레 IT

Cloud 클라우드 기술 - 개념, 도커(Doker), 쿠버네티스(Kubernetes) 본문

Devops 엔지니어가 알려주는 클라우드 지식/Docker, Kubernetes

Cloud 클라우드 기술 - 개념, 도커(Doker), 쿠버네티스(Kubernetes)

솔렐레_ 2019. 9. 26. 09:00


안녕하세요. 솔렐레입니다.
오늘은 클라우드 기술의 핵심인 가상화에 대한 개념을 정리하겠습니다. 그리고 가상화 기술인 도커와 도커 솔루션으로 가장 주목받고 있는 쿠버네티스(kubernetes)에 대한 설명을 드리도록 하겠습니다. 그럼 시작하도록 하겠습니다.


[가상화 개념 설명]
1. 가상화의 기본 개념: 컴퓨터 자원(cpu, 메모리, 디스크, 네트워크 등)의 추상화

2. 가상화의 레벨
 (1) API(Application Programming interface): 응용 프로그램의 가상화
 (2) ABI(Applivation Binary Interface): 플랫폼과 SW 사이의 가상화
 (3) ISA(Instructure Set Architecture): HW와 SW 사이의 인터페이스를 정의함

3. 가상화 관련 기본 개념
 (1) 타입 1: 하이퍼바이저가 하드웨어 위에서 바로 실행
 (2) 타입 2: 호스트 OS 위에 하이퍼바이저를 실행시키는 방식

4. 전 가상화 반가상화

[전가상화] 하드웨어를 완전히 가상화 [반가상화] 가상머신 위에서 동작하고 있다는 것 인식
OS 제약없이 사용 가능 OS 제약이 있음
가상머신 위에서 동작하고 있다는 것 인식 불가 물리적인 자원 직접 접근 가능 -> 성능 개선 (Passthrough)
OS에서 물리자원 직접 접근 불가 (반드시 하이퍼바이저를 통해 접근 필요) 바이너리 변환

5. 베어 메탈 (VMWARE 용어): 반가상화, 하이퍼바이저 없이 네이티브로 설치해서 사용하는 개념
* 하이퍼바이저 기반 가상화의 특징
 - 다양한 게스트 OS 실행 가능/ 가상화로 인한 성능 저하/ 불필요한 기능의 중복(프로세스 스케줄링)

6. 컨테이너 기반 가상화: 하드웨어 가상화가 아닌 실행환경의 분리(isolation)
 - 각 컨테이너 간 영향을 분리
 - 오버헤드가 5% 이내로 성능 저하가 적음

[도커(Doker) 기능과 구성]
* 도커(Doker)란 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로 쉽게 사용할 수 있도록 만들어진 프로젝트를 의미합니다. Go 언어를 기반으로 만들어졌으며 기존에 쓰이던 가상 머신과는 다르게 성능의 손실이 없기 때문에 차세대 클라우드 인프라 솔루션으로 주목받고 있습니다.

1. 도커(Doker)의 특징
 (1) 모든 컨테이너들이 OS 커널과 공유
 (2) 리눅스에서만 사용 가능
 (3) 리눅스 컨테이너 가상화(LXC) 기반 
 (4) 자체 file system 이 있음
 (5) git과 같은 이미지 버전 컨트롤 시스템 도입

2. 도커(Doker) 기능
 (1) 메모리 관리
 (2) 도커 컨테이너 간 연결: docker run -it --link mysql:mysql --name=ubuntu ubuntu
 (3) 다른 컨테이너 링크 연결 후 접속 확인: mysql -h mysql -uroot -p
 (4) Application Container

3. 도커(Doker) 구성
 - OS = kernel + Shell
 - Linux Kernel + Docker : 각각의 OS를 따로 사용하도록 도커가 실행환경을 분리


[도커(Doker) 기본 명령어]

설명 명령어
도커 이미지 검색 docker search ubuntu
이미지 다운로드 docker pull ubuntu
이미지 리스트 출력 docker images
컨테이너 생성 docker run -it --name=sample ubuntu
컨테이너 접속 docker exec -it sample bash
컨테이너 탈출 exit 또는 Ctrl+P+Q (컨테이너 정지하지 않고 나옴)
도커 컨테이너 리스트 docker ps -a
도커 컨테이너 정지 docker stop ubuntu
도커 컨테이너 시작/재시작 docker start/restart ubuntu
도커 컨테이너 삭제 docker rm ubuntu
도커IP 주소 확인 docker inspect ubuntu | grep "IPAddress"
컨테이너 변경사항 확인 docker diff sample
이미지로 만들기 docker commit -m “update and install nano” -a “snjeong” sample ubuntu_update_and_nano
mysql설치 docker pull mysql
mysql 실행 docker exec -it mysql bash
mysql 접속 mysql -uroot -p


[도커(Doker) 솔루션]
* 오케스트레이션: 여러 대의 서버/서비스를 편리하게 관리해주는 작업
1. 툴 선택 기준
 (1) Swarm: 간단한 설정. 50대 미만의 경우 스웜이 유리
 (2) Kubernetes: 강력한 기능 / 복잡한 설정. 500대 서버에 5만 개의 컨테이너 서비스 가능

2. 기능
 (1) Logging , Monitoring: 여러 대의 서버를 관리할 경우 로그와 서버 상태를 한 곳에서 관리
 (2) Service Discovery
 (3) 클러스터링 (Clustering)
 (4) 스케줄링 (Scheduling): 어떤 서버에 컨테이너 할당을 할 것인가
 (5) 로드 밸런서(Load-balancer): 여러 개의 서버/컨테이너에 작업을 분배
 (6) 고가용성(High Availability): 클러스터 내의 서버가 다운되었을 때 대응
 (7) 확장성(Scalability): 성능을 지속적으로 향상시키는 기능. 일정의 분산 WAS / 미들웨어의 역할

3. 도커 스웜: 여러 대의 도커 서버를 하나의 클러스터로 구성
 (1) 분산 코디네이터: 각종 정보를 저장하고 동기화
 (2) 매니저: 클러스터 내의 서버를 관리하고 제어하는 매니저
 (3) 에이전트: 각 서버 제어를 담당
 (4) Replication: 복제(DBMS) - 다중화/이중화(네트워크)
 참고) 스웜 모드: 로드밸런싱, 스케일링, 장애 복구

4. 볼륨 연결
: 컨테이너의 폴더와 호스트의 물리 폴더 간의 연결. 도커에서는 호스트와 폴더 공유 방식과 볼륨을 사용하는 방식 (docker run -name=ubuntu ubuntu -v ~/Downloads:/download)

5. 쿠버네티스(Kubernetes)
 (1) 구조: 마스터와 노드로 나뉨
 (2) 기능
 - 스케줄링: 컨테이너를 적절한 서버에 배포하는 기능
 - 포드(Pod) 단위로 생성 관리: pot 별로 IP 주소 할당. 덩어리로 공유되는 구조
 - 데이터 볼륨 공유 및 로그 관리가 쉬움
 - replica set: Pod 생성, 관리, 장애 대응, 롤링 업데이트 수행
 - 배치(Batch): replica set과 포드를 선언적으로 정의, 포드(컨테이너)를 생성할 때 사용
 - 서비스(Service): 포드를 외부에 노출하는 역할


이것으로 가상화와 도커에 대한 설명을 마치도록 하겠습니다. 요즘 많은 회사에서 클라우드 컴퓨팅이 사용되면서 도커와 컨테이너 기술이 자연스럽게 주목을 받고 있는 것 같습니다. 새로운 기술이 많이 나오면서 각 서비스를 운영하는 담당자들은 어떻게 내 애플리케이션에 적용하면 장점을 가져와 적용할 수 있을지 고민한다면 더 좋은 서비스를 제공할 수 있을 것 같습니다. 감사합니다. :)

Comments