SlideShare a Scribd company logo
1 of 36
Download to read offline
confd, systemd, fleet을 이용한 
어플리케이션 배포 in CoreOS 
Docker Seoul Meetup #2 / Sep 26, 2014 
! 
by @subicura (김충섭)
service discovery 
haproxy 
load-balancer 
web1 
web application 
web2 
web application
Docker 구동에 최적화된 
가볍고 최소화된 모던 OS 
no package manager (apt/yum)
CoreOS 특징 
A Minimal Operating System Painless Updating 
Docker Containers Clustered By Default
CoreOS 구성 
etcd 
systemd 
fleet
etcd 
A highly-available key value store 
directory 
/services/web/web_1 172.17.8.101:49155 
key value
etcd 
A highly-available key value store 
cluster
Sidekick for service discovery 
APP ! haproxy 
APP ip/port 
set command etcdctl set key value 
etcdctl set /services/web/web_1  
172.17.8.101:49155 
etcdctl set /services/web/web_1  
172.17.8.101:49155  
--ttl 60 
*ttl : Time to live
service discovery 
APP ! haproxy 
APP ip/port 
get command etcdctl get key 
etcdctl get /services/web/web_1 
*recursive : 하위 디렉토리 포함 
watch command etcdctl watch key 
etcdctl watch /services/web  
--recursive
service discovery 
haproxy 
172.17.8.101:49155 
APP1 
APP2 
172.17.8.102:49155 
䡬 변화감지 
䡬 설정파일 수정 
䡬 프로그램 재시작 
= confd 
䡬 설정저장
confd 
lightweight configuration management tool 
䡬 written in Go 
䡬 etcd / Consul support 
䡬 template resource config (TOML) 
䡬 source template 
䡬 not stable (template syntax change) 
䡬 only support polling (not yet)
template resource config 
[template] 
src = "haproxy.conf.tmpl" 
dest = "/etc/haproxy/haproxy.conf" 
owner = "root" 
group = "root" 
mode = "0644" 
keys = [ 
“/services/web", 
] 
reload_cmd = "/usr/sbin/service haproxy restart" 
haproxy.toml
source template 
… 
! 
backend default 
balance {{ getv “/haproxy/balance" }} 
option httpclose 
option forwardfor 
{{ if ls "/services/web" }} 
{{ range gets "/services/web/*" }} 
server {{base .Key}} {{.Value}} check 
{{ end }} 
{{ end }} 
haproxy.cfg.tmpl 
https://github.com/kelseyhightower/confd/blob/0.6.x/docs/templates.md
DEMO
systemd 
System and Service Manager 
CoreOS default init system
sample.service 
[Unit] 
Description=My Service 1 
Requires=docker.service 
After=docker.service 
! 
[Service] 
ExecStart=/usr/bin/docker run --rm --name app1 busybox  
/bin/sh -c "while true; do echo Hello World; sleep 1; done" 
ExecStop=/usr/bin/docker kill app1
fleet 
distributed init system (systemd + etcd)
fleet 
[X-Fleet] fleet-specific Options 
䡬 MachineID - 해당하는 machine에서 실행 
䡬 MachineOf - 특정 서비스가 수행중인 machine에서 실행 
䡬 MachineMetadata - metadata를 가진 machine에서 실행 
䡬 Conflicts - 해당 서비스가 수행중인 machine을 피해서 실행 
*<= 0.8.0 : X-Condition prefix
sidekick pattern 
container를 실행하거나 
container를 중지할때 
container의 정보를 etcd에 저장하는 
sidekick용 service를 활용
sidekick pattern 
web 
application 
container 
web 
application 
sidekick 
service 
기존 컨테이너 수정없이 추가하여 사용가능 
(socket 통신시) 
etcd
/etc/environment 
COREOS_PUBLIC_IPV4=172.17.8.102 
COREOS_PRIVATE_IPV4=172.17.8.102
docker inspect 
"NetworkSettings": { 
"Bridge": "docker0", 
"Gateway": "10.1.42.1", 
"IPAddress": "10.1.0.16", 
"IPPrefixLen": 16, 
"PortMapping": null, 
"Ports": { 
"80/tcp": [ 
{ 
"HostIp": "0.0.0.0", 
"HostPort": "49167" 
} 
] 
} 
} 
docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1
web.service의 sidekick service 
[Unit] 
Description=Web1 Sidekick Container 
! 
After=web.1.service 
BindsTo=web.1.service 
! 
[Service] 
EnvironmentFile=/etc/environment 
! 
… 
! 
[X-Fleet] 
MachineOf=web.1.service 
! 
! 
! 
# 특정 서비스 실행 후 실행 
# 특정 서비스 종료 시 종료 
! 
! 
# CoreOS cloud 설정파일 
! 
! 
! 
! 
# 특정 서비스가 실행중인 
서버에서 실행
web.service의 sidekick service 
ExecStart=/bin/sh -c  
"SERVICE_PORT=$(docker inspect --format='{{(index 
(index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1) &&  
while true; do  
etcdctl set /services/web/web1  
”$COREOS_PRIVATE_IPV4:$SERVICE_PORT" --ttl 60;  
sleep 45;  
done" 
ExecStop=/usr/bin/etcdctl rm /services/web/web1 
ttl을 활용하자
DEMO - ver.1
더 나은 systemd service 파일 
1. %p %i 변수를 사용하자 
web@1.service 
%p %i
더 나은 systemd service 파일 
1. %p %i 변수를 사용하자 
[Unit] 
Description=My Service %i 
Requires=docker.service 
After=docker.service 
! 
[Service] 
ExecStart=/usr/bin/docker run --rm --name %p-%i busybox  
/bin/sh -c "while true; do echo Hello World; sleep 1; done" 
ExecStop=/usr/bin/docker kill %p-%i
더 나은 systemd service 파일 
2. TimeoutStartSec=0 옵션을 추가하자. 
[Service] 
TimeoutStartSec=0 
docker pull이 오래걸릴 경우 
timeout으로 실패하는 걸 방지
더 나은 systemd service 파일 
3. Restart=always 옵션을 추가하자. 
[Service] 
Restart=always 
RestartSec=10s 
실행이 종료될 경우 자동으로 재시작함
더 나은 systemd service 파일 
4. Environment 옵션을 활용하자. 
[Service] 
Environment="SERVICE_NAME=%p_run-%i" 
Environment=“SERVICE_ETCD_KEY=/services/web/%p-%i" 
Environment="SERVICE_IMAGE_URL=subicura/whoami" 
범용적으로 활용가능
더 나은 systemd service 파일 
5. ExecStartPre 옵션을 활용하자. 
[Service] 
ExecStartPre=-/usr/bin/docker kill $SERVICE_NAME 
ExecStartPre=-/usr/bin/docker rm $SERVICE_NAME 
ExecStartPre=/usr/bin/docker pull $SERVICE_IMAGE_URL 
ExecStart=/usr/bin/docker run --rm  
--name $SERVICE_NAME -P $SERVICE_IMAGE_URL 
ExecStop=/usr/bin/docker stop $SERVICE_NAME 
“-“ 옵션은 프로세스가 실패해도 다음을 진행함
DEMO - final
conclusion 
easy & flexible configuration 
type default docker etcd+confd 
방식 설정파일 환경변수 etcd 
특징 
위치를 찾기 어려움 
너무 많은 옵션 
문서화가 필수 
관리 어려움 
중요한 옵션 찾기 쉬움 
파일로 관리 
관리 쉬움 
모든 설정파일을 한곳 
에서 관리함 
동적 설정이 쉬움
conclusion 
service manage 
type default docker fleet 
방식 source repository container service file 
특징 
소스 컴파일 또는 소스 
저장소를 이용함 
관리 어려움 
Dockerfile을 이용함 
관리 쉬움 
중앙에서 관리 가능
THANK YOU 
! 
QUESTION?
code 
䡬 discovery sample - https://github.com/subicura/ 
discovery-fleetd-sample 
䡬 haproxy-confd - https://github.com/subicura/ 
haproxy-confd 
䡬 whoami - https://github.com/subicura/whoami

More Related Content

What's hot

[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용NAVER D2
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS IntroductionRemotty
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101Daegwon Kim
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXpressEngine
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Keon Ahn
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
docker-based remote desktop
docker-based remote desktopdocker-based remote desktop
docker-based remote desktopHyeong-Kyu Lee
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기KTH, 케이티하이텔
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편Sam Kim
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XpressEngine
 
What is chef - korean
What is chef - koreanWhat is chef - korean
What is chef - koreanSangUk Park
 

What's hot (20)

[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS Introduction
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
docker-based remote desktop
docker-based remote desktopdocker-based remote desktop
docker-based remote desktop
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
 
What is chef - korean
What is chef - koreanWhat is chef - korean
What is chef - korean
 

Viewers also liked

도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise DockerLee Ji Eun
 
Zabbix haproxy configuration_guide
Zabbix haproxy configuration_guideZabbix haproxy configuration_guide
Zabbix haproxy configuration_guidesprdd
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google KubernetesYongbok Kim
 
Module 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionModule 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionTail-f Systems
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunhoJunho Kim
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swiftJunho Kim
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기창훈 정
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDaegwon Kim
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08Nomad Connection, Inc.
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea CloudJude Kim
 
포스테키안 서평공모전 당선작(2016-1)
포스테키안 서평공모전 당선작(2016-1)포스테키안 서평공모전 당선작(2016-1)
포스테키안 서평공모전 당선작(2016-1)POSTECH Library
 
국회입법조사처 발암성물질 관리체계 개선방안(2010)
국회입법조사처 발암성물질 관리체계 개선방안(2010)국회입법조사처 발암성물질 관리체계 개선방안(2010)
국회입법조사처 발암성물질 관리체계 개선방안(2010)여성환경연대
 
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!Seung Heun Noh
 

Viewers also liked (20)

도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
Zabbix haproxy configuration_guide
Zabbix haproxy configuration_guideZabbix haproxy configuration_guide
Zabbix haproxy configuration_guide
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
Module 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionModule 1: ConfD Technical Introduction
Module 1: ConfD Technical Introduction
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
정책가이드북
정책가이드북 정책가이드북
정책가이드북
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swift
 
RZDESK-Docker hackday
RZDESK-Docker hackdayRZDESK-Docker hackday
RZDESK-Docker hackday
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
 
Pharos
PharosPharos
Pharos
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 
포스테키안 서평공모전 당선작(2016-1)
포스테키안 서평공모전 당선작(2016-1)포스테키안 서평공모전 당선작(2016-1)
포스테키안 서평공모전 당선작(2016-1)
 
국회입법조사처 발암성물질 관리체계 개선방안(2010)
국회입법조사처 발암성물질 관리체계 개선방안(2010)국회입법조사처 발암성물질 관리체계 개선방안(2010)
국회입법조사처 발암성물질 관리체계 개선방안(2010)
 
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
 

Similar to Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS

[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
PCF Installation Guide
PCF Installation GuidePCF Installation Guide
PCF Installation Guideseungdon Choi
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법GeunCheolYeom
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTLOGISPOT
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdfHeeJung Chae
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_koreaF5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_koreaInfraEngineer
 

Similar to Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS (20)

Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
PCF Installation Guide
PCF Installation GuidePCF Installation Guide
PCF Installation Guide
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Internship backend
Internship backendInternship backend
Internship backend
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_koreaF5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
 

More from 충섭 김

쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)충섭 김
 
Visual Studio로 Kubernetes 사용하기
Visual Studio로 Kubernetes 사용하기Visual Studio로 Kubernetes 사용하기
Visual Studio로 Kubernetes 사용하기충섭 김
 
Mesos on coreOS
Mesos on coreOSMesos on coreOS
Mesos on coreOS충섭 김
 
Launching containers with fleet
Launching containers with fleetLaunching containers with fleet
Launching containers with fleet충섭 김
 
Automatic docker service announcement with registrator and confd
Automatic docker service announcement with registrator and confdAutomatic docker service announcement with registrator and confd
Automatic docker service announcement with registrator and confd충섭 김
 
Very Early Review - Rocket(CoreOS)
Very Early Review - Rocket(CoreOS)Very Early Review - Rocket(CoreOS)
Very Early Review - Rocket(CoreOS)충섭 김
 
CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지충섭 김
 

More from 충섭 김 (7)

쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
 
Visual Studio로 Kubernetes 사용하기
Visual Studio로 Kubernetes 사용하기Visual Studio로 Kubernetes 사용하기
Visual Studio로 Kubernetes 사용하기
 
Mesos on coreOS
Mesos on coreOSMesos on coreOS
Mesos on coreOS
 
Launching containers with fleet
Launching containers with fleetLaunching containers with fleet
Launching containers with fleet
 
Automatic docker service announcement with registrator and confd
Automatic docker service announcement with registrator and confdAutomatic docker service announcement with registrator and confd
Automatic docker service announcement with registrator and confd
 
Very Early Review - Rocket(CoreOS)
Very Early Review - Rocket(CoreOS)Very Early Review - Rocket(CoreOS)
Very Early Review - Rocket(CoreOS)
 
CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지
 

Recently uploaded

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 

Recently uploaded (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 

Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS

  • 1. confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS Docker Seoul Meetup #2 / Sep 26, 2014 ! by @subicura (김충섭)
  • 2. service discovery haproxy load-balancer web1 web application web2 web application
  • 3. Docker 구동에 최적화된 가볍고 최소화된 모던 OS no package manager (apt/yum)
  • 4. CoreOS 특징 A Minimal Operating System Painless Updating Docker Containers Clustered By Default
  • 5. CoreOS 구성 etcd systemd fleet
  • 6. etcd A highly-available key value store directory /services/web/web_1 172.17.8.101:49155 key value
  • 7. etcd A highly-available key value store cluster
  • 8. Sidekick for service discovery APP ! haproxy APP ip/port set command etcdctl set key value etcdctl set /services/web/web_1 172.17.8.101:49155 etcdctl set /services/web/web_1 172.17.8.101:49155 --ttl 60 *ttl : Time to live
  • 9. service discovery APP ! haproxy APP ip/port get command etcdctl get key etcdctl get /services/web/web_1 *recursive : 하위 디렉토리 포함 watch command etcdctl watch key etcdctl watch /services/web --recursive
  • 10. service discovery haproxy 172.17.8.101:49155 APP1 APP2 172.17.8.102:49155 䡬 변화감지 䡬 설정파일 수정 䡬 프로그램 재시작 = confd 䡬 설정저장
  • 11. confd lightweight configuration management tool 䡬 written in Go 䡬 etcd / Consul support 䡬 template resource config (TOML) 䡬 source template 䡬 not stable (template syntax change) 䡬 only support polling (not yet)
  • 12. template resource config [template] src = "haproxy.conf.tmpl" dest = "/etc/haproxy/haproxy.conf" owner = "root" group = "root" mode = "0644" keys = [ “/services/web", ] reload_cmd = "/usr/sbin/service haproxy restart" haproxy.toml
  • 13. source template … ! backend default balance {{ getv “/haproxy/balance" }} option httpclose option forwardfor {{ if ls "/services/web" }} {{ range gets "/services/web/*" }} server {{base .Key}} {{.Value}} check {{ end }} {{ end }} haproxy.cfg.tmpl https://github.com/kelseyhightower/confd/blob/0.6.x/docs/templates.md
  • 14. DEMO
  • 15. systemd System and Service Manager CoreOS default init system
  • 16. sample.service [Unit] Description=My Service 1 Requires=docker.service After=docker.service ! [Service] ExecStart=/usr/bin/docker run --rm --name app1 busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" ExecStop=/usr/bin/docker kill app1
  • 17. fleet distributed init system (systemd + etcd)
  • 18. fleet [X-Fleet] fleet-specific Options 䡬 MachineID - 해당하는 machine에서 실행 䡬 MachineOf - 특정 서비스가 수행중인 machine에서 실행 䡬 MachineMetadata - metadata를 가진 machine에서 실행 䡬 Conflicts - 해당 서비스가 수행중인 machine을 피해서 실행 *<= 0.8.0 : X-Condition prefix
  • 19. sidekick pattern container를 실행하거나 container를 중지할때 container의 정보를 etcd에 저장하는 sidekick용 service를 활용
  • 20. sidekick pattern web application container web application sidekick service 기존 컨테이너 수정없이 추가하여 사용가능 (socket 통신시) etcd
  • 22. docker inspect "NetworkSettings": { "Bridge": "docker0", "Gateway": "10.1.42.1", "IPAddress": "10.1.0.16", "IPPrefixLen": 16, "PortMapping": null, "Ports": { "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49167" } ] } } docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1
  • 23. web.service의 sidekick service [Unit] Description=Web1 Sidekick Container ! After=web.1.service BindsTo=web.1.service ! [Service] EnvironmentFile=/etc/environment ! … ! [X-Fleet] MachineOf=web.1.service ! ! ! # 특정 서비스 실행 후 실행 # 특정 서비스 종료 시 종료 ! ! # CoreOS cloud 설정파일 ! ! ! ! # 특정 서비스가 실행중인 서버에서 실행
  • 24. web.service의 sidekick service ExecStart=/bin/sh -c "SERVICE_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1) && while true; do etcdctl set /services/web/web1 ”$COREOS_PRIVATE_IPV4:$SERVICE_PORT" --ttl 60; sleep 45; done" ExecStop=/usr/bin/etcdctl rm /services/web/web1 ttl을 활용하자
  • 26. 더 나은 systemd service 파일 1. %p %i 변수를 사용하자 web@1.service %p %i
  • 27. 더 나은 systemd service 파일 1. %p %i 변수를 사용하자 [Unit] Description=My Service %i Requires=docker.service After=docker.service ! [Service] ExecStart=/usr/bin/docker run --rm --name %p-%i busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" ExecStop=/usr/bin/docker kill %p-%i
  • 28. 더 나은 systemd service 파일 2. TimeoutStartSec=0 옵션을 추가하자. [Service] TimeoutStartSec=0 docker pull이 오래걸릴 경우 timeout으로 실패하는 걸 방지
  • 29. 더 나은 systemd service 파일 3. Restart=always 옵션을 추가하자. [Service] Restart=always RestartSec=10s 실행이 종료될 경우 자동으로 재시작함
  • 30. 더 나은 systemd service 파일 4. Environment 옵션을 활용하자. [Service] Environment="SERVICE_NAME=%p_run-%i" Environment=“SERVICE_ETCD_KEY=/services/web/%p-%i" Environment="SERVICE_IMAGE_URL=subicura/whoami" 범용적으로 활용가능
  • 31. 더 나은 systemd service 파일 5. ExecStartPre 옵션을 활용하자. [Service] ExecStartPre=-/usr/bin/docker kill $SERVICE_NAME ExecStartPre=-/usr/bin/docker rm $SERVICE_NAME ExecStartPre=/usr/bin/docker pull $SERVICE_IMAGE_URL ExecStart=/usr/bin/docker run --rm --name $SERVICE_NAME -P $SERVICE_IMAGE_URL ExecStop=/usr/bin/docker stop $SERVICE_NAME “-“ 옵션은 프로세스가 실패해도 다음을 진행함
  • 33. conclusion easy & flexible configuration type default docker etcd+confd 방식 설정파일 환경변수 etcd 특징 위치를 찾기 어려움 너무 많은 옵션 문서화가 필수 관리 어려움 중요한 옵션 찾기 쉬움 파일로 관리 관리 쉬움 모든 설정파일을 한곳 에서 관리함 동적 설정이 쉬움
  • 34. conclusion service manage type default docker fleet 방식 source repository container service file 특징 소스 컴파일 또는 소스 저장소를 이용함 관리 어려움 Dockerfile을 이용함 관리 쉬움 중앙에서 관리 가능
  • 35. THANK YOU ! QUESTION?
  • 36. code 䡬 discovery sample - https://github.com/subicura/ discovery-fleetd-sample 䡬 haproxy-confd - https://github.com/subicura/ haproxy-confd 䡬 whoami - https://github.com/subicura/whoami