この記事は さくらインターネット Advent Calendar 2020 17日目の記事です。
みなさん、IPAMとかDCIMとかどうしているでしょうか。
管理するネットワークとかサーバーとかスイッチの数が多いとなんだか頭が痛くなってきませんか。
そこで、さくらの専用サーバ PHYでは裏側の管理の仕組みの1つとしてnetboxをつかっています。netbox、とても便利ですよね。
とても便利なのですが、netboxにポチポチ登録するのは面倒ですし、頻繁にデータ登録を行って継続的にメンテナンスするのも大変です。
そこで、ひたすら楽してnetboxの運用していくためのいくつか工夫を本記事では少しご紹介します。
※この記事は2020年10月23日に行われたオープンソースカンファレンス2020 Online/Fallの発表とも関連があります。もしご興味のあるかたは以下よりご参照ください。
環境
まずnetbox環境の構築ですが、公式のdocker-composeがあるのでこれを使います。楽ですね。
https://github.com/netbox-community/netbox-docker
この netbox-docker
ですが、startup_scriptsとinitializerという仕組みがあり、これで何ができるのかというと、docker-compose up
で起動させると予めデータが入った状態で起動させることが出来るというものです。
startup_scriptsとinitializerを使った運用
startup-scriptとinitializerの仕組みについて軽く掘り下げます。
netbox-docker
には、initializers
というディレクトリがあり、YAMLファイルが保存されています。
docker-compose up
すると、startup_scripts
ディレクトリ内のPythonスクリプトが逐次実行されていき、initializers
以下のYAMLファイルの内容を読み取りながら、netboxにデータ登録を行っていく、という流れです。
さくらの専用サーバ PHYで管理のための運用しているnetboxでは、このstartup_scriptsとinitializerを全面的に用い、ReadOnlyなnetboxを利用しています。
ReadOnlyにしている理由は端的に言うと楽をするためです。
- GUIからの手入力は一切やらない(むしろ出来ないようにする)
- 手入力を認めるとデータを完全なものにする継続的な努力が必要になるのでやらない
- リアルタイムではない
- デプロイされた時点での情報のみ掲載されるsnapshot的なもの
- 定期的にデプロイしなおすことで解決(数時間の反映ラグは許容する)
データの準備
データは initializer
以下のYAMLファイルに記載していきます。なおYAMLファイルはGitで管理しています。
ネットワーク
管理したい情報としては、主にVLANやプレフィックス情報かなと思います。
これらはそれぞれ以下のYAMLファイルに記載できます。(ファイルにはサンプルも記載されているのでわかりやすいです)
- VLAN (
initializers/vlans.yml
) - プレフィックス (
initializers/prefixes.yml
)
とはいえ、こういったYAMLを手作業で編集するのも大変なので、ひたすら楽をする
実現のため、Gitのブランチを作成してYAMLを編集してくれるCLIツールを作成して利用しています。
これぐらい(/27とか/28とか)のネットワークがほしいな、と思ったときに実行すると、未割り当ての空きがあるネットワークプールからネットワークを割り当て、かつVLANアサインまでしてくれます。楽ですね。
サーバーとかスイッチ
サーバやスイッチで管理したい情報としては、主に以下のような情報かと思います。それぞれYAMLファイルに記載できます。
- 設置したラック (
initializers/racks.yml
)- ラックの役割(
rack_roles.yml
)やグループ分け(rack_groups.yml
)もある
- ラックの役割(
- 設置した機器の名称や位置など (
initializers/devices.yml
) - 機器に設定したIPアドレス (
initializers/ip_addresses.yml
) - 機種名 (
initializers/device_types.yml
) - 装置ベンダー (
initializers/manufacturers.yml
)
ただし、さくらの専用サーバ PHYではそれなりの数のサーバやスイッチを運用しています。サーバやスイッチは日を追う毎に増えていくため、都度都度YAMLファイルを編集するのでは面倒です。
そこで、日々の運用によって増えるサーバやスイッチは、元データとして上記のYAMLファイルではなく「DHCPサーバが参照する構成管理ファイル」を参照してnetboxにデータ登録を行っています。
この構成管理ファイルについては、さくらの専用サーバPHYとその裏側 〜物理ホスティング環境構築自動化の取り組み〜 (後編)に具体的な内容がありますのでご参照ください。
ちなみに、全く上記のYAMLファイルを使っていないのかというとそうではなく、台数が少ないものや頻繁に追加が行われないような装置についてはYAMLファイルに記載して管理しています。
「DHCPサーバが参照する構成管理ファイル」を読み取ってnetboxに登録するPythonスクリプトをstartup_scriptsの下に置いておくと、設置したサーバーやスイッチがnetboxに反映されていきます。楽ですね。
おわりに
startup-scriptとinitializerの仕組みをつかって楽なnetbox運用をめざしました。
たぶんこれが一番楽というわけではないと思いますが、概ね楽かなと思います。
ただnetboxは機能が豊富でまだまだ利用していない機能があるので、
さらにデータ登録を進めていきたいと思っています。