Contenu connexe
Similaire à Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT①
Similaire à Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT① (20)
Plus de Yahoo!デベロッパーネットワーク
Plus de Yahoo!デベロッパーネットワーク (20)
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT①
- 1. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack関連セッション
1
OpenStack Summit
Barcelona 2016 参加報告
神尾皓 立見祐介
Ansibleによるおっちょこちょい
の運用自動化
高橋拓也
4年間、OpenStackをデプロイし
てみた
北田駿也
OpenStack on Kubernetes
木下裕太
- 2. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
2017年1月30日
2
高橋拓也(24)
サイトオペレーション本部 インフラ技術1部 クラウドイノベーション
Ansibleによる
おっちょこちょいの運用自動化
- 4. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
自己紹介
4
• 高橋拓也
• インフラ技術1部 クラウドイノベーション所属
• プライベートクラウド(OpenStack)の運用・開発を担当
• 2016年度新卒入社
• インフラの基礎技術について、目下勉強中です
- 6. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
6
• はじめての既存システム運用
• しかもものすごく大規模システム
• 一つのミスが複数のサービスに大影響を
• しかし、そんな自覚が足りなかった新人1ヶ月目
- 7. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
7
• (^o^)。。( 本番環境にアクセスっと
- 8. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
8
• (^o^)。。( 本番環境にアクセスっと
• (^o^)。。(Haproxyあがってないな、 $ sudo service haproxy start
- 9. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
9
• (^o^)。。( 本番環境にアクセスっと
• (^o^)。。(Haproxyあがってないな、 $ sudo service haproxy start
• (´・ω・`) < 高橋くん、それheartbeatだよ。。。
- 10. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
10
• (^o^)。。( 本番環境にアクセスっと
• (^o^)。。(Haproxyあがってないな、 $ sudo service haproxy start
• (´・ω・`) < 高橋くん、それheartbeatだよ。。。
• (´・ω・`) < もうちょっと確認してから sudo は打とうね。。。
- 11. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
11
• (^o^)。。( 本番環境にアクセスっと
• (^o^)。。(Haproxyあがってないな、 $ sudo service haproxy start
• (´・ω・`) < 高橋くん、それheartbeatだよ。。。
• (´・ω・`) < もうちょっと確認してから sudo は打とうね。。。
はじめてのオペミス (運用業務開始2日目
本番環境こわい
対策: 本番環境では気を引き締めよう
- 12. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
12
• (^o^)。( 今度は慎重にやるぞー
- 13. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
13
• (^o^)。( 今度は慎重にやるぞー
• (^o^)。( だんだん疲れてきたな。。
- 14. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
14
• (^o^)。( 今度は慎重にやるぞー
• (^o^)。( だんだん疲れてきたな。。
• (^o^)。( VMのnicを削除するぞ!
- 15. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
15
• (^o^)。( 今度は慎重にやるぞー
• (^o^)。( だんだん疲れてきたな。。
• (^o^)。( VMのnicを削除するぞ!
• (^o^) < あ!削除するnicを間違えた!!
- 16. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
16
• (^o^)。( 今度は慎重にやるぞー
• (^o^)。( だんだん疲れてきたな。。
• (^o^)。( VMのnicを削除するぞ!
• (^o^) < あ!削除するnicを間違えた!!
• (´・ω・`) < 事故
- 17. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
17
• (^o^)。( 今度は慎重にやるぞー
• (^o^)。( だんだん疲れてきたな。。
• (^o^)。( VMのnicを削除するぞ!
• (^o^) < あ!削除するnicを間違えた!!
• (´・ω・`) < 事故
• 必要ないポートだったため事故とはならず
• 対策: 目grepはやめてマシンにgrepさせる
- 18. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
18
• (^o^)。( このDB書き込みオペはミスできないな。。
- 19. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
19
• (^o^)。( このDB書き込みオペはミスできないな。。
• (^o^)。( 手順書からしっかりコピペして、2回チェックして
• (^o^)。( 出力結果も残したし、完璧だ!!
- 20. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
20
• (^o^)。( このDB書き込みオペはミスできないな。。
• (^o^)。( 手順書からしっかりコピペして、2回チェックして
• (^o^)。( 出力結果も残したし、完璧だ!!
• (´・ω・`) < 高橋くん、それslaveだよ。。。
- 21. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
つらかったこと
21
• (^o^)。( このDB書き込みオペはミスできないな。。
• (^o^)。( 手順書からしっかりコピペして、2回チェックして
• (^o^)。( 出力結果も残したし、完璧だ!!
• (´・ω・`) < 高橋くん、それslaveだよ。。。
• 先輩社員の神業オペレーションにより、影響を残さず処理できた
• 対策: hostnameをターミナルに出力し続ける
• もしhostnameを見逃したら。。。 → あまり対策になってない
- 22. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
気づいたこと
22
• オペミスする確率はエンターを押す回数と比例する
• 「対策: 気をつける」 は、必ず失敗する
- 23. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
気づいたこと
23
• オペミスする確率はエンターを押す回数と比例する
• 「対策: 気をつける」 は、必ず失敗する
オペミスが起きないインターフェースを使おう!
- 25. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
オペミスが起きないIFとは?
• オペミスが起きないIFとは
• 実行のたびに状態が変化しない
• 冪等性を保つ or 保つ仕組みがある
• 作業内容が見える
• 第三者によりチェックされた作業しか実行できない
ようにする
• 入力が少ない
• 固定の設定値はツールで保持する
• 人力作業が少ない
• 単純作業は自動化させる
25
- 28. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Ansibleによる運用自動化
28
• なぜAnsible?
• 実行のたびに状態が変化しない
• 冪等性を保つ仕組みを持つ
• →作業実行に迷わない
• 作業内容が見える
• 作業内容をコード化して管理できる
• タスク実行が逐次処理となる
• →やり方のわからない作業がなくなる
• 入力が少ない
• 変数として値をplaybookに保持できる
• →どの変数を利用するかを入力として与えれば良い
• 人力作業が少ない
• 単純作業は自動化させる
• →エンターの叩かれる回数は確実に減る
- 30. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
30
• OpenStackを操作してFlavorを追加する
• Flavor … インスタンスのスペック情報
- 31. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.31
実行手順
手順
1. クラスタのユーザー情報を読み込む
2. Clientをロードする
3. nova flavor-create を実行し、flavo
を作成する
4. nova flavor-key を実行し、flavorの
extra_spec(quotaなど) を追加する
実行コマンド
1. $ source cluster/adminrc
2. $ source /os/liberty/activate
3. $ nova flavor-create 2v-1024M-
40G auto 1024 40 2
4. $ nova flavor-key set
drive_type=ssd
- 32. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.32
実行手順
手順
1. クラスタのユーザー情報を読み込む
2. Clientをロードする
3. nova flavor-create を実行し、flavo
を作成する
4. nova flavor-key を実行し、flavorの
extra_spec(quotaなど) を追加する
実行コマンド
1. $ source cluster/adminrc
2. $ source /os/liberty/activate
3. $ nova flavor-create 2v-1024M-
40G auto 1024 40 2
4. $ nova flavor-key set
drive_type=ssd
- 33. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
33
• OpenStackを操作してFlavorを追加する
• Flavor … インスタンスのスペック情報
• OpenStackのクラスタ毎に追加するスペックが異なる
• SSD機のクラスタはdisk quotaをゆるめたりとか
• 想定されるオペミス
• 同名のフレーバーを作ろうとしてしまう
• extra_specの値を間違えて設定してしまう
Ansibleでワークフロー化
- 35. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
35
add_flavor.yaml
- hosts: work
user: takutaka
roles:
- nova/flavor-create
- 36. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
36
vars/flavor-create.json
{
"flavor_name": "2v-1024M-30G",
"cluster_name": “cluster1"
}
- 37. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
37
vars/flavor-create.json
{
"flavor_name": "2v-1024M-30G",
"cluster_name": “cluster1"
}
add_flavor.yaml
- hosts: work
user: takutaka
roles:
- nova/flavor-create
$ ansible-playbook add_flavor.yaml –i hosts ¥
–-extra-vars “@vars/flavor-create.json”
- 38. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
38
flavor-create/tasks/main.yaml
- name: parse flavor name to machine spec
flavor2spec:
flavor: '{{flavor_name}}'
register: spec
- name: check flavor name
shell: |
nova flavor-list |grep {{flavor-name}}
register: result
failed_when: result not in [0, 1]
- name: create flavor
shell: |
nova flavor-create "{{flavor_name}}" auto ¥
{{spec.mem}} {{spec.disk}} {{spec.vcpu}}
when: result.rc == 1
- name: set extra_spec to flavor
shell: |
nova flavor-key "{{flavor_name}}" set ¥
"{{item.key}}"="{{item.value}}"
with_dict: "{{vars[cluster_name]}}"
- 39. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
39
Library/flavor2spec.sh
#!/bin/bash
name=`cat $1|awk -F'flavor=' '{print $2}'|awk -F' ' '{print $1}' `
vcpu=`echo $name|awk -F'-' '{print $1}'`
mem=`echo $name|awk -F'-' '{print $2}'`
disk=`echo $name|awk -F'-' '{print $3}'`
echo -n
{"name":"${name}","vcpu":"${vcpu}","mem":"${mem}","disk":"${disk}"
}
- 40. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
40
flavor-create/tasks/main.yaml
- name: parse flavor name to machine spec
flavor2spec:
flavor: '{{flavor_name}}'
register: spec
- name: check flavor name
shell: |
nova flavor-list |grep {{flavor-name}}
register: result
failed_when: result not in [0, 1]
- name: create flavor
shell: |
nova flavor-create "{{flavor_name}}" auto ¥
{{spec.mem}} {{spec.disk}} {{spec.vcpu}}
when: result.rc == 1
- name: set extra_spec to flavor
shell: |
nova flavor-key "{{flavor_name}}" set ¥
"{{item.key}}"="{{item.value}}"
with_dict: "{{vars[cluster_name]}}"
- 41. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
41
flavor-create/tasks/main.yaml
- name: parse flavor name to machine spec
flavor2spec:
flavor: '{{flavor_name}}'
register: spec
- name: check flavor name
shell: |
nova flavor-list |grep {{flavor-name}}
register: result
failed_when: result not in [0, 1]
- name: create flavor
shell: |
nova flavor-create "{{flavor_name}}" auto ¥
{{spec.mem}} {{spec.disk}} {{spec.vcpu}}
when: result.rc == 1
- name: set extra_spec to flavor
shell: |
nova flavor-key "{{flavor_name}}" set ¥
"{{item.key}}"="{{item.value}}"
with_dict: "{{vars[cluster_name]}}"
- 42. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
活用例
42
Flavor-create/vars/main.yaml
cluster1:
'quota:disk_write_bytes_sec': 1536000000
'quota:disk_read_bytes_sec': 1536000000
'quota:vif_outbound_average': 64000
'quota:vif_inbound_peak': 64000
'quota:vif_inbound_average': 64000
'quota:vif_outbound_peak': 64000
'drive_type': ssd
cluster2:
'quota:disk_write_bytes_sec': 153600000
'quota:disk_read_bytes_sec': 153600000
'quota:vif_outbound_average': 64000
'quota:vif_inbound_peak': 64000
'quota:vif_inbound_average': 64000
'quota:vif_outbound_peak': 64000
'drive_type': sas
- 43. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
確認項目が減少
43
自動化前確認項目(11項目) 自動化後確認項目(2項目)
フレーバー名 フレーバー名
vcpu クラスタ名
Memory
Disk
quota:disk_write_bytes_sec
quota:vif_outbound_average
quota:vif_inbound_peak
quota:vif_inbound_average
quota:disk_read_bytes_sec
quota:vif_outbound_peak
drive_type
- 44. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.44
運用手順も減少
1. クラスタadminrcを読み込む
2. Clientをロードする
3. 手順書を元にコマンドを作成する
4. コマンドを実行する
5. 追加するextra_spec分コマンド実行
する (7回)
計 11手順
1. フレーバー名とクラスタ名をjsonに
書き込む
2. Playbookを実行する
計 2手順
- 45. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.45
運用手順も減少
1. クラスタadminrcを読み込む
2. Clientをロードする
3. 手順書を元にコマンドを作成する
4. コマンドを実行する
5. 追加するextra_spec分コマンド実行
する (7回)
計 11手順
1. フレーバー名とクラスタ名をjsonに
書き込む
2. Playbookを実行する
計 2手順
脱オペミス完了!
- 46. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
自動化の懸念
46
• Playbookの信憑性は誰が担保する?
• 冪等性の保たれたPlaybookを書く
• ベテラン運用者に確認してもらう
• 検証環境で試す
• 運用のための知識が身につかないのでは?
• 運用の知識を伴わないとそもそもPlaybookが書けない
• 空いたリソースで他の問題が解決できたらそれが一番
- 47. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
運用フロー
47
Push & PR
おねがい
Merge
Webhook
pull
execute
cluster
cluster
Playbook開発者
Playbook開発者
- 48. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
自動化の懸念
48
• Playbookの信憑性は誰が担保する?
• 冪等性の保たれたPlaybookを書く
• ベテラン運用者に確認してもらう
• 検証環境で試す
• 運用のための知識が身につかないのでは?
• 運用の知識を伴わないとそもそもPlaybookが書けない
• Playbookを見れば、「正しいやり方」を身につけられる
• 空いたリソースで他の問題が解決できたらそれが一番
- 49. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
まとめ
49
• 手動の運用はつらいよ
• 自動化すると改善できることがあるよ
• Ansibleなら、始めやすいしシンプルでおすすめだよ
• 自動化に振り回されないように気をつけよう
- 50. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
他の構成管理ツールとの比較
50
実装言語 設定言語 冪等性 モジュール言語 エージェント
Fabric Python Python ☓ python ☓
Capistrano Ruby DSL(Ruby) ☓ Ruby ☓
Chef Ruby DSL(Ruby) ○ Ruby ○
puppet Ruby 独自 ○ 独自 △
Ansible Python Yaml ○ なんでも ☓