めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

Docker Meetup Tokyo 第4回に参加しました #dockerjp

1月17日に「Docker Meetup Tokyo #4」に参加してきました。ここ1〜2年ぐらいで、Dockerなどのインフラに関する技術が変化してきたことをキャッチアップ出来ないでいたので、コミュニティーも含めて知りたかったので助かりました。

f:id:d4-1977:20150117233148j:plain

CoreOSの基礎/CoreOSに期待すること

資料

Docker が与えたくれたもの

  • Googleなど、インフラの選択肢を与えてくれたもの

Docker が与えてくれないもの

CoreOS 特徴

  • minimal
  • RAMの使用量は114MB
  • 機能をそぎ落とし
  • Update System
  • 安全かつ容易なOSアップデート機能
  • 設定値etcd
  • Chefとかも使わなくていい?
  • Clustering
  • Data Center as a Computer

CoreOS 技術

  • etcd
  • 分散キーバリューストア
$ etcdctl

fleet

  • 分散 init system
  • Docker コンテナのスケジューリング、デプロイ
  • Docker コンテナの状態を監視する
  • systemdのUnitファイルの拡張

xfleet

cloud-config

  • CoreOSの初期化

利点

  • オケーストレーション
  • etcd
  • サービスディスカバリー
  • etcd, fleet
  • 死活監視
  • fleet
  • Docker
  • cloud-config
  • PlaystatinのチームのYouTubeの動画


PlayStation: Developing Applications on CoreOS ...

運用

クラスタの構築

  • DigtalOcean, Amazon EC2, などで動作する
  • TERRAFORM
  • インフラの起動、連携
  • TERRAFORM + CoreOS
  • メンバーの増減管理を楽に

スケール

デモ

  • LBの設定の動的な書き換え
  • ELBみたいな感じ?
  • アプリけーしょんサーバー

WebアプリケーションにおけるDockerパフォーマンスチューニング

Docker Engin上でアプリケーションを動かして性能劣化しないの?

  • Docker デーモンでの話

Linux コンテナ

Linux Contaniners

  • Hypervisorのように各リソースを二重管理しなくて良い
  • コピーオーバーヘッドを少なくする実装はある
  • Linux Contaninersだとシングルカーネルで速い

UNION Filesystem

  • Write I/O 最上層まで
  • Read I/O 深いところまで
  • Docker では UNION Filesystem を選択できる
  • Storage drivers
  • Device Mapper

Volume

  • コンテナ間でディレクトリーを共有するためのもの
  • I/O要求が UNION Filesystem を通らない

Dcoker Network

  • Portmapper
  • コンテナ間での通信や、コンテナ・ホスト間通信

HOST Networking

  • docker run するときに使う

Docker のパフォーマンスにおいて重要なことはなにか?

ISUCON

  • ISUCON のアプリ
  • ISUCON 4 の予選
  • m3.xlarge

Dcoker化する

  • NginxとMySQLをそれぞれDocker化
  • Nginx だけDocker 化
  • MySQL だけDocker 化
  • MySQL だけをDocker化
  • VolumeをON/OFFで変わらない

ネットワーク

  • NAPTの高速化
  • 127.0.0.1 だとDocker のチェーンにはいらない
  • ISUCONはlocalで試していた
  • なぜuserland の proxy がいるのか?
  • Portmapperが重要

Mackerel

  • Mackerel の話。鯖の押しずし

Amazon EC2 Container Service(ECS)

  • @
  • id:shot6
  • アマゾンの人
  • ソリューションアーキテクト、絶賛採用中!

ECS

  • EC2クラスタ上にDockerコンテナを起動/管理するサービス
  • Docker管理を便利にする

ECSの考えかた

  • コア部分
  • Docker ピュア環境をより生キュアに使える
  • AWSのサービスとインテグレーションする

ステータス

  • ECS自体は無料
  • アメリカのみ

ECSの仕組み

コンテナインスタンス

  • EC2、Docker、ECS agent
  • Amazon EC2 Container Service Agent

ECS agent

Cluster

  • リソースプー
  • リージョンに閉じている
  • Container Instanceのプール

Task

  • 関係するコンテナの集合
  • WordPressのコンテナとMySQLのコンテナ
  • Task Definition
  • json

ECSの良い点

  • AWSのセキュリティ機構が使える
  • 今までのノウハウを無駄にしない
  • パブリックリポジトリでも、プレイベートなリポジトリでも
  • AWSのサービスをそのまま利用できる
  • AWS + でできる

ECS command line

$ aws ecs
  1. クラスタ(cluster)を作成
  2. EC2をコンテナインスタンスとして起動
  3. Task Defintion を作成
  4. インスタンスを確認する
  5. Container Instance の状況を確認する
  6. Task Defintion を作成/登録/確認
  7. Task を走らせる(EC2のスケジューラーに任せる or 自分でしたコンテナインスタンス上に登録)

  8. clusterArm:Amazon固有の記法

  9. aman-ami-2014-09を利用
  10. マルチAZにあるのも利用可能

スケジューラーの拡張

  • 現状のECSでは
  • ECSは各コンテナの状態管理

Taskを取り除く

  • AutoScale との連携は、まだ

ECSの用途

  • Dev & test
  • Auto deployment
  • Microservices
  • Batch processing
  • 社内 PassS/Sass の提供

今後の予定

  • パートナーAMI
  • CloudFormationでECS用コンテナインスタンス起動が稼働
  • ELBインテグレーション
  • CloudWatch

まとめ

  • EC2上でDockerコンテナを運用するため
  • コア部分はピュなDocker
  • プレビューは試せる。24時間ぐらいで返信あり

Kubernetesの機能とデモ、開発体制について

仕事したくない

Kubernetes

サポート

  • いろんなところで動く
  • AWSとかGoogle Computer Engineとか

3つの提供するモノ

  1. サービス
  2. レプリケーションコントローラー
  3. Pod

レプリケーションコントローラー

Pod

  • コンテナではない
  • コンテナとコンテナを合わせたもの
  • 同じインスタンスで動かしたいもの

デモ

  • 3台のマシン

Architecture

Networking

  • 同じポートを使うアプリケーションがあってもiptableを利用して自動調整してくれる
  • Googleでは、数千台で同じようなことをしている

Impression

  • テクノロジーとしては普通
  • やろうと思えばできるけれどわりと大変、というのをやってくれるのが、キュウべえ
  • バグ報告しようとしたら、わりと直ぐに直っている
  • 他のオープンソースも利用している
  • Fluentdでログ集計、SkyDNS
  • 自分で全てやろうとはしていない

Whats happening(最近見ていて気づいたこと)

  • internal DNS
  • Namespaces
  • Master as a Service
  • Bootstrap
  • Easier Setup
  • Google の公式見解ではないです

cgroupによるリソース隔離入門

資料

Cgroup

  • Cgroup を使って Docker コンテナの管理
  • プロセス(タスク)をグループ化
  • グループ内のプロセスに対してまとめてリソース制限
  • プロセス稼働中でも制限は可能
  • http://gihyo.jp/admin/serial/01/linux_containers
  • Docker から直接指定できる
  • CPUなどに限られる
  • Docker のグループを見つけたkら直接指定することができる!
  • cgroup の知識が必要
  • systemd配下でdockerが動いている場合
  • cgropuの管理はsystemd経由
  • docker で指定
  • cgroupfs で指定
  • systemd で….

Docker on RHEL & Project Atomic 入門

資料

FedoraRHELCentOSの比較

  • Fedora
  • RedHatEnterpriseLinux(RHEL:レル)
  • 企業向け。サポートあり
  • CentOS

Red HatとDockerの関係

  • RHEL7 ではDockerが正式サポート
  • ただし条件あり
  • Extrasチャンネルで提供する
  • ミッションクリティカル非推奨
  • サポートが限定的
  • RHEL 7.1からは外れる予定
  • コンテナの互換性
  • ホストはRHEL 7
  • コンテナはRHEL 6以上
  • x_86のみ

Getting Started with Docker

Project Atomic とは?

Ubuntu Core の違い

Atomic Core との違い

  • ライバル
  • 標準ツールが少し違う
  • 思想が少し違う
  • Core OS 一からコンテナのために出発
  • AtomicHost:既存OSをコンテナのために最適化

RHEL と AtomicHostの違い

  • yumがない
  • OS自体はrpm-ostreeでupgrade/rollback
  • Docker, etcd, Kubermetesが標準で入る

リソース消費量を比べてみた

CentOS Atomic Host

  • CentOS
  • Docker, Kubernetes, Cockpit, Etcd, cloud-initが入っている
  • KVMで使うか、変換して使う

用意するファイル

  • ファイルをisoにする
  • init.isoを起動時にcloud-init

Vargrant で CentOS Atomic

ログの追跡

デモ

まとめ

  • Atomic Hostはコンテナ向けOS
  • Docker, Kubernetes, Etcdが標準で入っている
  • Cocpit
  • 平文のパスワードを送るのがイヤ
  • RHAL Atomic Hostと、CentOS Atomic Host は別

Docker at Wantedly

  • @
  • 披露宴の途中でした...
  • Wantedly
  • Vimerだけれど、Atomの記事がQiitaで人気

Wantedly について

  • 15万ユーザー
  • 5,000社
  • 30人ぐらいの会社

2011〜2014夏 Heroku

  • web
  • worker
  • スケージュール
  • On-Off

他はAWS

  • Search
  • DataBase
  • Strageなど
  • Chefで管理

Saas

  • NewRelic
  • DNSsimple

git

  • GithubFlow

Heroku

  • デプロイ速い(2分)
  • スケール速い(1分)
  • Dynoの操作簡単
  • 東京リージョンない

2014年夏

検討

  • Elasitc Beanstalk
  • Chef with Docker

など

結果

  • Capistrano3
  • Chef
  • Packer

Docker レジストリ

デプロイ

  • Dcokerfileでビルド
  • Ningx で新旧コンテナ切り替え

Datadogでモニタリング

Logentries gem で ログ収集

Dcokerfileそのまま使おう

  • Chef + Packer でビルド
  • キャッシュほしい
  • 必要なツールが多い
  • Dockerfileで書くのは辛い複雑なアプリケーション
  • おそらくコンテナに向かない
  • VM向きかも
  • 小さいアプリケーション向きなんだと思う
  • シンプルさを保つための制約を受け入れる

Dcokerホスト

  • 軽量に保とう
  • ホストはAMI焼いている
  • なにか変えたい
  • ホストにいろいろ入れていると単純に管理台数倍増

herokuから学ぼう

  • on-offコンテナという使い方
  • 設定は環境変数で渡す
  • コンテナを乗せる基盤に必要なもの

そのほか

  • 1コンテナ1プロセス
  • ログはstdout/stderrへ
  • モニタリング・ログ収集は専用コンテナ
  • restartオプション使う
  • できるだけ全てコンテナでやる
  • Private Registry オススメしない

2015冬

  • CoreOS導入
  • capstranoは台数が増えると重い

nginx-image-server

kujira

まとめ

  • 自動アップデート不安定
  • 迷ったらシンプルな方

Development and Deployment with Docker at Dwango

資料

レコメンドAPI

  • cassndra
  • 実際の環境で確認したい!
  • pull request したらすぐに動いているので確認できる
  • jenkns の pull request builder を利用
  • Chefを後からDockerにするのは大変
  • 既存のプロダクトは大変
  • Deploy
  • Capstrano

Google Container Engineについて

GCA update

  • Google Container Engine はコンテナ
  • GKE
  • 商用版のキュウべえ
  • アルファ版だけれど、今後はGoogleのLBに入る
  • fluentd + kubernetes
  • ログの機能の比較資料がGoogleにある
  • Google Cloud Logingサービス
  • Big Queryなどの連携を予定している
  • ログコレクターとしてfluentd

Datadog

  • Datadog のほったさん

コンテナの状況の把握

  • コンテナの状況の把握ができているか?
  • Docker Use Cases
  • 今まで以上に短いサイクルで動き続ける部品群
  • Docker ののインスタンス
  • CPUの計算力を中心としたmの
  • 平均5つコンテナ/Docker
  • 導入の初期では?
  • visibilty

モニタリング

  • モニタリングの仕組みは最初から必要
  • cgroup
  • cAdvisor
  • Dockerレイヤーから抜いている
  • Memoy cpu I/O Network
  • run & stopped
  • 自作:cAdvisor, InfluxDB, Grafana
  • プロプラ:sFlow, Datadog
  • Dockrの導入には準備が必要
  • 監視を真剣に考える
  • @

共用スパコンシステム上でデータ解析 with Docker

  • @
  • データからの研究再現性が大切!
  • 自分ができても、他の人もできないとだめ!

資料

TBD

Docker API を GO から使う

Docker Remote API

  • KubernetesなどもDocker Remote API を使っている

Go Docker Client

Docker/ECSでIAMロールを利用する

グレデンシャル管理

GitのコミットごとにQA環境を作成するプロキシを作ってみた

$ vargrant dns —install
  • vargrant dns というプラグインがあり、名前解決する
  • Pull Request に反応してURLを貼るbot

Docker でやってみた理由

  1. 安い
  2. 速い
  3. うまい

prevs

tutumで雑に包んで雑にデプロイ

tutum

  • Dockr as a Service