ネットワークプログラマビリティ勉強会 #npstudy #15 参加メモ
ネットワークプログラマビリティ勉強会に参加してきたのでいつものメモです。
- ネットワークプログラマビリティ勉強会 #15 - connpass
- 資料についてはこっちも参照してください。
- ネットワークプログラマビリティ勉強会#15 #npstudy ツイートまとめ - Togetter
ネットワークプログラマビリティ勉強会
趣旨
募集
- スピーカーがいると次回早く開催できます
- LTは公募割と早く埋まるので、確定してないネタでも声をかけてもらえると
- スタッフも募集してます。
- 会場も探してます
Lagopus Router, hibitomo さん
余談: MSのすごいところ
- DPDK
- [dpdk-dev] [dpdk-announce] git repository for DPDK on Windows, 昨日アナウンスされた。DPDK が Windows で動いて L2/L3 Forwarding が動くらしい。
- 是非 Windows で動かしてドヤ顔で npstudy で発表してください
Lagopus
- NTTの研究所で開発している。OSSプロジェクト。
- 2013年から。SDN/NFVというキーワードで。DPDKで10Gワイヤレート、ソフトウェアで汎用サーバの上で。
- コスト効果、time-to-market の短縮
- 最初は総務省のプロジェクト。今はNTTと大学とか。
- 2017/8月にLagopus software router (alpha), 今頃には beta が出てるはずだったんだけど社内手続きを勘違いしていてちょっとずれる…
Lagopus switch
- OpenFlow1.3 + Tunnel Extension
OpenFlow?
- パケットをマッチしていろいろいじる
- 弱点: ステートを持てない (ステートはコントローラでしか持てない)
- よく考えないとフローが爆発しがち
- ユースケース例
- SDN-IX (Interop), DDoS対策とか。
- ユースケース要望きくとOFだとつらい
- VRRPとか。自発的にパケットを出す・ステートを持つ
Lagopus switch → Lagopus routerへ
- NWエンジニアが使いやすいものを作ろう
- 方針
- コントローラ--スイッチ間が埋まりがち → 経路交換とかの機能は「箱」のほうへ。コントローラ側は提供したいサービスアプリのみに注力しよう。
- lagopus で実証実験 → 良ければベンダとかで
中身の話
- Lagopus project 側の思いからは、モジュールを作ってみてほしい → router architecture について。
- 中身はマイクロサービスみたいな感じ
- モジュール間が gRPC とかで切れてる
- Zebra2.0 で使っている config manager を利用。(config datastore)
- demo
- config datastore → agent (routing, vrrp, ike, mat) → dataplane
- DP間I/Fは gRPC, NetLink の agent がある
Dataplane module
- Fast path → DPDK, Slow path → Golang で記述
- Go/DP(Clang)間はRING, (2016 の dpdk user space (ダブリン) の資料を参照)
- alpha → beta で中身が変わる。2018年度頭リリースの時にモジュールの書き方とかのドキュメントを追加して公開予定。
Config datastore
- Openconfigd
- YANGを突っ込むとCLI/APIを生成してくれる
- YANGのconfig sub tree に対して、agent が subscribe すると push してくれる。
- CLI も他とか commit とかつかえる
- validation して subscribe しているモジュールがみんなOKならcommitになる
- openconfigd でオレオレCLIを書こう (IW2017 BoF 浅間さん)
Openconfigd Demo
Roadmap
QA
- lagopus arch, agent は golang の別のプロセスで動いている?
- スレッドのつかいかた、switch は dpdk pipeline model, router は?
- 基本的には pipeline model にちかいけど、スケジューラがいて仕事を割り振る感じ。
ここ3年におけるサイバーエージェントのネットワークを取り巻く環境の変化 ~API/SDN/kubernetes~, 山本さん
- ゲーム・メディア事業
- アドテク本部
- インターネット広告
- アドテクスタジオ
- いろんな広告をまとめて開発していく(掲載媒体より・広告出したい人向け、広告競売、などのシステムがある
- 遅延の少ないネットワークが求められる
アドテクスタジオのインフラ?
- 広告プロダクト…25-30ある。200名くらいのエンジニア(ほとんどアプリ。インフラは10人くらい。)
- インフラはプロダクトで選択できる。GCP < AWS < Private cloud (インスタンス数)
- GCP増えてきてる
- 本番用 OpenStack (ふたつあって新旧移行中)
- コンテナ基盤
- CI (Circle CI)
- Circle CI 2.0 で苦労しています
- 物理マシンはMAAS (Ironic)
- 個人開発用クラウド (OpenStack Mille + Midonet)
- 分析基盤: tableau, Hadoop (OpenStack)
ここ3年
- 2014/3
- 2014/8
- 2015/2
- 2016/11
- コンテナ使いたい → GKE → k8s-aaS ("AKE")
- private cloud, パフォーマンスとか見てもコストメリットがあったので。
- k8s 構築がつらい問題→k8sクラスタを簡単にデプロイ。動的な永続ボリュームの提供。
- OpenStack上で必要なリソースを展開...HEATの話とかもトラブルシュートする上では必要
- type:LoadBalancerの壁…OpenStackでは neutron LBaaS, Octavia : でも アドテクのOpenStackはL2構成…
- k8s cloud provider の openstack pkg を回収 → LB用IP払い出してAXCをたたくように変更
- 物理の世界だけでは生きていけない
- chatbot も進化: ヘルスチェックやアラート応答
まとめ
- NWエンジニアの領域は変わってきている
- openstack, sdn, k8s による変化にどれくらいNWEが食い込んでいけるか
- 申請処理などの単純作業から解放されれば他のことがやれる
- 情報交換を
Azure のネットワークはブラックボックスじゃない!, 山本さん
Azure
- サービス8年。IaaS/PaaS, AKS
- Enterprise Cloud : 固い会社とよくやっている
- 世界中にDCがあるよ
- 5月~欧州で個人情報保護系の法律(GDPR)にも対応
- Openなクラウドです!
NWがブラックボックス?
- Azure NW, 世界中のDCにいろんな回線引いてる。backbone NW つよいよ
- IaaSのNWイメージ
- NWの可視化 : Network Watcher
- 有料だけどゴミのような値段!
- demo
- VM→NIC→IP,NSG
- Network watcher → トポロジ → NW図を表示 (defaultでやれる + download topology すると visio で編集可能なファイルが落とせる)
- Network watcher → IPフロー確認(ping), packet captuer
- PowerBIにNWログ食わせる(Windows)。テンプレートがある。とってきた情報のままレポートが書ける
- Security center: NWの推奨値とかが出てくる。ポリシあてたりとかいろいろ。
- Just in Time VM preview: 普段は全部閉じたFWポリシ。要求タイミングで特定プロトコルを指定時間・指定範囲で空けることができる。(まだGUIでの入力)
分離されたネットワークでの複合機/プリンターの共有, @otahi さん
オフィスでのネットワークの課題とその対策。
- 総務省が自治体に、ネットワークの分離を求めている。住基ネット/LGWAN/インターネットをわけてそれぞれで情報が簡単にやり取りできないように。
- 複数のネットワークから複合機とかプリンタを安全に利用したい
- NWごとにプリンタ置けばいいんだけど場所の問題もあるしそうもいかない
複数のNWからプリンタ使いたい
- USBプリントサーバ
- 2系統までなら簡単
- インタフェースボックスタイプ (今回の話はこれ)
- 3系統までの有線LANに対応
- scan-to-folder 可能
- 個人認証/私書箱プリント対応
- Tag VLAN対応(10VLANまで) (プリンタはtag対応しない)
しくみ
- いままでのNWはそのまま
- 他のNWは NAPT...プリンタが source になるときのルーティングとかNW間制御とかでSDN的に
USBプリントサーバだと快癒ところに手が届かないところに対応
pyATSをつかったテストの自動化, 緒勝さん
pyATS?
- python based framework
- pytest + netomico
- もうちょっとすると testfms 込み見たいなフレームワークに
- まだ OSS としてソースコードが公開されていない
- 公開されるかどうかはまだわからない。
- 発表はいちユーザとして。
- pyATS + Genie
- 現在は netomico 的モジュール(genie), 今後は REST, parser lib 都下も出てくる予定。
テストケースをクラスで書いて、メソッドでステップを刻んでいく
- ベーシックなテストケースを書いて、子classでoverrideしてバリエーション
いいとこ
- cisco で結構長くつかわれてる。
Testbed file
NSOで自動化した処理の試験を自動化する - pyATS →(REST)→ NSO → config → test - CLIでやったけど XML でやったほうがらくだったかな
関連情報
- https://developer.cisco.com/site/pyats/
- ドキュメントはそれなりにそろえてあります。
次回
- 2か月後くらい?
- ネタがある人は声をかけてください
2016-2017年のサービス障害を振り返る
最近全然ブログとか書けてないなーと思いつつ 2018 年を迎えてしまいました。本年もよろしくお願いいたします。
以前、DC/クラウド/通信事業者サービスの障害事例よせあつめ という記事を書いたところ意外と反響があったので、続きを書こうかなと年末考えていたのですが、結局 2017 年中は書けませんでしたね。いろいろあったんですよ。個人的な話なんで別にどうでもいいんですけど。そんなわけで年明けに書きます。
この記事は 2016 年アタマの GMO の障害とか github のサービス障害をきっかけに書いたものでした。その後、世の中的にはどんなサービス障害が起きているのかをざっとおさらいしてみたいと思います。いまシステムやサービスを作っていく中で、こういう原因で死ぬのか…というのを見ていくことは、ひいては「そこまで予見できなかった」あるいは「そこからは回復させられなかった」ってことを考えることなんですよね。落ちた = ダメじゃん、という話でおわるのはなくて、ここまでやられて初めて落ちるんか…とか、こういう可能性まで見込んで何か考えないとイカンのか…とか、こういう状況でもうまく逃げ切るための方法って何なのか…とか、発展的な話を考えるための材料だと思っていただければ。
挙げる事例については私がウォッチして見つけているものなので当然偏りがあります。その点はご承知おきください。他にもこういう事例があるよってのがあったら是非教えていただきたく。
参考資料
ニュースソース
ツイッターとかでも拾っていますがこの辺を見ることが多いですね。いろいろ時事ネタや速報だしてくれています。ありがたや。
- Publickey - Enterprise IT × Cloud Computing × Web Technology / Blog
- 「システム障害」最新記事一覧 - ITmedia Keywords
- データセンターカフェ
参考記事
- AWS でいままで起きた大規模障害を振り返る - Qiita
- Learn from the outages of 2016 | Opinion | DatacenterDynamics
- 32%の企業が月1回以上の運用ミスによる障害やトラブルを経験――、IDC Japan調査 - クラウド Watch
- データセンターで発生したミスをオープンに。DCIG(英国)の取り組み | Data Center Cafe
- 中身がわからんけど取り組みとしてはすごく気になる
2016年の事例
- GMO、先週の24時間にわたるサービス障害時にはデータセンター内の約12%が電源喪失。変圧分電盤故障が原因の可能性。監視体制の強化など対策 - Publickey
- 2016/01
- ハードウェア障害(電源設備故障)
- GitHubが先週木曜日にダウンした原因は、一時的な停電からの連鎖的な障害 - Publickey
- 2016/02
- ハードウェア障害(DCで発生した電源障害・停電による連鎖的な障害)
- ニュース - ANAシステム障害の原因判明、シスコ製スイッチの「世界初のバグ」でDBサーバーがダウン:ITpro
- 2016/03
- ハードウェア障害 (ネットワーク機器ソフトウェアのバグ: "スイッチが故障状態であるにもかからず、故障を知らせる「故障シグナル」を発信しなかった。")
- 影響が大きかったこと、報告における原因がはっきりしなかったせいか話題になりました
- 記者の眼 - 判明、ANAシステム障害の真相:ITpro
- 2016年3月22日に発生した、全日本空輸株式会社(ANA)の国内線システム障害についての考察 - わかりやすい
- Google Compute Engine、全世界のリージョンが同時に外部とのネットワーク接続を失うという深刻な障害が発生。ネットワーク管理ソフトウェアにバグ - Publickey
- 2016/04
- ソフトウェア障害 (ネットワーク管理ソフトウェアのバグ)
- "本件においても、新しいコンフィグレーションは不正であることがこの検知工程によって検知された。しかし致命的なことに、ネットワーク管理ソフトウェアの2番目のバグによって、この検知工程の結果がコンフィグレーションの伝播機構に対して通知されなかった。結果として新しい(不正な)コンフィグレーションが伝播されていく。"
- 世界的なインターネット障害が発生:Geekなぺーじ
- 2016/06
- ヒューマンエラー (通信事業者側の NW 機器オペミスによる迂回経路の発生…BGP設定ミス?)
- ネットワーク障害でトラフィックが欧州から香港へ:これもヒューマン・エラー! | Agile Cat --- in the cloud
- シスコ、ルーターのトラフィック損失の原因は宇宙放射線が原因と発表 | スラド
- 2016/09
- サービス障害の話じゃないですが、こういう話もありうるということで。
- ING銀行の基幹データセンター、消防訓練で消火ガス噴射の衝撃音が大量のハードディスクとサーバを破壊。ATMや決済サービスが停止に - Publickey
- 2016/09
- ハードウェア障害 (消防訓練で消火ガス噴射装置からガス噴射 → 衝撃音が発生 → DC 内 HDD などを破損)
- Microsoft AzureのAzure DNSが引き起こした大規模障害、原因はネットワークデバイスのバグ - Publickey
- 2016/09
- ハードウェア障害 (ネットワークトラフィックのスパイク → ネットワーク機器バグ)
- BGP errors are to blame for Monday’s Twitter outage, not DDoS attacks | CSO Online
- 2016/11
- BGP経路設定ミスによる接続障害
Twitter障害の件、BGPのデータを見てみると14:46JST頃Twitter/AS13414経路が全て削除、15:11JST頃再度経路を広告開始、経路が有効になった所から復旧って感じ。Twitterからも復旧報告でてるね。https://t.co/ZvBt5pQwuW
— Yoshinobu Matsuzaki (@maz_zzz) 2016年11月7日
2017年の事例
- ニュース - 博多駅前の道路陥没でNTT西の通信遮断、福岡銀行などでシステム障害:ITpro
- 2017/02
- パブリックには資料が公開されていないのでこちらを参照 → JANOG39.5 Interim Meeting - その1 #janog (6ページ目) - Togetter
- ハードウェア障害 (道路陥没事故 に伴うケーブル切断・通信障害)
- GitLab.comが操作ミスで本番データベース喪失。5つあったはずのバックアップ手段は役立たず、頼みの綱は6時間前に偶然取ったスナップショット - Publickey
- 2017/02
- 過負荷→オペミス (スパムで生じた大量のデータ書き込みがセカンダリデータベースでオンタイムに処理できなかった → 再度レプリケーション実行 → オペミスしてデータ喪失)
- 復旧作業の中継したことで話題になりました : GitLab復旧実況中継 #savegitlab - Togetter
- Amazon S3ダウンの原因、コマンドの入力ミスで多数のサーバを削除。サブシステム再起動に時間がかかり障害が長引く。AWSの報告を読み解く - Publickey
- 2017/03
- ヒューマンエラー? (デバッグ作業中のコマンド入力ミス→サーバ多数削除)
- AWS、S3の大惨事の原因を公開―ヒューマンエラーが発端だった | TechCrunch Japan
- Nielsen Data Center Outage Delays Weekend TV Ratings | Data Center Knowledge
- 2017/03
- ハードウェア障害 (停電)
- Azureの東日本リージョンが7時間にわたってダウン。原因はデータセンターの冷房が失われ自動シャットダウン。日本のリージョンはこの1カ月で三回目の障害 - Publickey
- 2017/04
- ヒューマンエラー? ("N+2で稼働する電源供給システムの故障に伴って実施された、電源復旧のオペレーションの問題")
- ニュース - CARDNETのクレジット決済に6時間強障害、原因はL3スイッチ故障:ITpro
- 2017/04
- ハードウェア障害(L3スイッチ故障→待機系に偏ったことでトラフィック集中・輻輳発生)
- ここまではよくあるシステム障害かな、と思うのですが、個人的に気になっているのはその後 日立の「システム稼働リスク可視化ソリューション」の試行開始 ~AIによるネットワーク監視~ こういうニュースが出たってあたりなんですよね。この辺の新しい技術の有効性が今後どう使われていくかな…ってところ。
- ブリティッシュ・エアウェイズ社長、ヒューマンエラーによる停電を認める | Data Center Cafe
- 2017/06
- ヒューマンエラー (作業員が許可されていない電源設備操作を実行して停電?)
- ZOZOTOWN、システム障害で26時間利用不可に 現在は復旧 データベース上のトラブルが原因 - ねとらぼ
- 2017/06
- ソフトウェア障害? (データベース上のトラブル)
- ニュース - ローソンの「e発送サービス」再開、日本郵便のシステム障害発生から4カ月ぶり:ITpro
- 富士通のシドニーデータセンターで5時間の停電が発生 | Data Center Cafe
- 2017/08
- ハードウェア障害 (停電) 停電の原因等については詳細不明。
- もともと落雷による停電をうけて機器アップグレードをしていたそうな… : 富士通、オーストラリアのデータセンター4施設をTier 4にアップグレード | Data Center Cafe
- ネットワークケーブルの切断でソマリアに数百万ドルの損失 | Data Center Cafe
- 2017/07
- ハードウェア障害 (コンテナ船がアンカーを光ケーブルに引っ掛けた)
- ニュース解説 - 北朝鮮のミサイルを警告できず、Jアラート障害の原因は設定ミス:ITpro
- 2017/08-09
- ヒューマンエラー (メール設定ミス)
- 英国・サウスロンドンで大規模なブロードバンド接続障害、原因はネズミ | スラド idle
- ネットワーク機器を一括管理するクラウドサービスのCisco Meraki、オペミスでユーザーデータを削除。現在復旧作業中 - Publickey
- 2017/08
- ヒューマンエラー (オペミスによるユーザデータ削除)
- 沈黙のGoogleと過熱するメディア、2017年8月世界的ネットワーク障害の全貌をまとめた (1/3) - TechTargetジャパン クラウド
- 2017/08
- BGPルート漏洩による広域通信障害。日本で複数事業者にまたがる通信障害が起きたため話題になりました。
- 2017年8月25日の大規模インターネット障害:Geekなぺーじ
- 8月25日に発生した大規模通信障害をまとめてみた - piyolog
- ネットワーク アーキテクチャ考 (21) 「HW ベンダーは何故怒られるのか」
- パブリックデータから経路リークを探る - LGTM
- (10) 【KOF2017講演会】日本のインターネットが揺れた日 - YouTube "Google謝罪"記事を書いた記者の講演
- 08/25の通信障害概説 Matsuzaki 'maz' Yoshinobu (pdf)
- SEA-ME-WE3海底ケーブル、台風で切断される | Data Center Cafe
- 2017/09
- ハードウェア障害 (台風による海底ケーブル切断)
- ニュース - ソネットの通信障害、原因は「中継機器への大量アクセス」:ITpro
- 2017/09
- 詳細不明…DDoS? ("中継機器への大量アクセス")
- ニュース - 北洋銀行でシステム障害、ネットワーク機器の障害で窓口業務が1時間半できず:ITpro
- 2017/09
- ハードウェア障害? (社内ネットワークが Active-Standby で Active 側障害の後稼働系へ切り替わらなかった?)
- 北海道出身なものでちょっと気になりました。
- 経済産業省の旅費等システムのデータ消失について : 富士通
- 2017/09
- ヒューマンエラー (バックアップを取らずに作業)
- ソースは NHKのニュース記事だったんだけど記事消えてしまいました。
- Linode社、未だ自社データセンターに問題を抱える | Data Center Cafe
- 2017/10
- 詳細不明だがネットワーク機器障害(機器OSバグ)だったようだ ("ハードウェアとソフトウェアの両方に障害が発生したことによって、両冗長ルーターの転送テーブルが誤作動を起こし、それが「ブラックホールルーター化」、または、一部のユーザートラフィックが知らないところで破棄される障害が発生")
- Linode Status - Emergency Network Maintenance in Frankfurt この辺かと思われる。2017/10月で一連の緊急メンテ等の記事が歩けど月単位とかでまとめる URL がつかないので…。
- 防火システムの事故により、Microsoft Azureが一時停止 | Data Center Cafe
- 2017/10
- ハードウェア障害? ("消火システムのメンテナンス作業時に予期せぬ不活性ガス漏れが発生" → "ガス漏れが発生した際は周囲温度は通常の設定値よりも上昇したため、一部システムがシャットダウン")
- ING銀行の事例も参照のこと (ガス噴射衝撃音による機器破損)
- ビットコイン、「過去最高のトラフィック」で取引所がダウン —— 一時9000ドルまで下げるも回復 | BUSINESS INSIDER JAPAN
- 2017/11
- 過負荷
- Slack、11月1日に発生した大規模障害の原因は、定期デプロイによるソフトウェア障害が原因 - Publickey
- 2017/11
- ソフトウェア障害 (提起デプロイされたソフトウェアによる問題でサービス接続障害発生)
- Comcast's nationwide outage was caused by a configuration error
- 2017/11
- Comcast Suffers Outage Due to Significant Level 3 BGP Route Leak
- BGPルート漏洩による広域通信障害
- 作業員がつるはしでケーブルを切断、UKFastがサービス停止に | Data Center Cafe
- 2017/12
- ヒューマンエラー
おわりに
個人的な所感としてはこんな感じです。
- 相変わらず DC 設備系のトラブルはおきる : 停電・ケーブル切断などファシリティ・設備レベルの話はやっぱりゼロにはならない。
- パブリッククラウド・クラウド上のサービス(XaaS)ではソフトウェアで自動化されることによって障害が増幅される : 自動化してレバレッジをかける……一度に大量のサーバを操作したり処理を実行できる。ただ、これは誤った手順・オペミスのリスクを拡大する方向にも働く。実行するツールの選択ミス・パラメタ設定ミスなどをどう防ぐか → オペレーションの妥当性・正当性をどう保証するか、というのは課題になるだろう。それと大規模にやらかしたときにどうやって復旧するか、という話。両面での対策検討が必要になると思われる。
- 複数のサイト(リージョン)やサービスをまたがるような障害にどう対処するか?
- ネットワークエンジニア的には、この 1-2 年は BGP 操作による大規模障害が目立つのが気になるところ。とはいえこれ、upstream でやられちゃうと、エッジにいる側からはなかなか対処ができないんだよな。せめて問題検知や切り分け・状態の把握を早期にやれるようにするくらいか?
ネットワークの自動化、何つかう? 〜自動化ツール紹介〜 #APC勉強会 #30(2回目) 参加メモ
ネットワークの自動化、何つかう?〜自動化ツール紹介〜 APC勉強会#30(2回目) - connpass に参加してきたのでいつものメモ。1回目のときはぼんやりしていたらあっという間に満席になってしまったので2回目で滑り込みです。
資料は1回目の時に公開されているのでそちらを参照してください。
ネットワークの自動化、何つかう?〜自動化ツール紹介〜
はじめに
- NW機器もAPIに対応して、自動化フレンドリーなものが増えてきた
- そういう機械でなくても自動化できるツールやライブラリを紹介
- netmiko
- napalm
- ansible
- salt
全体像
- 業務フロー : 作業, 実際に config 流し込むところの自動化
- ツール依存イメージ
- 構成管理ツール : ansible, salt
- python ライブラリ : napalm, netmiko
- 機能概要
- netmiko, napalm : ライブラリ。抽象化の仕方が違う。
- netmiko...直接コマンドを指定, napalm...ひとつのメソッドで複数のベンダのコマンドに相当
- ansible, salt : ツール。抽象化の仕方が違う。
- saltはnapalmの中で使っているのでベンダをお意識しなくても使えるようになっている
- ansibleはモジュールによるけど、コマンドを直接呼ぶタイプのモジュールが多い
- netmiko, napalm : ライブラリ。抽象化の仕方が違う。
netmiko
netmiko
- シンプルで薄い抽象化ライブラリ。
- login, モード移行, commit などを共通メソッドとして抽象化。
- "conf term" とかは抽象化されてる
- 表示・設定コマンドはコマンドを直接指定する
- netmiko 対応機種
- けっこうある
コード例
- 状態表示
- enable メソッドで抽象化されてる
- send_command で直接コマンドを送る
- コマンド実行結果がそのままとれる (特に parse とかしない)
- 設定変更
- 設定コマンドも直接指定
- send_config_set でコマンド文字列(リスト)を渡して実行
まとめ
- シンプルで薄い
- teraterm マクロよりは楽かな
- waitとかプロンプトとか気にしなくていいので設定に注力
- 対応機種は限られるので注意
napalm
napalm
- 多機能で厚い抽象化ライブラリ
- 一部だけど表示コマンド・設定コマンドまで抽象化
- 対応機種
- netmikoよりはすくない
- 対応メソッド
- サイトにある…使いたい嬉々とやりたい操作の対応をチェックすべし。
コード例
- 状態表示
- get_interfaces メソッド→IOSの場合は"show interface" : 抽象化されてる
- コマンド実行結果も parse されて構造化されたデータとして取得
- 違うOSでも共通のデータ構造で取得できる
- 設定変更
- load_template メソッド。テンプレートを呼び出して、パラメータを渡して、設定実行。
まとめ
- 多機能で厚い
- 一部設定と表示に関しても抽象化…対応していないものについては直接コマンド指定して実行することもできる。
Ansible
ansible
- シンプルな構成管理ツール
- 抽象化というアプローチは特にとっていない。
- ベンダごとにモジュールがあるのでそれを使い分ける
- netconf 対応などは今後注目
- 特徴
- agentless
- yaml で構成定義 (playbook)...なってほしい状態を定義する
- プログラムを書くわけではない
- 対応機種
- v2.3, napalm よりちょっと多い
- 状態表示
- コマンドを直接指定して実行
- 特に parse されるわけじゃない
- 設定変更
- コマンドを直接指定して実行
- "changed=1", 既に設定が入っていれば "changed=0"
まとめ
- シンプル
- インストールも pip で一発。必要なファイルも最低二つ。
salt
salt
- 多機能な構成管理ツール
- 中で napalm を使っている……抽象化するアプローチ
- ベンダごとのモジュールも出てきているけど主要なのは napalm を使う方法
- 概要
- master/agent 型
- yaml で構成定義
- 高機能 : イベントドリブン, スケジューラ, WebAPI
- v2016.11.0 で napalm 統合 (NW機器対応)
Saltの主な用語
- Master : 指示を出す
- Minion : いわゆる Agent, master の指示を受ける
- Master-Minion 間は MQ
- NW機器対応をどうするか…Proxy Minion
- Master → Proxy Minion → NW機器 (ssh等)
- Grains : ホスト名、シリアル番号、バージョン番号などの基本的な情報を保存
- Pillars : 任意のデータを保存できる
対応機種
- 基本的には napalm と同じ
設定がちょっとややこしい
- デバイスID → IPや認証情報は別ファイルで管理(proxy minion)
状態表示例
- Grains から情報を引っ張ってくる
- 内部で napalm キックして情報をとってくる
- 構造化された情報がとれる
設定変更例
- 定義ファイル実行
- "changed=1"
デモ
- 定義ファイルが更新されたら自動的に設定投入 : イベントドリブン
- daemon で動いているのでファイル監視とかができる
まとめ
- 多機能な構成管理ツール
各ツールの比較
- ライブラリか、構成管理ツールか
- 抽象化のアプローチ
- メリット・デメリット
- netmiko: 対応機種が多い。その分抽象化レベルは低い。
- napalm: マルチベンダ環境の情報取得に強い…parseしてくれる。一方、設定系のメソッドがまだ少ない。足りないところは直接コマンド入力
- ansible: シンプル! アプローチが違うので機種ごとにモジュールを使い分け。情報量が多い。開発が盛ん。
- Salt: 高機能…イベントドリブンとかWebAPIとか。内部では napalm を使っているので、マルチベンダ情報取得に強いという特徴を。日本語情報は少ない。調べるときは公式ドキュメント頼み。
ツールつかいどころ選択
- 管理したい危機に対応しているかどうか
- コードを書くかどうか
- コードにすると運用城南があるのであれば構成管理ツール系へ
- シンプル or 高機能
- 高機能 → 学習コストが高い
- どの程度抽象化したいか
- ターゲットが一つ二つであればそんなに抽象化気にしないのでは
- 管理対象機器の種類・ベンダ数
- 種類が多いほど、抽象化レベルが低いとベンダごとのコマンド使い分け・パターンが増える。
- 既存で導入している構成管理ツールがあるならあわせる
まとめ
- 特徴を把握して適材適所で
- ひとつで何でもやれる銀の弾丸はない
これから
- 自動化を進めるにあたって: ツール・人・仕様
- 人: 自動化するための設計・実装スキル、文化
- ツール: 今回の話はここ
- 仕様: api拡充、標準化
QA
- dry-run/diff 表示
- ansible, salt は dry-run できる。netmiko, napalm は自前で dry-run 動作を実装しないといけない。
- ツールによる設定変更・管理のメリット
- 設定要件→定義ファイルのexportなど、中間加工のしやすさ。デメリットとしてはyaml知らないといけないというのはある
- excelからデータとれる?
- 標準ではなさそう。やろうとおもえばやれる
- commit の自動化って大丈夫?
- 表示コマンドの抽象化は必要か?
- ケースバイケースではあるが、あると便利だと思う。自前で parse するのは大変。
- 既存の自動化スクリプト+構成管理ツールでサーバとNWの一括管理というのがメリットがあるのでは
- サーバ側を含めて、というのはメリットがあるだろう
- 機器が対応していない場合のアプローチ?
- paramiko (netmiko内部のssh module) ベースで自作, ansible module 自作、あたりか。
- Ansible導入どうやってる?
- 最初のハードル。インベントリファイルどう作るかとか。別なスクリプトかませないといけないかもしれない。最初の対応はちょっと泥臭い対応が必要になりそう。
- 失敗時ロールバック?
- 実装すれば全部可能。モジュールについては試していないが、junosのケースでは失敗時commitしないようになっているのでは?
所感
懇親会でも他の方と話をしたんですが、この辺のツールで気になるところはある程度共通だなあと。
- エラー処理・例外処理
- dry-run など実行前のチェックの可否
何かしらのカタチでコマンドを投げる、というところだけだとやっぱり実際動かしていシステムで使うのはちょっとねー、という話になる。あと、エラー処理とか例外処理とか、運用している側からすると、やりたいことそのものではないというのもあるかな。エラー処理とか対応手順とかはあるんだけど、CLIベースの機材に対してそれを自動化するための仕掛けそのものを作るのってハードル(手間的な)が高いんだよね…。ツールにあるエラーハンドリングの仕掛けの上でやりたいこと(やりたいエラー処理)に集中できるようにならないかな、と言う話とかね。