web-dev-qa-db-ja.com

何百ものIPMI BMCをどのように管理できますか?

[〜#〜] ipmi [〜#〜] サービスを提供できるコンピュータが200台以上あります。サーバーはいくつかの異なる企業(SuperMicro、Dellなど)によって製造されており、約5つの異なるベンダーからの6〜7個のBMCモデルがあり、各モデルには独自の特異性があります。

これまで、DHCPを組み合わせてBMCを構成し、各BMCを手動で構成してきました。手動構成は、ブート可能CD-ROM、BIOSからの構成(サポートされている場合)、ホストオペレーティングシステムから ipmitool などのユーティリティを使用して行うことができます。 、 freeipmi など、またはデバイスのネットワークアドレスを特定できる場合は、リモートでipmitoolを使用します。

ただし、この手動設定はかなり面倒です。場合によっては、すべてのBMCの設定をグローバルに変更する必要があります。これには、管理者が数十のボックスに対してコマンドを実行する必要があります。 BMCは異なるベンダーによって提供されており、BMCの各モデルには独自の特異性がある可能性があるため、同じコマンドがすべてのBMCで機能するとは限りません。

数十のボックスでBMCを一括構成できるユーティリティはありますか?何十もの異なるBMCのパラメーターをクエリしたり、パスワードを変更したり、WebUIへのHTTPアクセスを無効にしたり、 悪名高い暗号ゼロ セキュリティを無効にしたりする穴。

BMCファームウェアの更新を可能にするユーティリティのボーナスポイント。これは、いくつかのセキュリティの脆弱性 を軽減するために必要です

30

おそらく Ansible を使用します。これは非常にシンプルな構成管理/オーケストレーションエンジンであり、Puppetよりも使い始めるのがはるかに簡単です(これまで、Puppetは私の頼りになる選択肢でしたが、必ずしも今はAnsibleを発見していません)。

ここでのAnsibleの利点は、SSH経由で直接通信するため、既存のSSH認証情報とワークフローだけを使用して開始できることです。

現在ipmitoolを使用してBMCを構成している場合は、次のようなことができます。

Hostsファイルを定義する-これは、どのホストがbmcグループ(この場合)にあり、どのホストで実行するかをAnsibleに伝えます。

[bmc]
192.168.1.100
192.168.1.101
192.168.1.102

など...解決可能であれば、そのファイルでホスト名を使用することもできます。

次に、「プレイブック」を作成します。これは、ホストグループの各ホストで実行するコマンドのセットです。次のようなトップダウンのディレクトリレイアウトが必要です。

ansible/
   playbooks/
      bmc.yml
      roles/
        bmcconfig/
           files/
           handlers/
             main.yml
           tasks/
             main.yml
           templates/
   group_vars/
      all

プレイブックにはRolesがあります。これは、分解して再利用できる構成の小さなセクションです。

だから私はbmc.ymlというファイルを作成します(すべてのAnsible構成はYAMLファイルにあります)

---
- name: Configure BMC on the hosts
  hosts: bmc
  user: root
  roles: 
    - bmcconfig

次に、roles/bmcconfig/tasks/main.yml内で、各ホストで実行されるコマンドのリストを開始して、ipmiと通信することができます。

---
  - name: Install ipmitool
    apt: pkg=ipmitool state=installed
  - name: Run ipmitool config
    Shell: ipmitool -your -options -go -here

ansible-playbook -i hosts bmc.ymlを使用してプレイブックを実行すると、各ロールのtasks/main.ymlにリストされているコマンドが、bmcホストグループhosts

group_vars/allは興味深いファイルです。プレイブックで使用できる変数と値のキーと値のペアを定義できます。

だからあなたは次のようなものを定義することができます

ipmitool_password: $512315Adb

group_vars/allの結果、次のようなものが得られます。

Shell: ipmitool -your -options -go -here --password=${ipmitool_password}

ハンドブック。

「モジュール」の使用方法に関する詳細情報-何かを行うことができるAnsibleのコンポーネント、独自の:Dを作成する方法など Ansible Documentation Pages

16
Tom O'Connor

私は小さなpython私たちの1000台のマシンでコマンドを実行するためのツール(およびそれらのbmc、drac、ilo、およびimm)を作成しました)

私がしたことは vsc-manage と呼ばれるpython-frameworkを作成することで、サーバーまたはbmcに送信されるコマンドを実行し、どのタイプのマシンにどのコマンドが必要かを構成しました。

これらのコマンドを組み合わせたクラスがいくつかありますが、

したがって、immを備えたマシンの場合、IMMにsshしてpower offを実行します(期待スクリプトのような方法で)

私たちのimbブレードシャーシの場合、これはシャーシで実行されます

power -%(command)s -T system:blade[%(blade)s]

一部のDell dracsの場合、(マスターノードの)OSでこれを実行します

idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s

ipmiを実行する新しいhpシステムの場合(そして、最近ますます増えています)、マスターでこれを実行します。

ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s

または新しいDellシステムにはipmitool -I openが必要です。プロトコルを少し試してみてください。

Ipmi標準に含まれていない設定については、 DMTF SMASH CLP からいくつかを実装しました。ロケーターをオンにする:

start /system1/led1

これらすべては、ラップトップから実行できるコマンドラインツールで実行できます。これは、適切なマスターノードに接続し、適切なノードに対して適切なコマンドを実行し、エラーの追加リストがあればそれを出力に返します( stderrおよび/またはexitcodeへの出力)

これは非常に便利であることが証明されており、新しいクラスのハードウェアのサポートを追加するのは比較的簡単です(ほとんどのベンダーが現在ipmiとDMTFSMASHCLPを完全にサポートしているという事実のおかげです)。

これは初期構成には適していません(bmcに固有のIPと正しいゲートウェイが必要ですが、これはベンダーが配信時に提供する必要があるものです)が、他のほとんどすべてを実行できます(ホストで任意のコマンドを実行することもできます)システム、およびicinga/nagiosでダウンタイムを自動的にスケジュールし、ノードを再起動したり、icinga/nagiosの1000のホストとサービスを一度に確認したりします)

Bmcファームウェアの更新とスイッチのサポートの追加は、計画されている未解決の問題です。

[〜#〜]更新[〜#〜]

少なくとも一部の人々は興味を持っているようだったので、私はそれに最後の磨きを今日与えました、そしてこれをオープンソース化しました https://github.com/hpcugent/vsc-manage

これは非常に私たち自身のワークフロー(quattorやpbs)をターゲットにしていますが、少なくとも興味深いものになることを願っています。

12
Jens Timmerman

誰もがMAAS( http://maas.io/ )に言及していないことに驚いています。 BMCを自動構成および管理し、さらにシステムに参加させたノードにOSを展開できます。 Web UIとRESTful APIを備え、あらゆる自動化システムと統合するように設計されています。

マシンが初めてPXEブートするとき、MAASはインバンドIPMIを使用して資格情報を自動的にセットアップします。それ以降は、簡単にリモートでマシンを起動してシャットダウンできます。

詳細については、MAASに登録されているノードのBMCを手動で構成する方法を示す MAAS BMC電力タイプのドキュメント を確認してください。

3
kiko