PhpStormと僕

日々周りを巻き込むことをモットーに。気まぐれでJetBrains製のIDEネタとか書いてます。

CoreOS Meetup Tokyo #1 に参加してきた #coreosjp

参加してきたので個人的メモをまとめました。 k8sは自分で触ってなくて、調べながら聞いてたのでほとんどメモ取ってません。 最後に個人的な所感をまとめてます。

Opening & Overview of CoreOS (@deeeet)

speakerdeck.com

CoreOSとは

Motivation

  • インターネットのセキュリティを根本的に改善したい
    • 常にソフトウェアをupdateを出来る仕組みを持つOS

特徴

  • Minimal(シンプル)
    • No package manager
    • No language runtime
  • Update System
    • Omaha(OS自身のBlue-Green Deployment)
  • Container
  • Clustering
    • Data Center as a Computer

提供している機能

  • etcd
    • 分散型KVS
  • fleet(flt)
    • 分散initシステム
    • etcdで作ったクラスタに対してスケジューラ的に
  • Rocket(rkt)
    • AppC runtime
  • flannel
    • kubernetes

Latest News

  • TECHTONIC
    • CoreOS Stack + Kubernetes
    • 商用パッケージ

CoreOS/Rocket (@mopemope)

www.slideshare.net

rktとは?

  • Application Containerを動かすためのもの
  • 2つのコンポーネントを持つ
    • Application Container Executor(ACE)
    • Metadata Service
      • コンテナ外にCredential情報を置く仕組み

キーワード

  • App Container Image
  • App Container Image Discovery
    • イメージを配信するための仕組み
  • App Container Pod
    • Containerをひとまとめにする仕組み
    • まとめて配信
  • App Container Executor
 - Runtime

Manifest

  • jsonで持つ
  • pod manifestも同様

Dockerとの違い

Composable

  • no central daemon
  • docker formatではなく共通formatでupload/download

Security

  • イメージを暗号化、認証

Image distribution

rktでできること

  • Application Container Imageをダウンロード
    • Docker imageもDL化
  • セキュリティ証明書
  • コンテやなPodを立ち上げる
  • 動いているコンテナの中に入れる(Docker exec的な)
  • Private network
    • private(NAT)
    • bridge
    • macvlan
  • Metadata Service

CoreOS OEM on NIFTY Cloud (@higebu)

www.slideshare.net

  • 爬虫類大好き

CoreOS OEMとは

  • CoreOSをいろんなプラットフォームで動かせる仕組み
  • Nifty Cloud
    • Community-Supported Platformsの中

      CoreOSのOEMをするには

  • 自身のプラットフォームで動くイメージを作成するための修正をPRしてMergeしてもらう
  • ドキュメントを書いてPRしてMergeしてもらう

OpenShift v3 でDockerのPaaSを作る話 (@jacopen)

www.slideshare.net

OpenShiftの機能

  • Kubeternetes
    • 適した場所へコンテナを配備(スケジューリング)
    • Docker image指定してのデプロイ
  • Multi Tenant
  • source-to-image
    • githubのURLからdocker buildしてregistryに送る→kubernetesが配備
  • Request Routing
    • HAProxy
  • Trigger

まとめ

  • OpenShift3=Docker+Kubernetes+PaaSの機能
  • PaaSとしてはまだまだ未完成
    • 現時点ではβ
    • 正式リリースは2015夏くらい?

OpenShiftの構成

  • docker
  • kubernetes
  • PROJECT ATOMIC
    • 今回CoreOSで動かした

CoreOS運用の所感 (@spesnova)

speakerdeck.com

  • CoreOS on EC2
  • 画像リサイズのホストに使っている
  • &ElasticSearch

デプロイ

  • ELB配下でBlue-Green

ログ

  • logentries
  • systemdのjournalを全部送る

モニタリング

  • Datadogを全台に

etcd / fleet

  • 全部使っていない
  • ダイナミックオーケストレーション
    • リソースマネジメントは?
  • 使っていなくてもメリットはある
    • ホストマシン構築タスクはほぼない
    • AMI焼く必要すらない
    • コンテナとホストの分離が楽

自動アップデート

  • 今はオフ
    • 今は手動アップデート
  • locksmith(依存でetcd)が必要
    • etcdの安定運用が前提条件

遭遇した問題

  • CoreOSがEC2でクラッシュ

CoreOS channel選び

  • alphaは品質的にalphaではない
    • アップデートの頻度を表している
    • ただしalphaは致命的なアップデートもくる

やりたいこと

  • Opsボトルネックでスピード感落としたくない
    • セルフサービス化で対応
      • DevがDockerfileを書く、イメージをビルド
      • Devがコンテナをデプロイ
    • Dev, Opsをいい意味で分離
      • Opsはプラットフォーム側を
      • Devはコンテナ内部に責務を持つ

まとめ

  • etcd, fleetオフでもメリットある
  • もちろんバグもある
  • Ops behind the APIにチャレンジ

Docker + Checkpoint/Restore (@kawamuray)

  • Checkpoint/Restore(CRIU)を用いてコンテナの起動を高速化

Checkpoint/Restore(CRIU)

  • VMのスナップショットみたいなイメージ

使い道

  • Startup acceleration
  • Live migration

使う目的

  • 起動の遅いサービスの高速化
  • リソースの効率の最大化
    • n台のサーバで構成されるPaaSクラスタのサービスキャパシティの最大化
    • かつ低コスト

Kubernetes on CoreOS (@ianmlewis)

Kubernetesとは?

  • クラスタのマネジメントシステム
    • 0.14.2 released
    • 200over contributors


#### Labels - Podに対して付ける

Kubetenetes on CoreOS

  • kubernetes-apiserver
    • kube-controller-manager
    • kube-scheduler

CoreOSで運用する際に考えないといけないこと (@harukasan)

pixivにおけるCoreOS

  • Release 554くらいから使い始めた
  • IDCFクラウド上に構築
  • pixivマンガで使用中
    • Scala / PlayFramework & Docker

デプロイ

  • fleetctlをキックしてquay.ioからpullしてデプロイ
  • デプロイ職人によるローリングデプロイ
  • コンテナの外の状態を気にする必要がない
    • 依存関係をOpsではなくDevの人が管理できる

モニタリング

  • dd-agent

なぜCoreOSを採用したか

  • アプリケーショの依存管理をコンテナ内に閉じ込めたかった
  • コンテナしか動かさない運用をしたい
  • なるべく状態を気にしたくない
    • Immutable
      • コンテナの状態は変えない
    • Disposable
      • コンテナをいつでも捨てることができる

        CoreOSをどう捉えているか

  • systemd + etcd/fleet/docker
  • サービスの管理はすべてsystemd
    • だいたいのことはsystemdがやる
  • fleetを使ってデプロイ
  • 開発時のDockerコンテナを動かすインスタンスとして便利

CoreOSを使う上で考えないといけないこと

  • 外部に依存しない状態を作るか
    • まだうまい方法が見つかってない
  • デプロイメント
    • fleetだとローリングリスタートできない
  • システムオーケストレーション
    • fleetでできるのは「このsystemdのサービスをクラスタ内でいくつ動かすか」
      • このサービスメンバをオートスケーリングとかは管理できない
      • kubernetesならできそう
  • etcdにおける最小構成
    • 最低4台
    • 3台だと1台落ちるとスプリットブレインが起こる
  • コンテナに対するロードバランシング
    • コンテナのstart/stop時にLBのAPIを叩く
    • etcdはキーが変更されたときにフックできるので、それをフックにしてLBの設定を変更
  • モニタリング
    • コンテナごとにモニタリングしないといけない
      • コンテナ名つけずにやるとデプロイごとにモニタルング対象が増えていく
    • DataDog
    • なにをモニタリングしないといけないか
      • サービスレベル
      • ノードレベル
      • コンテナレベル
      • 本当に全部見ないといけないか?
  • ログ転送
    • 各ノードにtd-agentを立てている
    • ※CoreOS上にtd-agentインストールして動かしてるっぽい?
  • 障害対応
    • 今のところホスト依存の障害は遭遇していない

個人的所感

  • rktはimage distribution周りの自由度が高い分、本番運用を考えた時にイメージの取り回しや配信でとても悩みそう
  • CheckPoint/Restore(というかCRIU)の話、色々すごすぎてついていけなかった
  • Kubernetes周りは自分で触ってないのでほとんどついていけず... いきなり本番で使うのは厳しいっていう話を @spesnova さんも話していた。とはいえうちもずっとCapistrano使い続けるのはどうなのかなあっていう感じだったので試してみる。
  • DevとOpsをいい意味で分離という切り口は確かにとてもおもしろい。今までDockerを触ってこなかったエンジニアへのアプローチにもなる。
  • そういえばうち今CoreOSはalphaチャンネルのもので動かしてた。@spesnovaさん曰くCoreOSのチャンネルは現状beta使うのが良さそうとのこと。チャンネル周りはalphaもstableも一長一短で消去法的にbetaしかない、っていう現状が結構つらみ。