クラウドシステム 自動化手法に関する発表 · pdf...
TRANSCRIPT
クラウドシステム自動化手法に関する発表
ブロードバンドタワー岩本裕真
慶應義塾大学 沖幸太朗
目的
• ネットワークを自動化させたい。– オペレーションにかかる人件費の削減
• 物理結線したらネットワーク機器のコンフィギュレーションは、すべて自動生成してほしい。(DHCPでIPアドレスを自動設定してコネクティビティを確保できるのと同等の感覚になってほしい)
• いわゆるZeroconf(ゼロ・コンフィギュレーション・ネットワーキング)を実現したい。
2
実ルーターを用いた環境を想定した自動化のエミュレーションを行うが。。。
• 多くのルータをこれらの検証のために用意することは、あらゆるコストが大きい– 機器コスト– 格納コスト– 設備コスト– 電源等備品コスト
そのため仮想ルータであるvyosとハイパーバイザ(KVM)を用いてエミュレーションを行った
KVMを用いた仮想環境でのクラウド環境エミュレーション
Hypervisor(KVM)
X86 server
VM VM VM VM VM VM・・・・・
クラウド内部のネットワークで多く用いられるトポロジLeaf-Spineでエミュレーション環境で実装する。
lerningserver
インターフェースやルーティングの設定
物理結線さえすればDC内部のトポロジとして参加させる
5
Leaf
LLDPで機器の接続先を確認
Core
Spine
物理トポロジの情報取得
• LLDP(Link Layer Discovery Protocol)を用いた
各ルータの隣接ノードを取得することで全体の構成を把握する
– IEEE 802.1ABで制定されている
–マルチキャストを用いて隣接機器情報を取得するプロトコル
ゲストOSがLLDPを正しく送受信するために
• VM上で仮想スイッチを稼働させて、複数台に相互接続しLLDP送受信する場合、間にブリッジデバイスが介在する通らない事がある。
• 物理マシンに直接繋がっている状況を作るには、このような問題を取り除かなければならない。
macvtapを用いた仮想マシン間接続
• macvtapとは–仮想マシン稼働のLinuxカーネルにて、VMとホストOS外部(ホストOSのカーネル以外)とのLayer-2での通信を可能にする仮想デバイス
• 今回各仮想ルータに対して仮想インターフェイスを割当てmacvtapデバイスを用いて接続を行った。
RPC(Remote Procedure Call)• 対象となるエミュレートされた仮想ルータに対してルーチンを実行させる手法について– netconfを用いてyangからルーチンを定義することを目指した
– データモデルの定義等が業界としてまだ決まりきってない部分が多かった
– 実装もまだまだな感じ
• そのためExscriptというPythonモジュールを用いる事でsshを用いて外部からプログラムを呼び出した。(いわゆるexpectコマンドのpython版モジュール)
システム概要
SQLite3 libvirtd
QEMU+KVM
データの流れ
LLDPで取得した機器間の接続情報
DHCPで取得した各機器のマネジメントポートの情報
各ルーターへのログイン情報各ポートにつけるべきIPアドレス
BGPピアのために必要な設定(AS番号、対向機器の情報)
テーブル設計概要• Router
• 各ルーターのマネジメントポートのIPアドレス、MACアドレス
• Connection• ポート同士の接続関係を定義
• LLDPで取得したポート間の接続情報を登録
• Peer_pool• ルーター間のL2疎通性を確保するための
アドレスプール
• 10.99.0.0/30,10.99.0.4/30…
テーブル設計図
connection
id
From_host
From_port
To_host
To_port
Peer_idpeer_pool
id
Status
Address
Prefix
router
id
Name
Mgmt_mac
Mgmt_ip
詳細図
eth3 eth4
Leaf-1 Spine-2
物理情報から論理情報を自動生成
AS64521 AS64534
10.10.99.53 10.10.99.54
ネットワークアドレス:10.10.99.52/30
データ収集処理
概要 必要な情報 情報収集ソース
ルーターの登録 ホスト名、マネジメントインタフェースの(IPアドレス,MACアドレス)
DHCPサーバー
リンクの登録 接続元・接続先のホスト名、インタフェース名の組 LLDP
払い出し処理• ルーターの名前をキーとして、設定に必要な情報をリスト構造で返す
• get_config_info_by_router_name('core-1')
Core-1
eth1
eth2
eth3
※eth0はマネジメント用インタフェースとして利用し、DHCPにてアドレス割り当て
自AS番号 64513
自AS番号 64514
L2ピア用のアドレス 10.10.99.1/30
システム概要
SQLite3 libvirtd
QEMU+KVM
物理環境の操作にあたる実装
Libvirtctl.py
• VyOS(仮想マシン)の電源操作
• VyOSのマネジメントインタフェースのMACアドレスの取得(virsh)
• DHCP(KVMのdnsmasq)から払い出されたアドレスの監視
52-54-00-ED-27-2110.210.2.6
監視概要
• デモを行うために簡易的な監視を実装
•本来はZabbix,Nagios等との連携が想定されるが、PoCとして作成
• netdbと連携し全ルーターの情報を取得
• マネジメントインタフェースに対してICMPによる監視を実施
• 5秒程度応答がなかったルーターをダウンとみなす
• ラーニングサーバーにダウンしたルーター一覧を通知する
動作フロー
実験環境
FUJITSU RX200 S6 (1Uサーバー)
CPU Xeon L5506 @2.13Ghz 4cores *2CPU
Memory 96GB (8GB * 12Modules)
DISK 300GB *8 RAID6
OS CentOS 7.1 64bit3.10.0-229.14.1.el7.x86_64
Hypervisor KVM (Kimchi as web UI)
ノードの障害時の動き
R1 R3
Learning ServerR0
R2 R4
ノードを立ち上げ
UP
待機状態管理用
サービス用
死活監視−pingが数秒途切れると
downとみなす−ノードがダウンすると別のマシンを起動&configuration
問題点:死活監視がs途切れた
時にダウンとみなすトリガーをどうやってLearning Serverに送る?
DEMO