チームでChef Serverを運用するには
2014/02/20 gumi study #18
Chef Server運用してます(小声)
Chefを扱うにはスキル必要?
Yes
Chefを扱うには超高難度スキル必要?
No
メンバー全員がちゃんと扱えている?
…(´・ω・`)
Chef自体の詳細な技術的内容

^
チームでChefを運用するときに注意する所
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
自己紹介
• 本間 知教(ほんま とものり) @CkReal
• 株式会社gumi
•

System Operation Engineer

• 国内アプリの運用+社内の開発体制改善活動?
• 非リア充担当
• 好きなChefのリソース:template
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
チーム業務概要
7%3%
15%
50%
25%

各環境のサーバ構築
サーバ(+AWS)障害対応
SWの技術検証
開発支援ツール運用
アプリ負荷試験
チーム業務概要
7%3%
15%
50%

各環境のサーバ構築
サーバ(+AWS)障害対応
SWの技術検証
開発支援ツール運用
アプリ負荷試験

25%

この部分の効率化は必須
Chef導入前(~2012)の業務状況
• Puppetを使っていた時期もあった
• AMIをベースにサーバ数十台をセットアップ
•

本番環境のEC2は、十数台∼百数十台

• チームメンバーのスキルセットは様々
•

psshを利用して、複数サーバのセットアップ
Chef導入前(~2012)の業務状況
• Puppetを使っていた時期もあった
• AMIをベースにサーバ数十台をセットアップ
•

本番環境のEC2は、十数台∼百数十台

• チームメンバーのスキルセットは様々
•

psshを利用して、複数サーバのセットアップ

(力技で)何とかしていた
何が問題だったか
• AMIのブラックボックス化
•

歴史的経緯による、職人AMIが生まれやすい

• 構築ドキュメントの管理
•

更新されないドキュメントは滅びてしまえばいい

• 誰が/いつ/どのように/サーバを準備したかが不明
•

後から他メンバーが追いきれない
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
Chefの導入経緯
• チームメンバーが増えた
•

攻めの運用体制を作ろう!!

• 数百台のサーバを一元管理しやすいプロダクト
•

Chef Server 11が出た時期もあり、Chef Serverを採用

• 既存サーバに影響を与えずに、こっそり導入
•

設定ファイルや公開

の配布といった簡単なことから
とはいえ…
Chef導入時に悩む点
• 使いこなすまでに覚える用語が多い

Role?

Environment?

Node?

Cookbook?

Recipe?
Chef導入時に悩む点
• どこまでをChefにやらせるか
AMIの領域

低

レシピの領域

柔軟性

アプリの領域

高
Chef導入時に悩む点
• どの切り口でサーバの構築手順を記述するか
Environment
Role
Cookbook

Cookbook

Recipe

Recipe

Recipe

Recipe

Recipe

Recipe

機能単位?
サーバ単位?
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
Chef Serverを1年運用してみて
• 開発環境の準備は圧倒的に速くなった
•

設定ファイルのバックアップもChefに任せる

• recipeにアプリ情報は直書きしない
•

他アプリに流用する際の修正コストが大きくなる

• チームメンバーの変動
•

孤独なChef使いを生み出すことに
Chef Serverを1年運用してみて
• roleにレシピを詰め込みすぎない
•

roleに詰め込みすぎると、サーバの完成形が見えなくなる

"env_run_lists": {
"sample": [
"role[sample]",
"recipe[sample::hoge_user]",
"recipe[sample::hoge_directory]",
"recipe[python::python27]",
"recipe[python::virtualenv]",
"recipe[sample::hoge_mysql]",
"recipe[sample::hoge_virtualenv]",
"recipe[sample::hoge_nginx]",
"recipe[sample::hoge_httpd]",
"recipe[sample::hoge_td-agent]",
"recipe[sample::hoge_git]",
"recipe[sample::hoge_nrpe]",
"recipe[sample::hoge_ganglia]",
"recipe[sample::hoge_recipe1]",
"recipe[sample::hoge_recipe2]",
"recipe[sample::hoge_recipe3]",
"recipe[sample::hoge_recipe4]"
]

…なるほど。
わからん(;´Д`)
運用中に遭遇した出来事
• SSHデーモンのチューニング
•

AutoScalingで接続台数が多いときはMaxStartupsを変更

knife bootstrapの処理が
一番重くなる
運用中に遭遇した出来事
• インスタンスタイプ変更
• m1.smallは同時接続クライアントが80台あたりが限界?
• EC2メンテナンス
•

knife backup exportで定期的にEBSへバックアップ

Chef Server 自体のバックアップも
ちゃんと設定しておく必要がある
Chefを導入してから悩む所
• いつレシピ書くの?
•

今でしょ、なケースが少ない(´・ω・`)

•

障害発生時にレシピを更新したりする?

•

ちょっと検証してみたい場合にもレシピ化?
何が問題だったか(再掲)
• AMIのブラックボックス化
• 構築ドキュメントの管理
• 誰が/いつ/どのように/サーバを準備したかが不明
ある程度は改善されたが、
運用においても銀の弾丸はない
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
改善に向けて取り組んでいること
• 孤独なChef使いをこれ以上増やさない
•

社内のChatToolを活用
改善に向けて取り組んでいること
• 構築手順のrecipe設計見直し
•

機能別→サーバ別へ

• インストール手順もrecipe化
•

極力Chef側へ寄せて構築を行う

• attributesの活用
•

バージョン記述はドキュメントとしても使える
目次
•

自己紹介

•

Chef導入以前の業務内容

•

Chef導入後の業務内容

•

Chefを約1年運用してみての所感

•

改善に向けて取り組んでいること

•

まとめ
まとめ
• Chefの最適解はまだ模索中
• 日頃からメンバーのChefスキル平準化を行う
•

コンソールをチームで共有(≒ChatOps)

• 運用チームは日々改善
•

失敗から立ち上がるサイクルが大事
ご清聴ありがとうございました

チームでChef serverを運用するには