Top Banner
Docker Orchestration 이종현 NAVER 서비스플랫폼 개발센터 1
52

[221] docker orchestration

Apr 16, 2017

Download

Technology

NAVER D2
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: [221] docker orchestration

Docker Orchestration

이종현 NAVER 서비스플랫폼 개발센터

1

Page 2: [221] docker orchestration

Contents

1. Abstraction 2. Backgrounds 3. Docker Orchestration 4. Build Pool & Shipdock 5. Demo 동영상

2

Page 3: [221] docker orchestration

1. Abstraction

3

Page 4: [221] docker orchestration

4

이런 이야기를 해보려고 합니다…

git repo

naver developer

CLI/UI

build

docker registry

80

compose

cluster manage

docker cluster #1

docker cluster #2

push pull

push

pull

config load

base

store

containerize

Page 5: [221] docker orchestration

5

이런 이야기는 하지 않습니다.

도커 각종 설정 방법 직접 만들지 않는 것들 …

Page 6: [221] docker orchestration

2. Backgrounds

6

Page 7: [221] docker orchestration

소개

저는 2007년부터 네이버에서 빌드/배포를 담당하고 있습니다.

7

many sources package repository many services

Page 8: [221] docker orchestration

소스를 어떻게 효율적으로 서비스화 할지 고민 합니다.

3000+ modules 20000+ opr/mon

8

소스, 빌드/배포, 성공적…

네이버의 많은 개발자와 부서의 …

Page 9: [221] docker orchestration

빌드 서비스를 정의하면…

네이버 개발자 들의 소스를 배포 가능하게 (package) 만드는 일

9

sources building package

Page 10: [221] docker orchestration

빌드 서비스의 고민

10

Conflict

공유의 문제

효율성의 문제

네이버의 서비스마다 “서로 다른 빌드 환경” 을 원한다.

Customization

Page 11: [221] docker orchestration

빌드 서비스의 효율성을 위해…

11

빌드를 위한 자원을 공유하면서 커스터마이징이 가능하도록.

SHARE !

Page 12: [221] docker orchestration

배포 서비스를 정의하면…

빌드한 패키지를 서비스 할 수 있는 상태로 만드는 것

12

service deploying package

Page 13: [221] docker orchestration

배포 서비스의 고민

네이버 서비스들의 “상태” 를 관리해주고 싶다.

13

rollback

deploy

이분, 저분, 마구 수정해도 항상 원하는 상태로 갈 수 있음!

1.0 1.1

1.2

1.2.1

2.1

2.0

3.0

Page 14: [221] docker orchestration

서비스의 “상태” 를 이미지로 배포

14

deploy

rollback

1.0 2.0 3.0

1.2.1 2.1

“deploy == rollback”

Page 15: [221] docker orchestration

Docker 를 주목한 이유

가상 머신보다 가벼운 컨테이너 효율적인 리스스 공유

이미지 빌드, 이미지 배포, 이미지 롤백 서비스의 상태를 관리

“Write Once, Run Anywhere” 빌드/배포를 단순하게

15

Page 16: [221] docker orchestration

Deview 2014 의 도커 발표자료를 참고하세요 ^^ (http://deview.kr/2014/session?seq=20 )

16

Docker 에 대한 설명은 다루지 않습니다.

Page 17: [221] docker orchestration

3. Docker Orchestration

17

Page 18: [221] docker orchestration

Docker Orchestration 이란 …

여러 개의 컨테이너로 하나의 서비스를 구성하는 것

18

http://svc.io:80

tcp:6380 tcp:3306

http://svc.io:80

Page 19: [221] docker orchestration

Orchestration 이 필요한 이유

19

Composition 여러 종류의 컨테이너로 구성된 서비스의 설정 및 연동

Replication Scalability, Fault Tolerance, High Availability

“Write Once Run Anywhere” 같은 이미지가 Local/Cluster 에서 모두 동작할 수 있도록

Page 20: [221] docker orchestration

Orchestration 의 요소 (4가지 정도만 …)

20

1. Scheduling 클러스터의 적절한 노드에 컨테이너를 실행 (# of)

(CPU, MEM, Storage, Context, …)

2. Networking 컨테이너 사이/외부와의 네트워킹

(L2 Overlay, L4 Load Balancing, HTTP Proxy, …)

Page 21: [221] docker orchestration

21

3. Discovery 컨테이너/그룹을 찾아내는 방법

(Membership, KV Store, DNS, …)

4. Logging / Monitoring / Alerting 로그를 보고, 상태를 확인하고 이상을 감지

Orchestration 의 요소 (4가지 정도만 …)

Page 22: [221] docker orchestration

어떤 것을 선택/조합할 것인가 ?

22

Docker Ecosystem

Page 23: [221] docker orchestration

Orchestration 검토의 시작

23

Page 24: [221] docker orchestration

“Native Clustering for Docker” “Standard Docker API”

24

Docker Swarm

https://blog.docker.com/2014/12/docker-announces-orchestration-for-multi-container-distributed-apps/

Page 25: [221] docker orchestration

Native Cluster, Docker API 는 매력적인 Feature 만족스럽지 않음…

Docker Orchestration API

Replication 상태 관리

Heavy Development (0.4.0 에서 많이 개선) 언젠가는 다시 검토 (하지만 지금은 아니라고 판단.)

25

Docker Swarm 일단 포기

Page 26: [221] docker orchestration

“Google Style” 클라우드 서비스 관리 서비스에 적합한 Docker 클러스터를 가장 빠르게 구축

Pods, Replication Controllers, Labels, Services, …

안정성 (Ver 1.0, Google Cloud Engine)

http://stackoverflow.com/questions/26705201/whats-the-difference-between-apaches-mesos-and-googles-kubernetes 26

Kubernetes

Page 27: [221] docker orchestration

비교적 원하는 기능이 “예상대로” 동작했고, 현 시점에서 가장 앞선 구현체 중 하나로 판단. 더 필요한 것들.

Docker API, Orchestration API

External Traffic (Discovery, Forwarding)

Multi-Cluster 관리

27

Kubernetes 선택

Page 28: [221] docker orchestration

28

이제 Orchestration 이 정해졌으니 …

UI

build

docker registry

80

compose

cluster orchestration

cluster #1

cluster #2

naver developer

OCUS F

Page 29: [221] docker orchestration

4. Build Pool & ShipDock

29

Page 30: [221] docker orchestration

ShipDock

Milestone

30

Build Pool

Service Cluster

Jenkins Dockerize

Containerized Service Test

Service Containerize

Page 31: [221] docker orchestration

ShipDock

Build Pool

31

Build Pool

Service Cluster

Page 32: [221] docker orchestration

Build Pool

Jenkins 를 Docker 컨테이너로 제공

Fast Pre-built 서버 제공

Jenkins 관리 효율화 (생성, 백업, 이중화, …)

Kubernetes 에 대한 개발/운영 경험

32

Page 33: [221] docker orchestration

Build Pool Design

33

CoreOS

Flannel

ETCD

Kubernetes

SkyDNS

Docker Registry (1.0)

docker registry (1.0)

kubernetes

kube-api

naver developer

request

image

pull/push image

create

current build/deploy system

Page 34: [221] docker orchestration

Build Pool 의 효과

Fast Build 빌드 자원의 공유로 고성능 빌드 가능

Pre-Built C/C++, Java, Android, node.js, …

No management

34

평균 빌드 시간 비교

VM 1core (38 sec)

VM 2core (23 sec)

BP (13 sec) 2배

3배

+ Docker Orchestration 구축 경험

Page 35: [221] docker orchestration

Lesson Learned

Stateless Container Data Multi-Cluster

35

Page 36: [221] docker orchestration

컨테이너는 Stateless 해야 한다.

Jenkins 의 누적 데이터를 Container 에 저장 주기적인 이미지 백업 (일 단위) 문제점:

백업이 제대로 되고 있는지 확인하기 어려움

State 변경하기 어려움 (ex. Environment Variable)

36

Page 37: [221] docker orchestration

컨테이너 데이터의 저장 방법이 필요하다.

37

컨테이너 종료 시 삭제 Instant, No backup

컨테이너 종료 후에도 보관 여러 컨테이너 사이에 공유 (중복 데이터)

Label 등으로 특정 컨테이너에 바인딩

Page 38: [221] docker orchestration

Multi-Cluster 관리가 필요하다.

38

비교적 이른 시점부터 Multi-Cluster 를 고려 해야…

컨테이너가 Cluster 별 설정이 필요한 경우가 생김. Ex) Multi-IDC, Network ACL, …

Page 39: [221] docker orchestration

ShipDock

ShipDock

39

Build Pool

Service Cluster

Page 40: [221] docker orchestration

ShipDock : “Shipping Docker”

Docker Test Pool - 기반 기술과 “돌아가는 버전” 확보

Continuous Deployment

- 소스 푸쉬를 서비스에 반영

Platform As A Service 준비 - “Write Once, Run Anywhere”

40

Page 41: [221] docker orchestration

Shipdock 구조

41

dogsight (UI/CLI)

dorothy (builder)

docker registry

doh (manage)

kubernetes

kube-api

consul HTTP Proxy

In-bound traffic

docker-api+

naver developer

Our Implementations

Page 42: [221] docker orchestration

DOH : “Docker’s Orchestration Headquarter”

Multi-Cluster 여러 Docker 클러스터 관리 (+ Scheduling) Transparency

kubernetes, swarm

Customized API Orchestration API

42

Page 43: [221] docker orchestration

Dorothy

“Docker Based Builder” like 인스턴트하게 Docker 컨테이너를 생성하여 이미지 빌드/푸쉬 Jenkins 보다 가볍고 Stateless 한 빌드를 구성하기 위해

43

Page 44: [221] docker orchestration

Docksight

Shipdock 의 Dash Board / Control UI GUI 와 CLI 를 지원 여러 클러스터를 지원하는 적절한 UI/CLI 를 찾지 못했음.

44

Page 45: [221] docker orchestration

Docker Registry

V2.x 로 오면서 많은 부분 개선 Pull Performance Webhook, …

일부 보완 필요

이미지 Search (Elastic Search) Trusted Image Registry Proxy / Mirroring, Webhook, …

45

Page 46: [221] docker orchestration

Consul

ETCD 외에 다른 Service Discovery 검토 목적 목적이 명확한 점이 매력

Membership, Consensus Cluster KV Store DNS for Container/Group

46

Page 47: [221] docker orchestration

Internal Kubernetes

External HTTP Proxy (nginx)

Kube-proxy 에 대한 1 Hop 을 줄이기 위해

47

Networking

kubernetes

consul

HTTP Proxy

In-bound traffic

Page 48: [221] docker orchestration

5. Demo 동영상

48

Page 49: [221] docker orchestration

49

Dorothy

1) Source Push 2) Source Build 3) Image Upload

Page 50: [221] docker orchestration

50

Containerize

1) Create Compose Info 2) Start Service 3) Scale-Out Service

Page 51: [221] docker orchestration

51

Blue-Green Deploy

1) Current Status 2) Deploy (new version) 3) Updated Status 4) Done (or Back)

Page 52: [221] docker orchestration

Q&A

52