Upload
sangcheol-hwang
View
4.922
Download
11
Embed Size (px)
Citation preview
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
김광영 김준섭 송재혁 안병욱황상철