coreos : 설치부터 컨테이너 배포까지

35
CoreOS이용한 도커 컨테이너 배포 Docker Seoul Meetup #1 / Aug 23, 2014 by @subicura (김충섭)

Upload: chungsub-kim

Post on 15-Jan-2015

4.073 views

Category:

Technology


14 download

DESCRIPTION

CoreOS : 설치부터 컨테이너 배포까지 Docker Seoul Meetup #1에서 발표한 자료입니다. CoreOS에 대한 개념과 간단한 설명을 볼 수 있습니다. http://youtu.be/pR5MoWHPtQs 영상과 함께 보시면 더 좋습니다 :)

TRANSCRIPT

Page 1: CoreOS : 설치부터 컨테이너 배포까지

CoreOS를 이용한 도커 컨테이너 배포 Docker Seoul Meetup #1 / Aug 23, 2014

!by @subicura (김충섭)

Page 2: CoreOS : 설치부터 컨테이너 배포까지

도커로

모든 어플리케이션을컨테이너로 만든다면

MY APPRAILS NGINX

MONGODBMYSQL RABBITMQ

Page 3: CoreOS : 설치부터 컨테이너 배포까지

서버는

도커를 돌리기 위해

존재할 뿐..

Page 4: CoreOS : 설치부터 컨테이너 배포까지

Docker 구동에 최적화된

가볍고 최소화된 모던 OS

no package manager (apt/yum)

Page 5: CoreOS : 설치부터 컨테이너 배포까지

2013년 6월부터

Alex Polvi Brandon Philips

(rackspace) Michael Marineau

(google)

Chrome OS를 기반으로

몇가지 기능을 추가하고

서버로 사용할 수 있도록 커스터마이징

Page 6: CoreOS : 설치부터 컨테이너 배포까지

CoreOS 특징

A Minimal Operating System Painless Updating

Docker Containers Clustered By Default

Page 7: CoreOS : 설치부터 컨테이너 배포까지

CoreOS GUI

유료!!

Page 8: CoreOS : 설치부터 컨테이너 배포까지

CoreOS 핵심구성

etcd

systemd

fleet

+ cloud-init

Page 9: CoreOS : 설치부터 컨테이너 배포까지

install

coreos-cloudinit enables a user to customize CoreOS machines

Page 10: CoreOS : 설치부터 컨테이너 배포까지

cloud-config sample#cloud-config !coreos: etcd: discovery: https://discovery.etcd.io/<token> addr: $public_ipv4:4001 peer-addr: $public_ipv4:7001 fleet: public-ip: $public_ipv4 units: - name: etcd.service command: start - name: fleet.service command: start users: - name: core coreos-ssh-import-github: subicura

Page 11: CoreOS : 설치부터 컨테이너 배포까지

vagrant

$ git clone https://github.com/coreos/coreos-vagrant.git $ cd coreos-vagrant $ vi user-data # edit config $ vagrant up

*vagrant : Virtual Machine 자동 관리 툴

Page 12: CoreOS : 설치부터 컨테이너 배포까지

DEMO

Page 13: CoreOS : 설치부터 컨테이너 배포까지

etcd

A highly-available key value store

/services/app/app_1 {“ip”:”172.17.8.101”}

valuekey

directory

Page 14: CoreOS : 설치부터 컨테이너 배포까지

etcd

A highly-available key value store

Raft protocol

Page 15: CoreOS : 설치부터 컨테이너 배포까지

etcd

쉬운 API (HTTP + JSON)

SSL 보안

1000s of writes/s per instance

Watch (via HTTP long-polling)

Keys support TTL

Lock

Page 16: CoreOS : 설치부터 컨테이너 배포까지

DEMO

Page 17: CoreOS : 설치부터 컨테이너 배포까지

systemd나아진 init system

Fedora, Gentoo, Arch 사용중 / RedHat, Debian, Ubuntu 곧

deamonize

pid

logfile path

하기쉬움

start/stop hook, audo restart…

할 필요 없음

기억할 필요 없음

기억할 필요 없음

coordination

Page 18: CoreOS : 설치부터 컨테이너 배포까지

systemd

시작 - systemctl start [service]

종료 - systemctl stop [service]

강제종료 - systemctl kill [service]

상태보기 - systemctl status [service]

로그보기 - journalctl -u [service]

Page 19: CoreOS : 설치부터 컨테이너 배포까지

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

ExecStartPre / ExecStart / ExecStartPost / ExecReload / ExecStop / ExecStopPost / RestartSec

Page 20: CoreOS : 설치부터 컨테이너 배포까지

DEMO

Page 21: CoreOS : 설치부터 컨테이너 배포까지

fleet

etcd를 backend로

systemd에 custom configuration을 추가하여

service와 machine을 추상화하고

High availability를 구현함

Page 22: CoreOS : 설치부터 컨테이너 배포까지
Page 23: CoreOS : 설치부터 컨테이너 배포까지

fleet서버리스트 - fleetctl list-machines

유닛리스트 - fleetctl list-units

시작 - fleetctl start [service]

종료 - fleetctl stop [service]

제거 - fleetctl destroy [service]

상태보기 - fleetctl status [service]

로그보기 - fleetctl journal [service]

remote ssh-add ~/.ssh/id_rsa export FLEETCTL_TUNNEL=172.17.8.101

Page 24: CoreOS : 설치부터 컨테이너 배포까지

sample.1.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 ![X-Fleet] X-Conflicts=sample.*.service

Page 25: CoreOS : 설치부터 컨테이너 배포까지

DEMO

Page 26: CoreOS : 설치부터 컨테이너 배포까지

service discovery

Page 27: CoreOS : 설치부터 컨테이너 배포까지

service discovery

database ip와 port는 뭘까?

Page 28: CoreOS : 설치부터 컨테이너 배포까지

service discovery

app의 ip와 port는 뭘까?

Page 29: CoreOS : 설치부터 컨테이너 배포까지

service discovery

Application은 자신의 IP와 PORT를 등록(registry)하고

Load Balancer는 IP와 PORT를 발견(discovery)하여

적용함

Page 30: CoreOS : 설치부터 컨테이너 배포까지

service discovery

etcd TTL 자동으로 삭제 되는 value > 서비스가 비정상적으로 종료되었을 경우에도 체크 가능함

WATCH value 변화를 감지 > 바로바로 즉시성으로 대응 가능함

APP NGINX! !APP ip/port APP ip/port

"XXX ip/port

"NGINX ip/port

Page 31: CoreOS : 설치부터 컨테이너 배포까지

service discoveryip port 등록

# #

/services/app/app_1 { “ip”: “172.17.8.101”, “port”: “8080” }

while true; do etcdctl set /services/app/app_1 “{xxx}” —-ttl 60; sleep 45; done

Page 32: CoreOS : 설치부터 컨테이너 배포까지

service discoveryip port 발견

$

/services/app/app_1 { “ip”: “172.17.8.101”, “port”: “8080” }

설정 적용upstream web_application { <% infos.each do |info| %> server <%= info["ip"] %>:<%= info["port"] %>; <% end %> }

서비스 재시작$ nginx -s reload

Page 33: CoreOS : 설치부터 컨테이너 배포까지

sidekick[Unit] Description=Announce web_1 BindsTo=web.1.service ![Service] ExecStart=/bin/sh -c “WEB_SERVICE_IP=$(…) && WEB_SERVICE_PORT=$(…) && while true; do etcdctl set /services/web/web_1 \"{ \\\"ip\\\": \\\"$WEB_SERVICE_IP\\\", \\\"port\\\": \\\"$WEB_SERVICE_PORT\\\" }\" --ttl 60; sleep 45; done" ExecStop=/usr/bin/etcdctl rm /services/web/web_1 ![X-Fleet] X-ConditionMachineOf=web.1.service

Page 34: CoreOS : 설치부터 컨테이너 배포까지

DEMO

Page 35: CoreOS : 설치부터 컨테이너 배포까지

THANK YOU !

QUESTION?