NetOpsCoding #4 参加メモ
NetOpsCoding #4 に参加してきたのでいつものメモです。公開資料などについては atnd のページを参照してください。
ネットワーク機器運用自動化の傾向と対策, Fixpoint/服部さん
Kompila
今回手伝ったNW運用自動化(運用チーム)のしごと
- 日々いろんな作業依頼がある
現状の運用
- いわゆる「ガチガチ」な運用
- アプリ開発者 → NW運用チームに作業依頼(メール)
- NW作業担当者は依頼内容に基づいたExcelで作業手順書作成 → 責任者レビュー・承認リレー
- 承認が下りたら作業実施 → 作業担当者へ手順書を渡して実行
毎回同じような手順書書かないといけない。実際の作業は手作業なので入力ミスや誤設定とかのリスクがある。
スクリプト実行で自動化だ!
ノンプログラマがやりやすい手順書みたいなのってないか?
- YAML手順書へ
- 日本語キーワードで可読性をあげる
- キーワードの表記揺れに対応する
Kompiraによる自動運用
実行の流れ
- parse
- パラメータのチェックとか手順書の内容が意味的に合っているかどうかをいまの設定情報を元にチェック。
自動化システム実現の際にあたった壁
- CLIの壁
- SSGはCLIでしか操作できない(APIがない)
- BIG-IP はAPIがある (bigsubs, https://github.com/F5Networks/bigsuds )
- Telnetの壁
- Telnetでしかアクセスできない機械がある
- expect script
- 踏み台の処理
- 冗長構成の壁
- 機械によっては active 側にだけコマンド入れるモノがある。どっちがActiveなのかを判断して動かないといけない。
- 設定リカバリの壁
- 間違えたときに切り替えたい、というのが発生する。
- リブートさせたくない
- コマンドを取り消すコマンドを入力する…
CLIの壁
Telnetの壁
- 実行したコマンドの結果とプロンプトの区別がない。
- コマンドが終わってプロンプトが出てからコマンド入れないといけない。
- コマンドによってはプロンプトが変わる
- プロンプトが出る前にエラーメッセージが出ることがある。
- エラーメッセージハンドリングは地道にやるしかない。
- expect script が秘伝のタレ化…
冗長構成の壁
- Activeにだけコマンドを来る。ログインした上で状態チェックをする。
設定リカバリの壁
- 誤投入に対して元に戻したいけど、リブートするのはいやだ
- 逆コマンド実行をする。
- 投入したコマンドから逆コマンドが特定できるとは限らない
- 設定差分(diff)から逆コマンドを生成する。
- 単純に diff とれれば良いわけではない…
まとめ
- Kompila でNW運用自動化システムを
- 実際に現場で使うには、細かい処理を入れ込まないと行けなくて非常に面倒くさい。
- 今のところ銀の弾丸はない
- 地道にやるしかない
- 自動化することで、手作業より確実にオペレータ工数削減はできる。
QA
構成管理DBをGitで管理したいネットワーク管理者の憂鬱, internet Multifeed/川上さん
Internet Exchange とは?
- 平たく言うとL2スイッチがある。
- 各社がBGPルータをつないで、経路交換をして、トラフィックを交換する。
- 100くらいの顧客(AS)がつながってる
- 設定作業
- プロビジョニング、開通作業、バックボーン作業(影響がある・ない)
- いままで手作業
- コンフィグファイルが非常にわかりにくい。不幸な人為ミスのオンパレード, 開通作業に5時間かかる…とか。
- DBから自動生成したい。
どういうデータベースを?
例: スイッチのファームウェアアップデート
- 設定変更手順
- オペレーション
- 作業者+確認者の2名体制
- サーバ系設定
- 各ステップのコンフィグは前日までに確認・承認しておきたい
- 全体の作業内容は変化があるので、コンフリクトが起こる可能性がある。衝突が起きたら回避できるような仕組みじゃないといけない。
DBがRDBだったとすると…
- コンフリクトに気づけないといけないし、気づいたら担当者が変えられないといけない。
- WebUI?
- WebUIの手順書は書くのが大変。その通りに行われる保証がない。
- 実装コストが高い…
- rails console?
- つらい
Gitならなんとかなるんじゃない?
- 運用者が読み書きしやすい・機械処理ができる・バージョン管理できる。
ワークフローの変化
- 作業用ブランチ → テキストでコンフィグ → レビュー
- 差分確認、コマンドの確認を担当者がやれる。入力するコマンドのチェック。
- メンテナンス前に担当者が rebase して変更停止(master freeze)
- 作業実施後に branch 削除
2年半くらい運用している
- YAML, git にカンするトラブルは特になし。
- どっちかというと人為ミス。typoとか。
- Good
- ブランチ斬る運用
- 意味のある単位でのコミット、差分によるダブルチェック
- Bad
- オブジェクト管理レーションが相互参照
- pry debug がつらい
- stack trace がおもい
- git pull デプロイに時間がかかる
- gitlab のパフォーマンス
- プログラムからDB変更する
- オブジェクト管理レーションが相互参照
運用自動化の段階
- phase.1, スクリプトにパラメタ渡して人が実行
- phase.2, DBから全部コンフィグ作って機器にデプロイ
- 機器側にコンフィグリロードの仕組みがないといけない
- phase.3, イベントドリブンで必要なコンフィグ差分を機器に投入
- YAML をもとにしているとつらみ
- コメントは消える
- 人が書いたモノと出力されるモノに違いがある
- 人の編集とシステムによる編集のコンフリクト…
phase2→3
- イベントごとにコンフィグ全生成というのはつらい
- DBが半端に更新されているタイミングでコンフィグ生成しているとNG
- branch 切れるDBというのもあるらしいけど (noms)
phase.3
規模
自動化実行に当たっての壁
- 自動化のための整理
- 命名規則やルール、フォーマットの統一…
QA
LT
例によってLTについてはメモを取っていません。いくつか思うところや感想などを。
- スマホのセンサーでネットワークを操る
- スマホを振ったら Ansible Tower をたたいて経路変更 → 振った方向へ経路を切り替える。
- LTでは残念ながらでも環境への接続が上手くいかず…
- 懇親会で動くところを見せてもらえました!
- デモ動画ができてた!
- NetTesterで物理ネットワークのテストをプログラム!
- あとで fixpoint の方とちょっと話をしたんだけど、感じている課題感や直面している課題はもうそのままですね。いろんなアプローチでどうにかできないかを試していけると良いと思います。
- イベント紹介: TremaDayってどんなイベント?
- 合間合間にネタが…!
- Trema Day #10 in Okinawa - connpass
感想
どれも何かしらの実装やコーディングの話が出てきて、具体的な話に突っ込んできているのが良かったなあと。まあその分泥臭い話も多めではありました…。最初の、fixpoint さんの取り組みとか、LTの "そろそろSSH/Telnetを離れて" の話ともそうなんだけど、このCLIベース自動化の話の泥沼からどうにか抜けたいところだなあ、と。あのへんの自動化実装の泥沼加減がわかりすぎるので
手前味噌ですが、今の話を踏まえて是非一読いただきたい > CLIベースのNW自動化バッドノウハウのあれこれ - # cat /var/log/stereocat | tail -n3 https://t.co/bhAAPDHf14 #netopscoding
— ステ猫 (@stereocat) October 27, 2016
というツイートをしてしまいました。Ansible とか、いろんなツールややり方がいろいろ試してみるのはイイと思うんだけど、ちょっと気になるのは、こういうのをやるための地道な作り込みをどうもみんな何かしら再発明しているような気がするところかな…。いや、自分も最近ちょっとやってたというのもあるからなんだけど。APIで操作可能なガワを用意しても結局中身のCLI処理回すところの仕掛けやナレッジは自分で頑張らないといけないのがつらいなあ……とかね。プロンプトの正規表現作るとか、エラーメッセージ調べるとかのあれこれが超しんどい。何かこの辺をもうちょっと共有する・共通化するようなものがあればなあ、と思いました。