Como posso gerenciar centenas de IPMI BMCs?

30

Tenho mais de 200 computadores que podem fornecer serviços IPMI . Os servidores são fabricados por várias empresas diferentes (SuperMicro, Dell, etc.), e existem 6-7 modelos BMC de cerca de 5 fornecedores diferentes, e cada modelo tem suas próprias idiossincrasias.

Até agora, temos configurado o BMC usando uma combinação de DHCP e configurando manualmente cada BMC. A configuração manual pode ser feita usando um CD-ROM inicializável, configuração do BIOS (se suportado), do sistema operacional do host com um utilitário como ipmitool , freeipmi , etc. ou remotamente usando ipmitool se pudermos determinar o endereço de rede do dispositivo.

No entanto, esta configuração manual é bastante entediante. Em alguns casos, queremos alterar uma configuração globalmente em todos os BMCs, o que requer que um administrador execute um comando contra dezenas de caixas. Como os BMCs são fornecidos por diferentes fornecedores e cada modelo do BMC pode ter suas próprias idiossincrasias, o mesmo comando nem sempre funciona em todos os BMCs.

Existe algum utilitário que permita configurar em massa as BMCs em dezenas de caixas? Digamos que eu queira consultar um parâmetro em dezenas de diferentes BMCs ou alterar a senha, desabilitar o acesso HTTP à WebUI ou desabilitar a infame cifra zero buraco de segurança.

Pontos de bônus para qualquer utilidade que permita atualizar o firmware do BMC, o que é necessário para mitigar vários vulnerabilidades de segurança

    
por Stefan Lasiewski 07.08.2013 / 20:28

3 respostas

16

Eu provavelmente usaria Ansible . É um mecanismo muito simples de gerenciamento / orquestração de configuração que é muito mais simples de se começar do que o Puppet (o Puppet costumava ser a escolha certa para isso, mas nem sempre agora, depois de ter descoberto o Ansible).

O benefício do Ansible aqui é que ele se comunica diretamente pelo SSH, para que você possa começar a usar apenas suas credenciais e fluxo de trabalho SSH existentes.

Se você está atualmente configurando seu BMC com ipmitool, você seria capaz de fazer algo como:

Defina um arquivo Hosts - Isso informa ao Ansible quais hosts estão no grupo bmc (neste caso), e para quais executar as coisas.

[bmc]
192.168.1.100
192.168.1.101
192.168.1.102

E assim por diante ... Você também pode usar nomes de host nesse arquivo, contanto que sejam resolvíveis.

Em seguida, crie um "playbook", que é o conjunto de comandos para executar em cada host em um grupo de hosts. Você deseja ter esse tipo de layout de diretório de cima para baixo:

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

Um manual tem Funções , que são pequenas seções de configuração que você pode dividir e reutilizar.

Então eu criei um arquivo chamado bmc.yml (a configuração All Ansible está em arquivos YAML)

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

Em seguida, dentro de roles/bmcconfig/tasks/main.yml você pode começar listando os comandos que devem ser executados em cada host, para se comunicar com o ipmi.

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

Quando você executar o manual, com ansible-playbook -i hosts bmc.yml os comandos listados em tasks/main.yml para cada função serão executados na ordem de cima para baixo em cada host encontrado no bmc hostgroup em hosts

group_vars/all é um arquivo interessante, ele permite que você defina pares de valor-chave de variáveis e valores que podem ser usados em seus manuais.

para que você possa definir algo como

ipmitool_password: $512315Adb

no seu group_vars/all e, como resultado, você poderia ter algo como:

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

no playbook.

Você pode encontrar mais informações sobre como usar os "módulos" - os componentes do Ansible que permitem que você faça coisas, como escrever o seu próprio: D, e assim por diante no Páginas de documentação personalizáveis .

    
por 08.08.2013 / 10:29
12

Eu escrevi uma pequena ferramenta python para executar o comando em nossas máquinas 1000 (e suas bmc's, drac's, ilo's e imm's)

O que eu fiz foi escrever um framework python chamado vsc-manage , onde eu posso executar os comandos que são enviados para o servidor ou o bmc e, em seguida, configurou o tipo de máquina que precisa de qual comando.

Eu tenho várias classes que combinam uma mistura desses comandos,

Portanto, para máquinas com um imm , ele será ssh para o imm e executará power off (de uma forma que espere um script)

Para o nosso imb blade chassis , ele será executado no chassi

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

Para alguns dell dracs , ele será executado no sistema operacional (de um nó mestre)

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

Para os nossos sistemas hp mais recentes que fazem ipmi (e vejo mais e mais estes dias), ele será executado no master:

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

ou sistemas dell mais recentes precisam de ipmitool -I open , talvez você precise brincar um pouco com o protocolo.

Para configurações não incluídas no padrão ipmi eu implementei algumas coisas do DMTF SMASH CLP , por exemplo girando o localizador levou:

start /system1/led1

Tudo isso em uma ferramenta de linha de comando que pode ser executada em nossos laptops, que se conectarão ao nó mestre direito, executará o comando correto para o nó direito e retornará a saída, com uma lista adicional de erros, se houver (baseado na saída em stderr e / ou exitcode)

Isto provou ser muito útil, e adicionar suporte para uma nova classe de hardware é relativamente fácil agora (Graças ao fato de que a maioria dos fornecedores suporta totalmente ipmi e DMTFSMASHCLP agora)

Isso não é adequado para a configuração inicial (ele precisa que o bmc tenha um ip único e um gateway correto, mas é isso que nossos fornecedores precisam nos fornecer na entrega), mas pode fazer isso quase qualquer outra coisa (também executa comandos arbitrários no sistema operacional do host, e automatiza o tempo de inatividade em icinga / nagios quando você reinicializa um nó, e / ou reconhece 1000 hosts e serviços em icinga / nagios de uma só vez)

Atualizar o firmware do bmc e adicionar suporte para os nossos switches são problemas pendentes planejados.

UPDATE

Já que pelo menos algumas pessoas pareciam interessadas eu dei um último polimento hoje, e abrai isso em link

Embora isso seja muito direcionado para o nosso próprio fluxo de trabalho (quattor e / ou pbs), espero que pelo menos possa ser interessante.

    
por 09.08.2013 / 12:47
3

Estou surpreso que ninguém tenha mencionado o MAAS ( link ), que faz exatamente o que você está procurando. Ele pode autoconfigurar e gerenciar BMCs e, além disso, implantar qualquer SO nos nós que você inscreveu no sistema. Ele tem uma interface de usuário da Web e uma API RESTful e foi projetado para integrar-se a qualquer sistema de automação.

Quando uma máquina PXE-boots pela primeira vez, o MAAS usa o IPMI dentro da banda para configurar as credenciais automaticamente para você. A partir desse ponto, você pode facilmente inicializar e desligar remotamente uma máquina.

Para mais detalhes, consulte a documentação do MAAS BMC Power Types que mostra como configurar manualmente um BMC para qualquer nó inscrito no MAAS.

    
por 07.09.2016 / 17:02