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