tech planet 2015 docker 클라우드 구축 프로젝트 - d4

Post on 20-Jan-2017

4.921 Views

Category:

Software

11 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Docker 클라우드 환경 구축 프로젝트 d4

황상철

Tech����������� ������������������  planet����������� ������������������  2015

황상철SK����������� ������������������  planet����������� ������������������  ����������� ������������������  

Platform����������� ������������������  Architect팀����������� ������������������  

-����������� ������������������  DevOps����������� ������������������  엔지니어����������� ������������������  -����������� ������������������  d4����������� ������������������  프로젝트����������� ������������������  리더

Contents

1. Docker 활용 방안

2. Docker 기반 클라우드 환경 구축

3. 요약정리

Docker����������� ������������������  활용방안

• Virtual box로 Docker 호스트 구축

• Vagrant로 프로비저닝

• 개발용 DB,각종 서버(tomcat,redis)는 컨테이너로 실행

=> 빵빵한 메모리, 디스크가 필요하다.

로컬설정을 간섭하지 않는 독립된 개발환경

“nasts-io/gnatsd 라는게 있다던데.”

잘 모르는 도구,프레임워크 POC 환경

$����������� ������������������  docker����������� ������������������  run����������� ������������������  -d����������� ������������������  --name����������� ������������������  nats-main����������� ������������������  nats����������� ������������������  $����������� ������������������  docker����������� ������������������  run����������� ������������������  -d����������� ������������������  --name=nats-2����������� ������������������  \����������� ������������������  —link����������� ������������������  nats-main:nats-main����������� ������������������  nats

출처:https://hub.docker.com/_/nats/

요즘 대세는 Docker 이미지

개발 DB: 개발자용, 개발/스테이징

CI: Jenkins 서버, 테스트 빌드용 DB

QA 서버: 에러난 서버 자체를 Archive

프로젝트에서 함께 사용하는 샌드박스 서버

출처:https://hub.docker.com/_/nats/

이렇게 Docker를 쓰다보면 필요한 것들이 생겨납니다.

- image - private registry - docker server

Docker 기반 클라우드 환경구축

기술기반 아이디어 응모 => 입상, 실행과제채택

Docker로 사내에 AWS같은거 하나 만들고 싶어요

- AWS == IaaS - Heroku == PasS - DevOps 인프라

JARVIS(빌드/배포 시스템)

참고:http://readme.skplanet.com/?p=7148

- 2013년4월~ 개발,배포 표준 - 타겟서버 1400 - 빌드 누적횟수 48,000(230건/일)

남아있는 이슈

•서버가 필요하면: ITSM 요청/할당

•필요한 SW가 있으면: ITSM 요청/설치

•방화벽을 열고싶으면: 보안포털 요청/오픈

ITSM: 사내 인프라 요청 시스템

SK planet의 클라우드 흑역사 - cloulu

참고: http://www.slideshare.net/byunghyunahn79/paas-ksug20131013

클라우드 파운드리 기반 PaaS

d4 프로젝트 시작

• 프로젝트 기간: 6개월(알파,베타)

• 투입인력: 3명

• Docker/인프라 전문가:0명

(docker,deploy,developer,devops)

알파버전을 개발하면서이런것들을 고민했습니다.

Docker 이미지/컨테이너를 관리해주는 도구는?

• shipyard: https://github.com/shipyard/shipyard

• Panamax: http://panamax.io

• Helios: https://github.com/spotify/helios

• Kubernetes: http://kubernetes.io/

• shipyard: 완성도가 너무 떨어진다.

• Panamax: 템플릿모델과 UX만 참고

• Helios: 라이브러리 활용

• Kubernetes: 추후 다시 검토

Docker 호스트 OS는 뭐가 좋을까

CoreOS vs Centos• 장점:

• Docker 특화 • 클러스터 구성 용이

• 단점: • 패키지매니저 X • Docker 버전업 어렵다

• 장점: • 기업 표준

• 단점: • 클러스터 구성 X

기술스택

• MSA(Micro Service Architecture)

• 프런트: angular.js, jquery, bootstrap

• 백엔드: Play 2.3(Java)+ORM, node.js

• 데이터스토어: mySQL, etcd, redis

• 인프라: Docker, CoreOS(fleet)

3개월후 MVP 기능알파버전 공개

베타버전을 준비하며내린 주요 결정들입니다.

d4를 컨테이너기반으로운영하자

마이크로 서비스 아키텍처

Client Server Docker Hosts

Registry

d4-ui

d4-api

d4-logs

d4-auth

d4 네트워크 다이어그램

컨테이너에 대한 ssh접속을 제공하지 않는다

• Pets vs Cattle

• 컨테이너는 무상태

참고:http://cloudscaling.com/blog/cloud-computing/pets-vs-cattle-the-elastic-cloud-story/

• 왜 사람들이 ssh로 접속하고 싶어할까?

• 로그 확인: d4-logs 제공

• 데이터 확인: Import/Export 기능 제공

d4-logs 아키텍처

컨테이너간의 링크는 동일 호스트내로 제한한다

• 멀티 호스트간에 컨테이너 연결

• 앰배서더 패턴(Ambassador Pattern)

• kubernetes의 pod

• docker network

Docker 호스트를 직접관리한다

• 단일 etcd 클러스터

• fleet을 이용해 클러스터 접근

• Systemd 스케쥴 정책

이미지 출처: https://coreos.com/using-coreos/clustering/

3개월뒤 베타버전 공개, 시범 운영시작

베타버전을 운영하며이런 이슈를 겪었습니다.

이미지 관리는 어렵다

• 사내 표준 이미지 관리

• 이미지 레지스트리 구축: v1, v2

• 이미지 버전(태그) 관리

(dockerhub에는 왜 내가 원하는 이미지만 없을까)

표준 이미지 관리• Dockerfile을 위한 git 레파지터리

• Image 빌드를 위한 CI 서버

• 계층형 이미지 구조 Centos

java:7 java:8

java/build:7

jenkins/java:7,7.1

스케쥴러가 필요하다

• Systemd 스케쥴 정책에 따라 구현

(내가 만든 컨테이너는 어디에 있을까)

정책 설명

MachineID 특정����������� ������������������  호스트에만����������� ������������������  컨테이너를����������� ������������������  만든다

Conflicts 특정����������� ������������������  호스트는����������� ������������������  제외

Global 클러스터에����������� ������������������  포함된����������� ������������������  임의의����������� ������������������  호스트

MachineOf 지정된����������� ������������������  범위에����������� ������������������  속하는����������� ������������������  호스트

Link 연결된����������� ������������������  컨테이너의����������� ������������������  호스트

데이터 Volume 이슈

• NAS: DB 데이터, 설정파일, 빌드 결과

• Planet Space: s3와 유사한 SK planet 서비스

(컨테이너 데이터는 유지되어야 한다)

Port 이슈

• 80: 고유 URL을 제공 (etcd+haproxy) ex) http://ip-172-17-0-29.dockeri-host-pstg01.d4.skplanet.com/

• 기타: Proxy 컨테이너(nginx+서브 도메인) ex) http://syrupci.d4.skplanet.com

(80,8080,3306,443,6379,27017…)

베타버전 공개후얼마나 사용하고 있나요

• d4 안정성 검증

• 다양한 시나리오 사용성 검증

• 사내 표준 이미지 지속적인 개선

• docker 워크샵 강의

• 시범 적용: Syrup Store 빌드서버 팜

앞으로 해야하는 일은이렇습니다.

kubernetes 도입

• 2015년7월21 v1 공식 출시

• Container Orchestration 시스템

• 스케쥴러, 멀티 호스트 네트워킹 솔루션

• 도입이슈: POD, Service 개념 맵핑

OpenStack 연계

• 장점: 컨테이너의 한계(리소스 격리,보안) 보완

• 단점: 비용, 성능상 손해

• Murano, Magnum 검토

단점 참고: http://www.techrepublic.com/article/openstack-is-overkill-for-docker/

장점 참고: https://www.mirantis.com/blog/yes-containers-need-openstack/

요약정리

• Docker 활용방안: 독립된 개발환경

• Docker 인프라 구축에 필요한 기본요소

• Host OS,스케쥴러,모니터링

• 컨테이너 활용을 위해 필요한 것들

• 이미지,볼륨,네트워킹

• DevOps 마인드셋

Q & A

김광영 김준섭 송재혁 안병욱황상철

top related