본문 바로가기메뉴 바로가기


 

“카카오의 오픈소스를 소개합니다” 여섯번째는 niko.bellic이 개발한 Cite입니다.

Cite는 Container as a Service(CaaS)로서 소스코드를 빌드하고 배포하며 운영하는 일련의 과정을 자동화하는 웹 서비스입니다.

Introduction

Cite는 google kubernetes기반 CaaS(Container as a Service)입니다.

Kubernetes는 최근 Container Orchestrator로 각광받고 있지만 설치와 운영이 복잡하기 때문에 익혀서 사용하기 위해서는 많은 시간과 노력을 필요로 합니다.

Google Trends on Major Container Orchestrators

Cite는 이러한 어려움을 줄이기 위해 Kubernetes Cluster를 사전에 생성하고 실제 서비스 담당 개발자가 Kubernetes Cluster로 서비스 배포/롤백 등을 할 수 있도록 Kubernetes와 GitHub을 연동하였습니다.

Why Cite?

  • Fast IT
    • 더 빠르게 서비스를 생성/배포/롤백합니다. 가능한 모든 부분을 자동화!
    • 빠르게 확장(horizontal/vertical scaling)할 수 있습니다.
  • Efficient IT
    • 더 적은 하드웨어로 더 많은 서비스를 수행합니다.
    • 서비스 개발자와 SE의 인프라 관리 비용을 줄입니다.

Workflow

Cite에서의 서비스 배포는 아래의 흐름을 따릅니다.

Cite Workflow

빌드, 배포, 롤백 등 각 서비스의 상태는 github commit status와 deployment status 이벤트를 통해 처리하며, LoadBalancer는 Kubernetes를 watch하여 각 서비스의 상태가 변경될 때 loadbalancer의 upstream을 변경합니다.

Cite에서는 Kubernetes에 내장된 rolling-upgrade 베포 방식이 아닌 A-B switching방식을 선택하였습니다. A-B switching은 배포시 새 컨테이너를 모두 구동한 후 loadbalancer에서 새 서비스의 upstream을 사용하도록 변경하는 방식인데요, 이 방식은 rolling-upgrade에 비해 배포시 리소스 사용량은 많지만 배포 이후에도 일정 기간 기존 컨테이너가 구동중이기 때문에 롤백이 빠르다는 장점이 있습니다. Cite는 주기적으로 1시간 이상 사용되지 않는 – service selector에 등록되지 않은 – 컨테이너를 종료하고 있습니다.

현황 (2016.12.27)

  • Kubernetes Cluster
    • etcd, master : 물리장비 x 3대
    • nodes : 물리장비 x 10대
    • elasticsearch : 물리장비 x 4대 + 가상머신 3대
    • loadbalancer : Citrix NetScaler active/standby
  • Kubernetes Services
    • service : 184개
    • pod : 332개
  • 전체 물리장비 현황

Cite Cluster Stats

  • node 1의 24시간 현황

Cite Node1 Stats

적용 사례 : skraper (by pj.vegan)

skraper는 카카오톡, 스토리 등 서비스에서 URL을 입력받고 해당 URL을 방문하여 대표 이미지를 추출한 후 반환하는 서비스입니다. skraper는 최초의 cite를 이용한 퍼블릭 서비스로 현재 cite에서 컨테이너 5 + 10개로 구동중입니다.

Reference

See also

niko.bellic
niko.bellic
Top Tag
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
coding
competition
component
conference
consul
container
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developers
devops
digitalization
digitaltransformation
dns
docker
employeecard
eslint
Featured
friendstime
front-end
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
programming-contest
pycon
python
quagga
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
update
vim
vim-github-dashboard
vim-plugin
vue
web-cache
webapp
WebSocket
weekly
All Tag
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
coding
competition
component
conference
consul
container
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developers
devops
digitalization
digitaltransformation
dns
docker
employeecard
eslint
Featured
friendstime
front-end
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
programming-contest
pycon
python
quagga
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
update
vim
vim-github-dashboard
vim-plugin
vue
web-cache
webapp
WebSocket
weekly

위로