Upload
naver-d2
View
11.678
Download
0
Embed Size (px)
Citation preview
Contents
1. Abstraction 2. Backgrounds 3. Docker Orchestration 4. Build Pool & Shipdock 5. Demo 동영상
2
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
배포 서비스의 고민
네이버 서비스들의 “상태” 를 관리해주고 싶다.
13
rollback
deploy
이분, 저분, 마구 수정해도 항상 원하는 상태로 갈 수 있음!
1.0 1.1
1.2
1.2.1
2.1
2.0
3.0
Docker 를 주목한 이유
가상 머신보다 가벼운 컨테이너 효율적인 리스스 공유
이미지 빌드, 이미지 배포, 이미지 롤백 서비스의 상태를 관리
“Write Once, Run Anywhere” 빌드/배포를 단순하게
15
Deview 2014 의 도커 발표자료를 참고하세요 ^^ (http://deview.kr/2014/session?seq=20 )
16
Docker 에 대한 설명은 다루지 않습니다.
Docker Orchestration 이란 …
여러 개의 컨테이너로 하나의 서비스를 구성하는 것
18
http://svc.io:80
tcp:6380 tcp:3306
http://svc.io:80
Orchestration 이 필요한 이유
19
Composition 여러 종류의 컨테이너로 구성된 서비스의 설정 및 연동
Replication Scalability, Fault Tolerance, High Availability
“Write Once Run Anywhere” 같은 이미지가 Local/Cluster 에서 모두 동작할 수 있도록
Orchestration 의 요소 (4가지 정도만 …)
20
1. Scheduling 클러스터의 적절한 노드에 컨테이너를 실행 (# of)
(CPU, MEM, Storage, Context, …)
2. Networking 컨테이너 사이/외부와의 네트워킹
(L2 Overlay, L4 Load Balancing, HTTP Proxy, …)
21
3. Discovery 컨테이너/그룹을 찾아내는 방법
(Membership, KV Store, DNS, …)
4. Logging / Monitoring / Alerting 로그를 보고, 상태를 확인하고 이상을 감지
…
Orchestration 의 요소 (4가지 정도만 …)
“Native Clustering for Docker” “Standard Docker API”
24
Docker Swarm
https://blog.docker.com/2014/12/docker-announces-orchestration-for-multi-container-distributed-apps/
Native Cluster, Docker API 는 매력적인 Feature 만족스럽지 않음…
Docker Orchestration API
Replication 상태 관리
Heavy Development (0.4.0 에서 많이 개선) 언젠가는 다시 검토 (하지만 지금은 아니라고 판단.)
25
Docker Swarm 일단 포기
“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
비교적 원하는 기능이 “예상대로” 동작했고, 현 시점에서 가장 앞선 구현체 중 하나로 판단. 더 필요한 것들.
Docker API, Orchestration API
External Traffic (Discovery, Forwarding)
Multi-Cluster 관리
…
27
Kubernetes 선택
28
이제 Orchestration 이 정해졌으니 …
UI
build
docker registry
80
compose
cluster orchestration
cluster #1
cluster #2
naver developer
OCUS F
ShipDock
Milestone
30
Build Pool
Service Cluster
Jenkins Dockerize
Containerized Service Test
Service Containerize
Build Pool
Jenkins 를 Docker 컨테이너로 제공
Fast Pre-built 서버 제공
Jenkins 관리 효율화 (생성, 백업, 이중화, …)
Kubernetes 에 대한 개발/운영 경험
32
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
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 구축 경험
컨테이너는 Stateless 해야 한다.
Jenkins 의 누적 데이터를 Container 에 저장 주기적인 이미지 백업 (일 단위) 문제점:
백업이 제대로 되고 있는지 확인하기 어려움
State 변경하기 어려움 (ex. Environment Variable)
36
컨테이너 데이터의 저장 방법이 필요하다.
37
컨테이너 종료 시 삭제 Instant, No backup
컨테이너 종료 후에도 보관 여러 컨테이너 사이에 공유 (중복 데이터)
Label 등으로 특정 컨테이너에 바인딩
Multi-Cluster 관리가 필요하다.
38
비교적 이른 시점부터 Multi-Cluster 를 고려 해야…
컨테이너가 Cluster 별 설정이 필요한 경우가 생김. Ex) Multi-IDC, Network ACL, …
ShipDock : “Shipping Docker”
Docker Test Pool - 기반 기술과 “돌아가는 버전” 확보
Continuous Deployment
- 소스 푸쉬를 서비스에 반영
Platform As A Service 준비 - “Write Once, Run Anywhere”
40
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
DOH : “Docker’s Orchestration Headquarter”
Multi-Cluster 여러 Docker 클러스터 관리 (+ Scheduling) Transparency
kubernetes, swarm
Customized API Orchestration API
42
Dorothy
“Docker Based Builder” like 인스턴트하게 Docker 컨테이너를 생성하여 이미지 빌드/푸쉬 Jenkins 보다 가볍고 Stateless 한 빌드를 구성하기 위해
43
Docker Registry
V2.x 로 오면서 많은 부분 개선 Pull Performance Webhook, …
일부 보완 필요
이미지 Search (Elastic Search) Trusted Image Registry Proxy / Mirroring, Webhook, …
45
Consul
ETCD 외에 다른 Service Discovery 검토 목적 목적이 명확한 점이 매력
Membership, Consensus Cluster KV Store DNS for Container/Group
46
Internal Kubernetes
External HTTP Proxy (nginx)
Kube-proxy 에 대한 1 Hop 을 줄이기 위해
47
Networking
kubernetes
consul
HTTP Proxy
In-bound traffic