Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Re: 運用に自動化を求めるのは間違っているだろうか

21,243 views

Published on

2016年4月23日(土)
#qpstudy 2016.04 響け!アラートコール! 発表資料
http://www.zusaar.com/event/12327003

Published in: Software
  • Be the first to comment

Re: 運用に自動化を求めるのは間違っているだろうか

  1. 1. Re: 運用に自動化を求めるのは間違っているだろうか #qpstudy 2016.04 @zembutsu Is It Wrong to Try to Automate in our System Operations? 前 佛 雅 人
  2. 2. セッション内容 • 運用における自動化範囲の整理・分類 • 自動化で運用はこんなにも楽しくなる • トラブルシューティングの自動化は未解決課題 #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか 本来あるべき状態・目的から逆算して 運用業務を楽しくしませんか? という提案、個人的な願い
  3. 3. Re: 運用に自動化を求めるのは間違っているだろうか
  4. 4. A U TO M AT I O N M Y T H 2015年7月26日 @zembutsu July Tech Festa 2015
  5. 5. 脱・刺身タンポポ 脱・写経文化 主張:自動化で仕事を楽しくしよう http://www.slideshare.net/zembutsu/automation-myth-we-can-advance
  6. 6. 環境構築と自動化 ■□□ いかにアプリケーションを速く正確にデプロイするか そのためには環境構築を速く正確に Chapter1 #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか
  7. 7. 環境構築(開発→運用) 開 発 チ ー ム 運 用 チ ー ム リソース 要求 設計 環境構築 アプリの デプロイ デプロイ 調整 デプロイ 調整 依存関係 セットアップ 依存関係 発見 N 回ループ アプリの デプロイ完了 監視設定 仮想化 クラウド・コンピューティング 監視自動設定 構成管理ツール 速さ・正確さ
  8. 8. 環境構築(開発→運用) 開 発 チ ー ム 運 用 チ ー ム イメージ 構築 レジストリ 登録 構成情報 設計 デプロイ アプリの デプロイ完了 監視設定 速さ・正確さ
  9. 9. 速さ・正確さ
  10. 10. ライブ・デモ
  11. 11. 11 ‣ Dockerfile ‣ イメージを構築 ‣ コンテナの起動 Apacheのコンテナを立ち上げたい FROM httpd:2.4 COPY ./public-html/ /usr/local/apache2/htdocs/ $ docker build -t myapache: . $ docker run –d –p 80:80 myapach
  12. 12. 12 ミラーサイトを作る ‣ wget コマンドでサイトのミラーを作成 ‣ Dockerfile を編集 ‣ イメージの構築 ‣ コンテナの実行 $ wget -r-l 1 http://docs.docker.jp FROM httpd:2.4 COPY ./docs.docker.jp/ /usr/local/apache2/htdocs/ $ docker build -t mymirror: . $ docker run –d –p 81:80 mymirror
  13. 13. 13 Redmine redmine: image: redmine links: - db:postgres ports: - 8080:3000 db: image: postgres environment: POSTGRES_PASSWORD: example POSTGRES_USER: redmine
  14. 14. 14 WordPress wordpress: image: wordpress links: - db:mysql ports: - 8080:80 db: image: mariadb environment: MYSQL_ROOT_PASSWORD: exam
  15. 15. 15 Rocket.chat mongo: image: mongo command: mongod --smallfiles --oplogSize 128 rocketchat: image: rocketchat/rocket.chat:latest environment: - PORT=3000 - ROOT_URL=http://localhost:3000 - MONGO_URL=mongodb://mongo:27017/rocketchat links: - mongo:mongo ports: - 3000:3000
  16. 16. 16 version: '2' services: zabbix-db: image: zabbix/zabbix-db-mariadb volumes: - zabbix-db-storage:/var/lib/mysql - backups:/backups - /etc/localtime:/etc/localtime:ro environment: - MARIADB_USER=zabbix - MARIADB_PASS=my_password zabbix-server: image: zabbix/zabbix-3.0:latest depends_on: - zabbix-db ports: - "80:80" - "10051:10051" volumes: - /etc/localtime:/etc/localtime:ro links: - zabbix-db:zabbix.db environment: - ZS_DBHost=zabbix.db - ZS_DBUser=zabbix - ZS_DBPassword=my_password volumes: zabbix-db-storage: driver: local backups: driver: local Zabbix 3.0
  17. 17. OS ( Linux ) 物理/仮想サーバ Docker エンジン ( docker デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート APIdocker クライアント ・docker コマンド Linux, Mac OS X, Windows ・Kitematic (GUI) Mac OS X, Windows ・Docker Compose ・Docker Swarm TCP あるいは Unix ソケットドメイン
  18. 18. Docker コンテナ
  19. 19. httpd PID 1 コンテナA コンテナB ruby PID 1 chris.rb PID 2 コンテナのプロセス
  20. 20. httpd PID 1 コンテナA コンテナB ruby PID 1 chris.rb PID 2 コンテナのプロセス/sbin/init PID 1 docker PID 4 httpd PID 5 ruby PID 6 chris.rb PID 7 alice PID 2 bob PID 3 PPID 1 PPID 1 PPID 1 PPID 4 PPID 4 PPID 6
  21. 21. コンテナのファイルシステム コンテナAのファイルシステム … … コンテナBのファイルシステム /etc /bin /etc /bin / /
  22. 22. コンテナのファイルシステム コンテナAのファイルシステム … … コンテナBのファイルシステム /etc (/data/ubuntu/etc) /bin (/data/ubuntu/bin) /etc (/data/centos/etc) /bin (/data/centos/bin) / / / /etc /data /data/ubuntu /data/centos /bin
  23. 23. $ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 203137e8afd5: Pull complete 2ff1bbbe9310: Pull complete 933ae2486129: Pull complete a3ed95caeb02: Pull complete Digest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814 Status: Downloaded newer image for ubuntu:latest/ レイヤごとに 並列ダウンロード
  24. 24. $ docker pull wordpress Using default tag: latest latest: Pulling from library/wordpress fdd5d7827f33: Already exists a3ed95caeb02: Download complete 8c80f2e38113: Download complete 2da85bfb1ac0: Download complete 1da50ec818af: Download complete b2799c7ad5c9: Downloading 1.113 MB/2.844 MB 4893554c0107: Download complete b1d739e1b940: Waiting bd103e3f6195: Waiting aa560ff33ce6: Waiting 1deabfa10759: Waiting 91e6991f7a34: Waiting 7234c82b998e: Waiting 6bf8bdf2e550: Waiting a5c7e6ead07c: Waiting fe011342f195: Waiting c6dd706ba27e: Waiting 35d564cafd69: Waiting 730edfa5d07f: Waiting Digest: sha256:bfd7e102741d73cce4ec58b2d937586c670f31df1c80aeaf4d5c525eb3c6ac06 Status: Downloaded newer image for wordpress:latest ダウンロード済みのレイヤ なので再取得しない ダウンロード中 ダウンロード済み ダウンロード待ち
  25. 25. docker クライアント docker エンジン $ docker run hello-world run docker run hello-world オペレーティング・システムに 対して docker プログラムの 実行を伝える Docker に対してコンテナに 読み込むイメージの情報を 伝える Docker コンテナを 作成・実行するため のサブコマンド
  26. 26. docker クライアント docker エンジン $ docker run hello-world run Docker Hub pull レジストリ latest イメージ タグ hello-world レポジトリ • Docker Engine は「docker run」実行時にローカルにイ メージがなければレジストリ (DockerHubが標準)から イメージをダウンロードする。 そのため初回実行時は時間 かかる場合がある。
  27. 27. docker クライアント docker エンジン $ docker run hello-world run Docker Hub pull レジストリ latest イメージ タグ hello-world レポジトリ • Docker Engine は「docker run」実行時にローカルにイ メージがなければレジストリ (DockerHubが標準)から イメージをダウンロードする。 そのため初回実行時は時間 かかる場合がある。 latest イメージ タグ “読み書き可”なレイヤ 読み込み専用 latest
  28. 28. docker クライアント docker エンジン $ docker run hello-world run Docker Hub pull レジストリ latest イメージ タグ hello-world レポジトリ • Docker Engine は「docker run」実行時にローカルにイ メージがなければレジストリ (DockerHubが標準)から イメージをダウンロードする。 そのため初回実行時は時間 かかる場合がある。 latest イメージ タグ latest コンテナ化した hello-worldの実行 Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/userguide/ コンテナに対してリソース制限が可能
  29. 29. 速さ・正確さ
  30. 30. トラブルシューティングと自動化 ■■□ いかに速く正確に状況把握・復旧するか 仮想化やクラウドでスケールした環境でも対応するには Chapter2 #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか
  31. 31. トラブルシュート(運用・監視) 開 発 チ ー ム 運 用 チ ー ム 運用開始 (正常運用) 異常検出 アラート 障害 報告書 N 回ループ 障害復旧 状況確認 原因特定 復旧作業 調査 再発防止策 運用・監視ツール 時系列リソース監視 ログ監視 自動復旧支援 自動設定変更
  32. 32. ところで、あなたの所のサーバ 重いんだけれど
  33. 33. 水 金 地 月 火 木 土 天 冥 海 Mercury Venus Earth Moon Mars Jupiter Saturn Uranus Pluto Neptune コンピュータ資源が 貴重だった時代 コンピュータ資源が 空気のような時代 物理サーバ PC クラウド コンテナ IoTデバイス
  34. 34. 救急救命・医療モデルを 障害対応に応用できる(仮説)
  35. 35. サーバや機器 Servers, Routers, Appliances… 人間 as we, Human 最近、サーバの 様子がちょっと おかしいのだが 最近、頭が 痛いんです… Doctor ・血液検査 ・レントゲン ・触診 Operator ・ログ確認 ・コマンド実行 ・各種調査 メモリ足りない 貧血ですね
  36. 36. http://www.flickr.com/photos/changereality/9221281165 by Warner Vermaak
  37. 37. サーバや機器 Servers, Routers, Appliances… 人間 as we, Human … system halt Kernel Panic! ……。 (返事がない) DoctorOperator ・Reboot サーバ停止は心停止!原因特定よりも蘇生を! これはいけないこれはいけない
  38. 38. ………… ………… ………… ……… ……
  39. 39. 心臓は正常 脳死状態 死活監視は正常 サービスは停止状態 致命的な障害 PING サービス障害 HTTP サービス障害 SSH 軽度の障害 HTTP 軽度の障害 SSH 軽度の障害 ICMP
  40. 40. 致命的な障害 PING サービス障害 HTTP サービス障害 SSH 軽度の障害 HTTP 軽度の障害 SSH 軽度の障害 ICMP {Base Template:icmppingloss[,5,,,].last(0)}>50 | {Base Template:icmppingsec[,5,,,,].last(0)}=0 依存関係付きテンプレート {Base Template:net.tcp.service[http,,80].count(5m,0)}>3 & {Base Template:net.tcp.service[http,,80].last(0,300)}=0 {Base Template:net.tcp.service[ssh,,22].count(5m,0)}>3 & {Base Template:net.tcp.service[ssh,,22].last(0,300)}=0 {Base Template:net.tcp.service[http,,80].last(0)}=0 {Base Template:net.tcp.service[http,,80].last(0)}=0 {Base Template:net.tcp.service[ssh,,22].last(0)}=0
  41. 41. http://www.flightradar24.com
  42. 42. 管制塔 レーダー 管制官 ・肉眼での監視限界 ・山の裏側、夜間も見える ・より正確な位置・高度・時系列の位置把握・記録 ・正確な状況判断と的確な指示 Control Center Operator RADER ( radio detection and ranging)
  43. 43. ZabbixのLLD 中央集権モデル Consulのサービスディスカバリ 非中央集権モデルアンチ・エントロピー 監視間隔や監視性能は Zabbixサーバに依存 個々の監視対象(サービス)や間隔は エージェントが定義 秒単位で数千ノードを一斉管理 KVS サービス カタログ ・HTTP ・API ・DNS Anti-Entropy - Consul by HashiCorp https://www.consul.io/docs/internals/anti-entropy.html
  44. 44. KVS 運用担当 サービス・ディスカバリ機構Zabbix API GW Zabbixとサービス・ディスカバリを連携する、トリアージ的運用支援モデル API サービス・カタログ ホスト名・IPアドレス・サービス名等 トリアージ 優先度の判断支援 管制塔 Control Center レーダー Radar (radio detection and ranging)
  45. 45. 自動化の価値は ■■■ どうやって向き合えばいいのか? Chapter3 #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか
  46. 46. 個人的な主張 • ツール導入(自動化)が目的化すると 皆が不幸になる のではないでしょうか。 例:コスト削減・工数削減のためのコンテナ化や自動化は、開発・運用の両チームに 業務フローの変更が必要になる場合があり、意図しないコストを生む可能性。
  47. 47. 自動化でポイントだと思うところ • 仮想化やクラウドなりコンテナへの対応は、 全ての解決に結びつかない。 • 局所最適化は避けた方が良いのでは。 • 目的を見失わないこと。 ・
  48. 48. 暗黒^H^H物理時代 仮想化・クラウド時代 コンテナ時代 機 材 発 注 機 材 納 品 設 置 機 器 設 定 事 前 設 計 ク リ ッ ク 見 積 も り O S 設 定 環 境 構 築 試 験 利 用 開 始 試 験 開 発 試 験 運 用 利 用 開 始 … … 事 前 設 計 ク リ ッ ク 試 験 利 用 開 始 … 事 前 設 計 ク リ ッ ク 試 験 利 用 開 始 … 開 発 段 階 検 証 段 階 本 番 段 階 すべてを迅速に、一貫した環境で行いやすい← New
  49. 49. • Docker • コンテナにはアプリケーションに 依存するバイナリとライブラリのみ • 数百MB程度~のコンテナ • 他のコンテナ間で kernel を共有
  50. 50. ???「すべてがコンテナになる」
  51. 51. 物理サーバ 仮想化 クラウド コンテナ DockerDockerDocker
  52. 52. 61 利用シーン 開発 運用 評価 ステージによって異なる TASK devチームの範囲 opsチームの範囲
  53. 53. 62 利用シーン 開発 運用 評価 TASK TASK
  54. 54. 63
  55. 55. 個人的な主張 • 「自動化」を導入するだけでは価値を生まないのでは。 • 「自動化」は技術選択要素の1つにすぎないので、 業務フローに一致するなら、導入してはいかがでしょうか。 • 楽しくやりませんか。 ・
  56. 56. セッションの振り返り • 運用における自動化範囲の整理・分類 • 自動化で運用はこんなにも楽しくなるかも • トラブルシューティングの自動化は未解決課題 #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか 本来あるべき状態・目的から逆算して 運用業務を楽しくしませんか? という提案、個人的な願い
  57. 57. 何か気になることはありますか? #qpstudy 2016.04 Re: 運用に自動化を求めるのは 間違っているだろうか
  58. 58. 67 私は誰? ‣ @zembutsu a.k.a. 前佛雅人 - Technology Evangelist; Creationline, Inc. – 2 yrs - Technical Trainer; Docker Authorized Trainer – 0.8 yr - Data Center Operations Engineer – 15+ yrs 興味:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信 - SlideShare http://slideshare.net/zembutsu - Blog http://pocketstudio.jp/log3 Why am I here? +MasahitoZembutsu https://twitter.com/creationline

×