KEMBAR78
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례 | PDF
Docker + Kubernetes를
이용한 빌드 서버 가상화 사례
Naver Labs 김훈민
Docker + Kubernetes를 이용한 빌드 가상화 사례
Kubernetes 분석/삽질기
누구?
• 남편이자 두 아이의 아빠
• ~ 2011 웹개발
• ~ 2014 성능팀, Arcus 캐시 개발/운영
• 2015 ~ nDeploy 빌드 배포 시스템
Naver Labs & D2 Program
• Naver Labs
• 네이버의 핵심기술에 대한 Research & Engineering
• http://labs.naver.com
• D2 Program (For Developers, By Developers)
• 가치 있는 기술 지식 생산을 돕고 경험을 나누며, 개발자
를 지원합니다.
오늘의 주제
• nDeploy
• Docker, CoreOS
• Kubernetes
오늘의 주제
• nDeploy
• Docker, CoreOS
• Kubernetes
• 경험으로 얻은 소소한 이야기
nDeploy
• 네이버와 라인, NHNEnt.에서 사용하는 빌드/배포 시스템.
• 사용자가 관리하는 Jenkins 서버를 좀 더 쉽고 강력하게 쓸
수 있게 해줍니다.
• 접근 권한 관리, 배포할 서버 관리, 시나리오에 기반한 자유
도 높은 빌드 프로세스 정의가 가능합니다.
• In-house 앱 배포 기능도 있습니다.
번거로운 Jenkins 설치
• 자유도가 높아질 수록 운영 비용이 올라 갔습니다.
• Jenkins 설치는 어떻게 하나요?
• 플러그인은 뭘 깔아야 하나요?
• 서버 검색이 안되요 ㅠ_ㅜ
• VM을 쓰고 있는데 너무 느려요 ㅠ_ㅜ
Jenkins를 풀(pool)로 제공해봐
• VM만으로는 해결이 되지 않는다.
• 고사양의 공용 빌드 서버에 Jenkins를 여러 개 띄우려면?
• 각 사용자 별로 독립적인 환경을 어떻게 제공하지?
이 녀석들로 시작했지만…
여러 호스트에서 컨테이너를
관리하려면 어떻게 해야하지?
Host
Host
Host
Host
Host
Host
Controller
Docker Orchestration
CoreOS Fleet
• CoreOS에 내장. systemd를 클러스터 레벨로 지원.
• 단순한 스케줄러.
• 도커 컨테이너에 대한 별도의 지원은 없음.
• 서비스 디스커버리를 직접 구현해야 함.
• 하지만 도커 컨테이너를 여러 호스트에서 간단히 실행하기
에는 좋은 플랫폼.
도커 Swarm
• 0.1.0 릴리즈 직후 테스트.
• Balanced 스케줄러가 없음.
• 컨테이너 리밸런싱 안됨.
• 컨테이너 리스트 캐싱 버그.
• swarm-agent가 죽어도 알아 차리지 못함.
• 0.2.0에서 어느 정도 개선되었습니다.
타임 오버
http://kubernetes.io/
Kubernetes
• 구글에서 공개한 리눅스 컨테이너 관리 시스템.
• GCE, AWS 같은 클라우드 환경과 물리 장비를 모두 지원.
• 구글의 리눅스 컨테이너 운용 경험을 녹였다고 함.
그리스어로 배의 조타수(Helmsman)
kubectl
• kubectl create -f controller.yaml
• kubectl create -f ./jenkins
• kubectl update -f ./jenkins
• kubectl delete -f ./jenkins
https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/design/architecture.md
아키텍처
Master
ApiServer
ReplicationController
Scheduler
Minion
Kubelet
Proxy
Minion
POD
Container
Container
Minion
POD
컨테이너들의 집합
JSON, YAML로 정의
name:
 jenkins
 
image:
 registry.ndeploy.com:5000/ndeploy/jenkins:latest
 
command:
 
 
 -
 start
 
ports:
 
 
 
 -
 name:
 jenkins
 
 
 
 
 containerPort:
 8080
 
env:
 
 
 
 -
 name:
 JAVA_OPTS
 
 
 
 
 value:
 -Xmx2g
 -Xms2g
 -Duser.timezone=Asia/Seoul
 
memory:
 4294967296
 
volumeMounts:
 
 
 
 -
 name:
 app-home
 
 
 
 
 mountPath:
 /home/ndeploy/app_home
 
 
 
 

Docker + Kubernetes를 이용한 빌드 서버 가상화 사례