技術コラム

製品技術
NVIDIA

ZTP(Zero Touch Provisioning)とAnsibleで実現するMellanoxスイッチの初期構成方法(ZTP編)

ZTP(Zero Touch Provisioning)とAnsibleで実現するMellanoxスイッチの初期構成方法(ZTP編)

Mellanoxの 構成でZTPとAnsibleを利用する前に、ZTPとは? Ansibleとは?を簡単にご説明します。
(様々なサイトで説明が記載されておりますので、サマリー的に記載しております。)

先ずは、前編としてZTPを利用したMellanoxスイッチの初期構築方法についてご紹介をさせていただきます。

ZTP(Zero Touch Provisioning)について

現在、様々なネットワークスイッチにおいて運用など、多くのソリューションにより自動化されるなかで、もちろんMellanoxのスイッチもZTPに対応しております。
例えば初期構築・故障対応後の再構築時に既存ベースコンフィグを手動で設定、またはアップロードの作業は、スイッチの台数分だけ人的作業の工数が多くなってしまう傾向があります。

Mellanoxでも初期構築や再構築時にベースコンフィグや最新のコンフィグ、またdockerイメージのロードについて、ZTPを利用して簡単に設定構築が実現できます。

 

ネットワーク構成

今回は簡易的な実践方法のご紹介のため、下記のようなネットワーク構成で実施しております。

  1. Mellanox SN2010とMSX6012FのマネジメントポートにLANケーブルを接続した状態で起動します。
    (Mellanoxスイッチは、通常、初期状態でマネジメントポートはDHCPで起動します。)
    起動後、スイッチはDHCPアドレスのリクエストを実施します。
  2. スイッチが起動したらDHCPサーバはスイッチからのDHCPリクエストにAckを返答します。この時、OSイメージファイル、コンフィグ、dockerイメージの保存場所をあわせて返答します。(DHCP option66、67、58を利用します。)
  3. スイッチはDHCPのアドレスを受信後、初期状態ではZTPを利用してOSイメージファイル、コンフィグファイル、dockerイメージファイルの順にロードします。

 

DHCPサーバのdhcpd.conf設定ファイルについて

以下のdhcpのパッケージを利用しています。

  • 今回eno2インターフェイスからのみdhcpを動作させています。
  • 各スイッチのMACアドレスを利用し、フィックスドアドレスとして割り当てています。
  • また今回ファイルのロードにscpを利用しますが、サーバでtftpやftpサーバを設定することにより、tftpやftpでもイメージのダウンロードは可能です。

dhcp-libs-4.2.5-68.el7.centos.1.x86_64
dhcp-common-4.2.5-68.el7.centos.1.x86_64
dhcp-4.2.5-68.el7.centos.1.x86_64

dhcpd.confを以下のように編集し、イメージファイルを以下のディレクトリに保存します。
dhcpd.conf (/etc/dhcp/dhcpd.conf)

———
DHCPDARGS=”eno2″;

subnet 192.168.20.0 netmask 255.255.255.0 {
   option broadcast-address    192.168.20.255;
   option subnet-mask              255.255.255.0;
   option routers                        192.168.20.40;
   range                                        192.168.20.180 192.168.20.195;
}

 

host sw-6016 {
   hardware ethernet  00:02:C9:AA:BB:CC;
   fixed-address 192.168.20.190;
   option                              tftp-server-name
“scp://root:password@192.168.20.40/ztp/,scp://root:password@192.168.20.40/ztp/”;
   option bootfile-name “image-PPC_M460EX-3.6.8012.img,sw-6016.conf”;
}

 

host sw-2010 {
   hardware ethernet  50:6B:4B:AA:BB:CC
   fixed-address 192.168.20.192;
   option
tftp-server-name “scp://root:password@192.168.20.40/ztp/,scp://root:password@192.168.20.40/ztp/,scp://root:password@192.168.20.40/ztp/”;
   option bootfile-name “onyx-X86_64-3.7.1200.img,sw-2010.conf,emset_4.00.img.tar.gz”;
}

———

イメージファイルの保存先は以下としています。

  • 今回は/以下にztpディレクトリを作成し、ztp以下に各種ファイルを保存しています。

 

/ztp/emset_4.00.img.tar.gz
/ztp/image-PPC_M460EX-3.6.8012.img
/ztp/onyx-X86_64-3.7.1200.img
/ztp/sw-2010.conf
/ztp/sw-6016.conf

img.tar.gzファイルはdockerのイメージファイルです。(dockerファイルはSN2010にロードさせてます)
imgはOSのイメージファイルです。
confファイルは、スイッチのコンフィグファイルです。(.confファイルはrunning-configファイルを利用します。<バイナリ形式のコンフィグファイルはztpでは利用出来ないため注意してください。>)

ZTP利用時の動作ログ

dhcpサーバのログ

■ SN2010スイッチのDHCPリクエスト~Ackのログ

Jun 10 16:00:45 centos7-2 dhcpd: DHCPDISCOVER from 50:6b:4b:aa:bb:cc via eno2
Jun 10 16:00:45 centos7-2 dhcpd: DHCPOFFER on 192.168.20.192 to 50:6b:4b:aa:bb:cc via eno2
Jun 10 16:00:45 centos7-2 dhcpd: Dynamic and static leases present for 192.168.20.192.
Jun 10 16:00:45 centos7-2 dhcpd: Remove host declaration sw-2010 or remove 192.168.20.192
Jun 10 16:00:45 centos7-2 dhcpd: from the dynamic address pool for 192.168.20.0/24
Jun 10 16:00:45 centos7-2 dhcpd: DHCPREQUEST for 192.168.20.192 (192.168.20.40) from 50:6b:4b:aa:bb:cc via eno2

Jun 10 16:00:45 centos7-2 dhcpd: DHCPACK on 192.168.20.192 to 50:6b:4b:aa:bb:cc via eno2

■MSX6012FスイッチのDHCPリクエスト~Ackのログ

Jun 10 16:03:05 centos7-2 dhcpd: DHCPDISCOVER from 00:02:c9:aa:bb:cc via eno2
Jun 10 16:03:05 centos7-2 dhcpd: DHCPOFFER on 192.168.20.190 to 00:02:c9:aa:bb:cc via eno2
Jun 10 16:03:05 centos7-2 dhcpd: Dynamic and static leases present for 192.168.20.190.
Jun 10 16:03:05 centos7-2 dhcpd: Remove host declaration sw-6016 or remove 192.168.20.190
Jun 10 16:03:05 centos7-2 dhcpd: from the dynamic address pool for 192.168.20.0/24
Jun 10 16:03:05 centos7-2 dhcpd: DHCPREQUEST for 192.168.20.190 (192.168.20.40) from 00:02:c9:aa:bb:cc via eno2
Jun 10 16:03:05 centos7-2 dhcpd: DHCPACK on 192.168.20.190 to 00:02:c9:aa:bb:cc via eno2

 

ZTP動作時のスイッチ動作表示ログ
■SN2010スイッチのZTP動作時の表示ログ
Mellanox Onyx Switch Management
switch-cc450e login:
Initializing zero-touch

Waiting for zero-touch start

Fetching image onyx-X86_64-3.7.1200.img

Fetching configuration sw-2010.conf

Applying configuration sw-2010.conf

Fetching docker image emset_4.00.img.tar.gz

Loading docker image from emset_4.00.img.tar.gz

Docker image emset:4.00 is loaded

Starting docker container ‘ztp_containter’ from image emset:4.00

Zero-touch is finished

 

Mellanox Onyx Switch Management
SN2010 login: admin
Password:

Mellanox Switch

SN2010 [standalone: master] > en
SN2010 [standalone: master] # conf t
SN2010 [standalone: master] (config) #

■SN2010のshow logの出力

Jun 10 07:57:51 switch-cc450e ztpd[3198]: [ztpd.NOTICE]: Fetching image from: scp://root:********@192.168.20.40/ztp/onyx-X86_64-3.7.1200.imgJun 10 07:58:54 switch-cc450e ztpd[3198]: [ztpd.NOTICE]: Image already installed on active partition. Skip image upgrade.
Jun 10 07:58:54 switch-cc450e ztpd[3198]: [ztpd.NOTICE]: Start to install SW image.
Jun 10 07:58:54 switch-cc450e ztpd[3198]: [ztpd.NOTICE]: Fetching config file from: scp://root:********@192.168.20.40/ztp/sw-2010.conf

Jun 10 07:58:55 switch-cc450e ztpd[3198]: [ztpd.NOTICE]: Applying text configuration file: sw-2010.conf
Jun 10 07:59:07 SN2010 ztpd[3198]: [ztpd.NOTICE]: Zero-touch load config done.
Jun 10 07:59:11 SN2010 ztpd[3198]: [ztpd.NOTICE]: Fetching image from: scp://root:********@192.168.20.40/ztp/emset_4.00.img.tar.gz
Jun 10 07:59:33 SN2010 ztpd[3198]: [ztpd.NOTICE]: Loading docker image from emset_4.00.img.tar.gz
Jun 10 08:01:35 SN2010 ztpd[3198]: [ztpd.NOTICE]: Starting docker container ztp_container from emset:4.00
Jun 10 08:02:25 SN2010 ztpd[3198]: [ztpd.NOTICE]: Zero-touch load docker container done.

■MSX6012FスイッチのZTP動作時の表示ログ
Mellanox MLNX-OS Switch Management

switch-643a38 login:
Initializing zero-touch

Waiting for zero-touch start

Fetching image image-PPC_M460EX-3.6.8012.img

Fetching configuration sw-6016.conf

Applying configuration sw-6016.conf

Zero-touch is finished

Mellanox MLNX-OS Switch Management

MSX6012F login: admin
Password:

Mellanox Switch

MSX6012F [standalone: master] > en
MSX6012F [standalone: master] # conf t
MSX6012F [standalone: master] (config) #

■MSX6016Fのshow logの出力
Jun 10 07:11:55 switch-643a38 ztpd[5054]: [ztpd.NOTICE]: Image already installed on active partition. Skip image upgrade.
Jun 10 07:11:55 switch-643a38 ztpd[5054]: [ztpd.NOTICE]: Start to install SW image.
Jun 10 07:11:55 switch-643a38 ztpd[5054]: [ztpd.NOTICE]: Fetching config file from: scp://root:********@192.168.20.40/ztp/sw-6016.conf
Jun 10 07:11:57 switch-643a38 ztpd[5054]: [ztpd.NOTICE]: Applying text configuration file: sw-6016.conf
Jun 10 07:12:32 MSX6012F ztpd[5054]: [ztpd.NOTICE]: Zero-touch load config done.
Jun 10 07:12:32 MSX6012F ztpd[5054]: [ztpd.NOTICE]: Zero-touch load docker container done.

ZTPが終了すると、”Zero-touch is finished”とCLI上に表示されます。
ZTPが開始される前にスイッチにログインを実施しても問題ございません。
今回の例では、分かり易くするために、ZTPが終了後にスイッチにログインしています。
注意事項として、ZTPが終了した後、enableモード、またはコンフィグレーション ターミナルモードに移行後、現在のrunning configを保存するためにconfiguration writeまたはwrite memoryを実施すると、以下のエラーメッセージが出力されます。

SN2010 [standalone: master] (config) # write memory
% Write operation is suppressed by zero-touch. Enter ‘no zero-touch suppress-write’ to disable suppress-write.
SN2010 [standalone: master] (config) #

これは、ZTPが終了後にrunning configを保存しようとしても、ZTPのデーモンが動いている状態ではrunning configの保存ができないため、ZTPを無効にする必要があります。

SN2010 [standalone: master] (config) # no zero-touch suppress-write
SN2010 [standalone: master] (config) # write memory

Zero-touch is disabled
SN2010 [standalone: master] (config) #

ZTPのまとめ

MellanoxスイッチでZTPを実行する場合は、DHCPサーバを用意し、OSイメージファイル、コンフィグファイル等をdhcpd.confで指定した場所に保存しておけば直ぐに実行でき、故障した時のRMA後の初期設定、またベースコンフィグに初期化したい場合、迅速に設定を戻すことが可能となります。
コンフィグファイルは、定期的にDHCPサーバにてテキストベースでスイッチからアップロードを実施すれば、何世代ものコンフィグファイルの保存もでき、dhcpd.confに設定対象のコンフィグファイル名を記述するのみとなりますので、工数が大幅に削減出来るかと思いますので、設定するスイッチの台数が多い場合は、ベースコンフィグだけでも利用する価値が高いと思いますので、是非実施してみてください。

ZTPにてベースコンフィグを戻した後、Mellanoxスイッチの初期構成方法(Ansible編)編に続きます。