Existe uma maneira de configurar contêineres lxd com configuração de nuvem no momento da provisão?

9

Especificamente, com as ferramentas CLI - não openstack.

Estou vendo como uma configuração de desenvolvimento local com o lxd pode parecer, mas estou de mãos vazias quando se trata de configurar novos contêineres.

Existe alguma maneira idiomática (ou de outra forma) para configurar contêineres lxd? Eu deveria estar olhando para algo mais imutável como imagens docker?

Obrigado. Quaisquer recursos ou ponteiros seriam apreciados.

    
por ben schwartz 03.05.2015 / 23:24

3 respostas

11

Existem várias maneiras de fazer isso diretamente para um contêiner:

lxc init ubuntu: CONTAINER
lxc config set CONTAINER user.user-data - < cloud-init-config.yml
lxc start CONTAINER

Ou ainda mais curto:

lxc launch ubuntu: CONTAINER --config=user.user-data="$(cat cloud-init-config.yml)"

Ou através de um perfil:

lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev
    
por stgraber 23.11.2015 / 18:59
2

Um forro com o qual fui hoje, este o define no perfil padrão para novos contêineres:

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc profile set default user.user-data -

Este configura-o em um contêiner existente, mas cuidado, ele não funcionará em contêineres que já foram inicializados, pois o material da chave SSH só é executado na primeira inicialização:

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc config set CONTAINER_NAME user.user-data -

    
por Trent Lloyd 19.06.2016 / 08:51
2

Eu tinha uma pergunta um pouco mais específica do que o OP, mas demorei um pouco para descobrir o que estava fazendo de errado. Eu pensei em postar aqui para ajudar qualquer outra pessoa a ficar com dificuldades.

Eu queria configurações de rede estática para um contêiner LXC / LXD Ubuntu 16.04 hospedado no Ubuntu 16.04. Comecei tentando o que Stéphane escreveu , mas não estava funcionando. Tudo o que consegui foi o contêiner de tentativa de DHCP padrão com um link IPv6 local, já que não há DHCP sendo servido na minha configuração.

Meu YAML inicial parecia (algo) como o seguinte (tirado da nuvem -init docs).

network:
  version: 1
  config:
    - type: physical
      name: eth0
      subnets:
        - type: static
          address: 192.168.23.14/27
          gateway: 192.168.23.1
          dns_nameservers:
            - 192.168.23.2
            - 8.8.8.8
          dns_search:
            - exemplary.maas

E eu estava carregando isso em user.user-data , conforme descrito acima.

lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml

Não foi até que encontrei a documentação do Stéphane na fonte LXC / LXD que percebi que precisava carregar esse valor em user.network-config .

Então meu YAML final olhou (algo) assim.

version: 1
config:
  - type: physical
    name: eth0
    subnets:
      - type: static
        address: 192.168.23.14/27
        gateway: 192.168.23.1
        dns_nameservers:
          - 192.168.23.2
          - 8.8.8.8
        dns_search:
          - exemplary.maas

Em seguida, carreguei isso em user.network-config .

lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml

Parece que precisarei manter dois arquivos diferentes por contêiner: um para que as configurações de rede sejam carregadas para user.network-config ; e um para outra configuração para carregar em user.user-data a menos que eu possa encontrar uma maneira de usar um único arquivo para tudo.

Outro problema que encontrei e que não era óbvio para mim foi tentar configurar automaticamente componentes que não são de rede.

lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml

O seguinte YAML aplicado com o comando acima (apesar de parecer correto usando lxc config show CONTAINER ) não criou nada dentro do meu contêiner.

write_files:
  - content: |
    # My new /etc/foo.bar file

    Foo
    Bar

    path: /etc/foo.bar

A pista enterrada em Formatos de entrada de dados do usuário, item 5: Cloud Config Data , diz:

  

começa com "#cloud-config" ou "Content-Type: text/cloud-config"   Este conteúdo é "cloud-config". Veja os exemplos de um exemplo comentado de formatos de configuração suportados.

Eu não acredito que esta documentação seja muito clara. Eu não consegui nada para trabalhar usando o formulário "Content-Type: text / cloud-config", mas eu encontrei se você colocar #cloud-config na primeira linha, o YAML é analisado. Eu só posso supor que algo não está certo, seja o meu entendimento ou a programação de alguém. Não faz sentido para mim que o YAML que você carregou explicitamente como o valor da chave user.user-data deva ser usado como algo diferente de dados de configuração da nuvem. Por que mais alguém faria isso se não fosse a configuração da nuvem e, portanto, por que um comentário (que nem sequer usa a sintaxe normal da shebang) seria obrigatório ?

Então, sem sentido, a sintaxe que funcionou para user.user-data é:

#cloud-config

write_files:
  - content: |
      # My new /etc/foo.bar file

      Foo
      Bar

    path: /etc/foo.bar
    
por Styne666 21.07.2017 / 16:14

Tags