Serviço user_data dinâmico simples para cloud-config no CoreOS?

3

A maneira que eu estou executando atualmente um cluster CoreOS em um ambiente VMWare ESXi tem sido usar um ISO montado no vCenter, conforme descrito por este blog ...

link

No entanto, com esse ambiente VMWare específico, tenho que definir explicitamente meu endereço IP atribuído em um /etc/systemd/network/static.network service na configuração da nuvem em alguns locais ... por isso preciso criar um arquivo ISO para cada máquina CoreOS que desejo para correr. Isso parece bom, mas não é dimensionável ... e às vezes os administradores de TI desmontam a unidade ISO sem querer.

A documentação de distribuição OEM ( aqui ) diz que você pode definir um /usr/share/oem/cloud-config.yml file e que você deve ser capaz de "criar unidades adicionais que processam metadados fornecidos pelo usuário, conforme descrito abaixo".

Em seguida, o processo para EC2 e Rackspace é iluminado, e a explicação apenas aponta para o seu código cozido no CoreOS.

O que eu gostaria de fazer é criar uma unidade CoreOS que extraia um arquivo cloud-config via HTTP com uma URL simples ... algo como http://server-ip/cloud-configs/specific-hostname e extrair o arquivo YAML de lá na inicialização ...

Isso resolveria dois problemas: eu não teria que fornecer um ISO separado para cada máquina CoreOS e não precisaria que os administradores do VMWare gerenciassem consistentemente um ISO para cada máquina CoreOS.

Os documentos não são muito claros sobre a melhor maneira de conseguir isso. Parece que o Amazon / Rackspace funciona porque eles têm código dentro do sistema operacional. Como Joe Schmoe fornece dados dinâmicos de configuração de nuvem fora da montagem de um ISO?

A grande desconexão é que eu posso escrever uma unidade que busca o arquivo via wget / curl (o que estiver disponível), mas como eu digo ao CoreOS para processar o YAML depois que eu o busquei?

    
por azurewraith 09.10.2014 / 19:41

1 resposta

1

Então, eu provavelmente deveria ter vasculhado alguns dos outros provedores de nuvem ... como se houvesse esse provedor 'exoscale' que fornece um script bash e uma unidade para disparar esse script bash ...

  - name: exoscale-cloudinit.service
    command: restart
    runtime: yes
    content: |
      [Unit]
      Description=Cloudinit from exoscale (cloudstack-style) metadata
      Requires=coreos-setup-environment.service
      After=coreos-setup-environment.service

      [Service]
      Type=oneshot
      EnvironmentFile=/etc/environment
      ExecStart=/usr/share/oem/bin/exoscale-coreos-cloudinit

... e o método de obter o CoreOS para analisar um cloud-config via URL ...

#!/bin/bash

. /usr/share/oem/bin/exoscale-dhcp

DHCP_SERVER=$(get_dhcp_ip)
USERDATA_URL="http://${DHCP_SERVER}/latest/user-data"

block-until-url "${USERDATA_URL}"
coreos-cloudinit --from-url="${USERDATA_URL}"

... mas agora eu tenho um problema de galinha / ovo, a menos que eu tenha algum método de obter um endereço IP temporário para executar a operação de curl ...

    
por 09.10.2014 / 20:37