はじめに
2021/11/16 - 26 開催の Internet Week 2021で「C6 どう使う?データセンターネットワーキング最前線 Yahoo! JAPAN実用例」というプログラムを拝聴しました。
ZTPの実装方法や、Ansible のロール、テンプレート、変数ファイルの作り方について興味があったため、注目していました。
司会や講演者より特に案内がない限りは、プログラムの内容については基本的に投稿OKである旨の案内が休憩中にありましたので、拝聴中にツイートしていました。この記事では自分のツイートをまとめる形で残しておきます。所々 typo 失礼します・・。
(公開可能な資料は例年通りであれば翌年2月頃に公開されます)
C6 どう使う?データセンターネットワーキング最前線 Yahoo! JAPAN実用例
ヤフーのデータセンタネットワークあらまし
ネットワーク構築に使っているツール。Apstra、Ansible。今日はAnsibleの話。#iw2021jp
— よこち (@akira6592) 2021年11月22日
Clos Network 構築
ONIE、ZTP、コンフィグデプロイ
機器はホワイトボックススイッチとCumulus Linux。最初は空っぽ。ONIEでネットワークOSを新ストール後、ZTPしてAnsibleでコンフィグをデプロイ、が大きな流れ。#iw2021jp
— よこち (@akira6592) 2021年11月22日
ONIEで、ネットワークOSをインストール。異なるスイッチベンダーを導入してるので、自分が何者なのか(ベンダー名など)を伝える必要がある。DHCP Option 60 を利用。DHCPサーバー側でそれを受けとって対応するインストールファイル名のURLを返す。#iw2021jp
— よこち (@akira6592) 2021年11月22日
OSインストール後はZTP。Cumulus Zero Touch Provisioning。まずはSSHできる設定までを入れる。DHCP option 239 (用途自由)を使って設定スクリプトのURLをスイッチに教える。
— よこち (@akira6592) 2021年11月22日
スクリプトは、社内IPAMと連携して、設定用の管理IPアドレスやホスト名を取得(キーはシリアル番号)。#iw2021jp
ZTPでSSHができるようになったらAnsibleでコンフィグデプロイ。
— よこち (@akira6592) 2021年11月22日
対象はCumulus Linuxなので設定ファイルベース。Jinja2テンプレートで生成して転送。
ポイントは手で入れる変数、テンプレートの種類を少する。でもなんでもできるテンプレートにはしない(if文が増えてメンテしにくい)。#iw2021jp
スペルミス失礼しました。正しくは「BGP Unnumbered」手で入れる変数を少なくするには、ネットワーク設計の工夫によるもの。BGP Unnumvered でアドレスアサインを楽に。leafごと、fabricごと、splineごとにAS番号を振っている。
— よこち (@akira6592) 2021年11月22日
leafでは、IPv4 ループバップアドレレスをもとに4-Byte Private-AS を機械的にスクリプトで生成。#iw2021jp
Ansible の変数ファイルの構造。テンプレートを使い回すための工夫(ポインタ的なもの)も仕込んでいる。
— よこち (@akira6592) 2021年11月22日
初期設定用のPlaybookで各ロールを呼び出して、セットで vars_filesやvarsで変数を渡している。#iw2021jp
BGP Peer が想定通りupしてるかもチェックしている。show bgp summary を実行した結果をassert。
— よこち (@akira6592) 2021年11月22日
次はAWXでひと通り自動化したい。#iw2021jp
ネットワーク監視体制
監視には Prometheus を利用。
— よこち (@akira6592) 2021年11月22日
JANOG 40での発表「フロントエンドエンジニアがY!のNW部隊で取り組んだこと」https://t.co/j8r0riPXXf#iw2021jp
Cumulus、frr 向けの exporter は有志作成者をhttps://t.co/lMEQCWk5j4https://t.co/00wGxGgord#iw2021jp
— よこち (@akira6592) 2021年11月22日
長期間metricsを管理するためにThanosを導入。#iw2021jp
— よこち (@akira6592) 2021年11月22日
質疑応答
- (私から)IPアドレスからAS番号を計算するロジックを、Playbook内ではなくコマンドにした理由はどんなところでしょうか。
- 深い理由はないが、コマンドにしたらPlaybook外でも利用できるなどの副次的なメリットがあった。
おわりに
特に以下の点についてとても参考になりました。
- BGP Unnumbered や、AS番号の自動生成などのネットワーク設計レベルの工夫をすることで、自動化の変数を少なくする
- テンプレートファイルは、数を多くし過ぎてもいけないけど、なんでもできるものを作ってもいけなし。うまく使いまわす工夫をする(今回の場合は
profile.yml
によるテンプレートの紐づけ)
発表者の高橋さん、スタッフみなさま、ありがとうございました!